Κίνηση αυτοκινήτου στο χώρο

Λύσεις προβλημάτων για το δημοφιλές πρόγραμμα κατασκευής παρουσιάσεων στο διαδίκτυο.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από spookyb52 » 30 Ιουν 2004 12:33



Πάρτε το παραπάνω swf από εδώ

http://users.freestuff.gr/spookyb52/racecar/gta.swf [80kb]

Αρχικά σχεδιάστε ένα αυτοκίνητο που να κοιτάει πρός τα πάνω όπως την εικόνα από κάτω

Εικόνα

μετατρέψτε το σε movie clip και δώστε του ονομασία Instance car
Βάλτε το γραφικό μέσα στο clip στη μέση περίπου και όχι στην πάνω αριστερά άκρη (σημείο 0, 0)

Δημιουργήστε ένα νέο clip με Instance name track και εκεί μέσα σχεδιάστε την πίστα σας

Έδώ να πώ ότι αυτό που θα μετακινείτε στους άξονες x και y δέν θα είναι το αυτοκίνητο αλλά η πίστα. Το αυτοκίνητο θα το βάλουμε στο μέσο του flash και το μόνο που θα κάνει είναι να περιστρέφεται

Για τον έλεγχο θα χρησιμοποιήσουμε τα βελάκια

up/down για επιτάχυνση/επιβράδυνση και left/right για το rotation

Τον κώδικα θα τον γράψουμε στο keyframe

Επίσης σημειώστε ότι η κίνηση της πίστας στον άξονα τον x θα δωθεί από τον τύπο

pista._x -= Math.sin(car_angle)*speed;

και για τον y

pista._y += Math.cos(car_angle)*speed;

Βάλτε το αυτοκίνητο που σχεδιάσατε στην μέση του flash και τοποθετήστε και στην σκηνή την πίστα

Ο κώδικας μας θα μπεί στα actions του keyframe και θα είναι ο παρακάτω

UPDATE: Ο νέος κώδικας σε μήνυμα λίγο πιό κάτω!!



Η επεξήγηση άλλη στιγμή. Τώρα βαριέμαι... Απλά να πώ ότι το παραπάνω θα μπορούσε με hitTest εντολές και κάτι περισσότερο... :p να συμπληρωθεί. Πχ με έλεγχο για checkpoints με μείωση της ταχύτητας όταν βγαίνει εκτός πίστας και τα λοιπά. Θα τα συμπληρώσω άλλη στογμή και θα το μετονομάσω το tut σε racing game η κάτι σχετικό :PPP

Υπάρχουν πολλά που πρέπει να γραφτούν ακόμα!
Τελευταία επεξεργασία από το μέλος spookyb52 την 16 Φεβ 2010 13:39, έχει επεξεργασθεί 1 φορά συνολικά.
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από LightForce » 01 Ιούλ 2004 16:11

πολυ καλο spooky :-)
δωσε μας και το flaaaaaaaaa

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από spookyb52 » 01 Ιούλ 2004 16:14

παίζεις το κεφάλι σου αυτή την στιγμή! :lol:
:arrow: http://www.freestuff.gr/forums/viewtopic.php?t=10965
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

sakisxim

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από sakisxim » 13 Φεβ 2010 19:22

spooky odos poli kalo.. to swf! 8a mas doseis kai to fla giati kapou kano lathos k dn xero pou?

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από korgr » 13 Φεβ 2010 20:32

Μετα απο 6 χρονια, αντε να βρεθει το fla lol :)

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από spookyb52 » 16 Φεβ 2010 13:43

Σίγουρα δέν έχω το flashaki εκείνο πλέον! έκανα όμως μερικές αλλαγές και διορθώσεις στο υπαρχων Script και δίνω και ένα πρόχειρα φτιαγμένο flash στο τέλος του μηνύματος

Λίγα μόνο λόγια για τον κώδικα σχετικά με την περιστροφή του αυτοκινήτου...

Στις πρώτες γραμμές του κώδικα θα δείτε αυτό εδώ --->

speeds = [[2, 1], [1, 2.5], [0.4, 4], [0.04, 5]];
relativeRotation = [true, 0.5];


--- Το rotation στο αυτοκίνητο είναι σε αναλογία με την σχετική ταχύτητα του οχήματος όταν η πρώτη τιμή του πίνακα relativeRotation είναι true
Η δεύτερη τιμή στον πίνακα (0.5) θα αφαιρεθεί από το τελικό rotation. Μπορείτε να την αυξήσετε ή να την μειώσετε0 [ να είναι όμως πάντα μικρότερη της μονάδας < 1 ]


