Ανίχνευση σύγκρουσης σε κύκλο

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

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

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

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από spookyb52 » 14 Μάιος 2005 20:33

Είχα καιρό να γράψω ένα tutorial και έτσι είπα να postaro το παρακάτω.



Στο παραπάνω flash έχω δημιουργήσει ανίχνευση σύγκρουσης με 2 διαφορετικούς τρόπους. Αριστερά έχω χρησιμοποιήσει τη συνάρτηση hitTest του flash και δεξιά έχω χρησιμοποιήσει μαθηματικούς υπολογισμούς.

Άν παρατηρήσετε το παραπάνω flash θα διαπιστώσετε ότι στην περίπτωση της hitTest() το flash ανιχνεύει σύγκρουση μεταξύ των 2 κύκλων (γκρίζου και κόκκινου) παρόλο που δέν φαίνεται να έρχονται σε επαφή μεταξύ τους. Αυτό συμβαίνει γιατί η hitTest() αναγνωρίζει τον κύκλο σάν ορθογώνιο σχήμα.

Στην 2η περίπτωση, δεξιά, η ανίχνευση σύγκρουσης δουλεύει χωρίς πρόβλημα.

Κάντε drag με το mouse τους δύο γκρίζους κύκλους και παρατηρήστε τι συμβαίνει σε κάθε περίπτωση.

Η δημιουργία ανίχνευσης σύγκρουσης με μαθηματικά είναι αρκετά απλός. Αυτό που κάνουμε είναι να συγκρίνουμε το άθροισμα των ακτίνων των 2 κύκλων με την απόσταση από το κέντρο των κύκλων.

Συγκεκριμένα

Εικόνα

Φτιάχτε 2 κύκλους, μετατρέψτε τους σε movie symbols και δώστε τους Instance name circle1 και circle2 αντίστοιχα

-----------------------
ΠΡΟΣΟΧΗ :

Όταν μετατρέπουμε ένα σχήμα σε movie αυτό τοποθετείτε στη θέση x=0, y=0 μέσα στο symbol.

Εικόνα

Εμείς θα πρέπει να μπούμε μέσα στο movie symbol και να τοποθετήσουμε το σχήμα στη μέση. Πχ άν ο κύκλος
έχει width 22 και height 22 θα πρέπει να τοποθετηθεί στη θέση x=-11 & y=-11

--------------------------

...συνεχίζω

Στο flash ο κώδικας θα γραφτέι

για το άθροισμα των 2 ακτίνων

radius = circle1._width/2+circle2._width/2;

και για την απόσταση μεταξύ τους

distance = Math.sqrt(Math.pow(circle1._x-circle2._x, 2)+Math.pow(circle1._y-circle2._y, 2));

Η Math.pow() υψώνει σε κάποια δύναμη μια τιμή. Πχ : Math.pow(4, 2) = 16 η Math.pow(2, 3) = 8

Η Math.sqrt() υπολογίζει την τετραγωνική ρίζα. Πχ : Math.sqrt(9) = 3

Βάζουμε λοιπόν σε ένα keyframe τον ακόλουθο κώδικα

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

radius = circle1._width/2+circle2._width/2;
distance = Math.sqrt(Math.pow(circle1._x-circle2._x, 2)+Math.pow(circle1._y-circle2._y, 2));
if &#40;distance<=radius&#41; &#123;
	trace&#40;"collision = true"&#41;;
&#125; else &#123;
	trace&#40;"collision = false"&#41;;
&#125;
Άν η απόσταση [distance] είναι μικρότερη-ίση με το radius οι 2 κύκλοι έρχονται σε επαφή και θα εμφανιστεί στο Output παράθυρο το μήνυμα collision = true, διαφορετικα θα εμφανιστεί το μήνυμα collision = false.

Τώρα φτιάχτε ένα μπιλιαρδάκι και βάλτε το στο forum να το δούμε και εμείς :ppp
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 » 14 Μάιος 2005 21:29

πολύ ωραίο spooky και χρήσιμο.

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

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από spookyb52 » 14 Μάιος 2005 21:45

ωωω :oops: Φχαρστώ, φχαρστώ

Υγ: Και τα δικά σου παιχνιδάκια είναι super :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

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

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από LightForce » 14 Μάιος 2005 23:12

νάσαι καλά. 8)

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

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από spookyb52 » 18 Μάιος 2005 00:37

:callme: Πρός ξεχασιάρηδες Moderators

:arrow: Κάντε το βοήθημα.:)
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

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

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από spookyb52 » 21 Μάιος 2005 17:55

Helloooo... :hammer: Anybody home? :roll:
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

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10242
Εγγραφή: 28 Ιούλ 2001 03:00

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από Cha0s » 13 Μαρ 2006 22:17

Έλα Γκρινιάρη :lol:

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από cordis » 14 Μαρ 2006 00:31

ούτε έναν χρόνο δεν κάναμε.. :P
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

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

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από spookyb52 » 14 Μαρ 2006 19:02

Μου το είχε πεί η μαμά μου: Ο επιμένων νικά :wink: Τα κατάφερα! :lol:
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

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από soteres2002 » 15 Μαρ 2006 10:03

lol sostos. episis tha borouse na ginei kai kati allo kata tin apopsi mou oi dio kikloi tha borousane na theorithoun san dio sinola pou kinountai mesa se ena epipedo Venn. Gia na anixneusoue pithani sigrousi elegxoume an i tomi ton sinolon ton dio kiklon den einai to keno sinolo. Nomizo pos me tin teleftaia actionscript parexei litourgikotita datasets kai sigekrimena areas opos i java, ara ki auto tha borouse na doulepsei. i idea einai to to image pou kaneis mesa ston kodika to pernas mesa se ena dataset tetoio oste na krataei ola ta simeia tou kiklou, kai stin periptosi mas ton dio kiklon. Anyway...

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Ανίχνευση σύγκρουσης σε κύκλο

Δημοσίευση από soteres2002 » 16 Μαρ 2006 17:48

auti i texniki teriazei perissotero se kinoumenes xlapatses-akanonista sximata 2D mesa se epipedo i sto xoro. alla stin periptosi ton kiklon fisika einai pio aplo na sigkrineis tis aktines.

Απάντηση

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

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

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