--- Άν η τιμή είναι false τότε γίνεται χρήση του πίνακα speeds.


Ο πίνακας speeds περιέχει nested arrays που καθορίζουν τον ρυθμό του rotation όταν η ταχύτητα είναι πάνω από ένα όριο

ΠΧ για τον πίνακα

speeds = [[2, 1], [1, 2.5], [0.4, 4], [0.04, 5]];

[2, 1] // όταν η ταχύτητα είναι πάνω από 2 διαίρεσε το carRotation με 1

[1, 2.5] // όταν η ταχύτητα είναι πάνω από 1 διαίρεσε το carRotation με 2.5 κτλ.

Ο πίνακας μπορείς να αλλαχθεί με βάση τις δικές σας ανάγκες. πχ:

speeds = [[4, 1], [2, 1.5], [0.4, 3]];

η

speeds = [[6, 1]];

η

speeds = [[8, 1], [7, 2], [6, 3.5], [4, 5]];


ο πλήρης κώδικας (η κίνηση γίνεται με τα βελάκια αλλά μπορεί εύκολα να αλλαχθεί) --->

Κώδικας: Επιλογή όλων

item = pista;
carRotation = 1.5;
carAcceleration = 0.05;
reverseSpeed = 1.8;
brake = 0.99;
maxSpeed = 5;
speed = 0;
r = false;
speeds = &#91;&#91;2, 1&#93;, &#91;1, 2.5&#93;, &#91;0.4, 4&#93;, &#91;0.04, 5&#93;&#93;;
relativeRotation = &#91;true, 0.5&#93;;
//---------------------------- 
onEnterFrame = function &#40;&#41; &#123;
	relat = &#40;carRotation*speed&#41;/maxSpeed;
	// ----- Rotation δεξιά
	if &#40;Key.isDown&#40;Key.RIGHT&#41;&#41; &#123;
		for &#40;var i in speeds&#41; &#123;
			if &#40;speed>speeds&#91;i&#93;&#91;0&#93;&#41; &#123;
				if &#40;!relativeRotation&#91;0&#93;&#41; &#123;
					&#40;!r&#41; ? car._rotation += carRotation/speeds&#91;i&#93;&#91;1&#93; &#58; car._rotation -= carRotation/speeds&#91;i&#93;&#91;1&#93;;
				&#125; else &#123;
					&#40;!r&#41; ? car._rotation += relat-relat*relativeRotation&#91;1&#93; &#58; car._rotation -= relat-relat*relativeRotation&#91;1&#93;;
				&#125;
				continue;
			&#125;
		&#125;
	&#125;
	// ----- Rotation αριστερά
	if &#40;Key.isDown&#40;Key.LEFT&#41;&#41; &#123;
		for &#40;var i in speeds&#41; &#123;
			if &#40;speed>speeds&#91;i&#93;&#91;0&#93;&#41; &#123;
				if &#40;!relativeRotation&#91;0&#93;&#41; &#123;
					&#40;!r&#41; ? car._rotation -= carRotation/speeds&#91;i&#93;&#91;1&#93; &#58; car._rotation += carRotation/speeds&#91;i&#93;&#91;1&#93;;
				&#125; else &#123;
					&#40;!r&#41; ? car._rotation -= relat-relat*relativeRotation&#91;1&#93; &#58; car._rotation += relat-relat*relativeRotation&#91;1&#93;;
				&#125;
				continue;
			&#125;
		&#125;
	&#125;
	// ------ Επιτάχυνση / Επιβράδυνση
	if &#40;&#40;Key.isDown&#40;Key.UP&#41; && speed<maxSpeed&#41; && &#40;r != true&#41;&#41; &#123;
		speed += carAcceleration;
	&#125;
	if &#40;&#40;Key.isDown&#40;Key.DOWN&#41; && speed>0&#41; && &#40;r != true&#41;&#41; &#123;
		speed -= carAcceleration*1.2;
	&#125;
	if &#40;Key.isDown&#40;Key.UP&#41; && r == true&#41; &#123;
		if &#40;speed<.2&#41; &#123;
			speed = 0;
			r = false;
		&#125; else &#123;
			speed *= .96;
		&#125;
	&#125;
	// 
	if &#40;!Key.isDown&#40;Key.UP&#41; && !Key.isDown&#40;Key.DOWN&#41;&#41; &#123;
		if &#40;speed<0.04 && speed>=0&#41; &#123;
			speed = 0;
		&#125; else if &#40;speed>=0.04&#41; &#123;
			speed *= brake;
		&#125;
	&#125;
	// ---- Όπισθεν
	if &#40;Key.isDown&#40;Key.DOWN&#41; && &#40;speed == 0 || r == true&#41;&#41; &#123;
		r = true;
		speed = reverseSpeed;
	&#125;
	// 
	if &#40;speed<0&#41; &#123;
		speed = 0;
	&#125;
	if &#40;speed>maxSpeed&#41; &#123;
		speed = maxSpeed;
	&#125;
	// --- Κίνηση background movie
	if &#40;!r&#41; &#123;
		with &#40;item&#41; &#123;
			_y += Math.cos&#40;Math.PI/180*car._rotation&#41;*speed;
			_x -= Math.sin&#40;Math.PI/180*car._rotation&#41;*speed;
		&#125;
	&#125; else &#123;
		with &#40;item&#41; &#123;
			_y -= Math.cos&#40;Math.PI/180*car._rotation&#41;*speed;
			_x += Math.sin&#40;Math.PI/180*car._rotation&#41;*speed;
		&#125;
	&#125;
&#125;;
Συνημμένα
gta_car_style.rar
(24.36 KiB) Μεταφορτώθηκε 574 φορές
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

sakisxim

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από sakisxim » 18 Φεβ 2010 17:51

euxaristo poli ... tha to dokimaso meta ti sxoli... :)

sakisxim

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από sakisxim » 19 Φεβ 2010 13:54

fadastiko.. mono pou dn m kathetai kati kala.. dn xero an exoun kamia sxesi oi diastaseis.. 1000x800 pou xrisimopoiisa.. to autokinitaki paei ipervolika arga.. dn mporo na tou doso ego tin taxitita pou thelo? gt thelo autes tis diastaseis...proton kai deuteron.. sto arxiko swf pou anevases, exeis k anixteusi sigrousis k kala me ta ktiria.. kati roz an dn kano lathos grammes.. gia na kano kati tetoio ti prepei na kano??

spookyb52
Δημοσιεύσεις: 1891
Εγγραφή: 23 Ιαν 2002 01:00
Τοποθεσία: Lost in the mansion
Επικοινωνία:

Κίνηση αυτοκινήτου στο χώρο

Δημοσίευση από spookyb52 » 01 Μαρ 2010 10:18

απλά αλλάζεις τα fps στα οποία τρέχει το flash άν χρειάζεται (πχ το default 12fps είναι λίγο) η πειράζεις τις τιμές των μεταβλητών στην αρχή.

Κώδικας: Επιλογή όλων

carRotation = 1.5; // περιστροφή αυτοκινήτου
carAcceleration = 0.05; // επιτάχυνση
reverseSpeed = 1.8; // ταχύτητα όπισθεν &#40;σταθερή τιμή που δέν αλλάζει&#41;
brake = 0.99; // Δύναμη φρεναρίσματος
maxSpeed = 5;//Μέγιστη ταχύτητα
επίσης άν αυξήσεις αρκετά την ταχύτητα καλό θα είναι στο παρακάτω να αλλάξεις την τιμή true σε false στο relativeRotation και ίσως να χρειαστεί να φτιάξεις και ένα πίνακα speed προσαρμοσμένο στις νέες τιμές άν δέν σε βολευει ο default.

Κώδικας: Επιλογή όλων

speeds = &#91;&#91;2, 1&#93;, &#91;1, 2.5&#93;, &#91;0.4, 4&#93;, &#91;0.04, 5&#93;&#93;;
relativeRotation = &#91;true, 0.5&#93;;
επίσης οι διαστάσεις δέν παίζουν ρόλό από μόνες τους. Άν όμως στις διαστάσεις που χρήσιμοποιεις έχει βάλει πολλά και βαριά γραφικά και το pc δέν έχει επαρκή μνήμη τότε ναί το flash θα σέρνεται :wink:
Life is like a fast car on an icy road. Brakes don't work, yes I know it, but I step on the gas
Garage punk | Rockabilly | Rock 'n' Roll | Stoner

Απάντηση

Επιστροφή στο “Flash γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες