if, X & Y & hitTest = games

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

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

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

if, X & Y & hitTest = games

Δημοσίευση από spookyb52 » 02 Μαρ 2004 18:16

..........

και όχι μόνο. [ τα παρακάτω flash αρχεία είναι μόλις 7,κάτι ψιλά kilobyte, πώς το΄παθα]

Έχουν ξαναπαρουσιαστεί κάποια από τα παρακάτω αλλά...

Η εντολή με την οποία ανιχνεύουμε την σύγκρουση είναι η hitTest και είναι πολύ απλή στη σύνταξη της.

Την θέση ενός αντικειμένου την βλέπουμε με τα x και y

Άς μπούμε στο ψητό. Εδώ δέν θα παρουσιάσω την σύνταξη αλλά την χρήση των εντολών.

Για τη σύνταξη εδώ: http://www.freestuff.gr/forums/viewtopic.php?t=8501

Εντολή if. Ακόμα και άν δέν έχετε προγραμματίσει ποτέ ξανά αποκλείετε να μήν έχετε δέι η ακούσει για την if και τη σύνταξη της

Πώς την χρησιμοποιούμε :

If (συνθήκη) { ενέργειες; }

Για παράδειγμα 3 περιπτώσεις :
if (περίσευμα<=κομπόδεμα) {απόθεμα = άφραγκος;}

if(lada==supercar) {keimeno.text = "ο κόσμος τρελάθηκε";}

if(interval<1000) {this.stopDrag();}

επίσης : if(ego==theos) {eseis=skoypidia;} else {ego=skoypidi;}
Νομίζω καταλάβατε πώς γίνεται η χρήση της ( τα βασικά ανέφερα )

Παράδειγμα άσκηση

φτιάξτε ένα input textbox και δώστε για instance name το keimeno (εδώ θα εισάγετε ένα αριθμό για δοκιμή)

φτιάξτε ένα dynamic textbox και δώστε για variable name το result (εδώ θα υπάρχει αποτέλεσμα ανάλογο με το άν στο προηγούμενο dynamic textbox ο αριθμός ήταν μικρότερος απο 300 η μεγαλύτερος.)

φτιάξτε ένα button και δώστε του τον παρακάτω κώδικα

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

on &#40;release&#41; &#123;
	if &#40;keimeno.text>300&#41; &#123;
		result = "over 300";
	&#125; else &#123;
		result = "less than 300";
	&#125;
&#125;
Άν σπάσουμε το παραπάνω έχουμε αναλυτικά (τί βάζουμε μέσα στις αγκύλες) :

on(release) {ενέργειες}

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

if &#40;keimeno.text>300&#41; &#123;
		result = "over 300";
	&#125; else &#123;
		result = "less than 300";
if (keimeno.text>300) {ενέργειες}

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

result = "over 300";
else {ενέργειες}

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

result = "less than 300";
result = "ανάλογα με την περίπτωση";

Δοκιμάστε το δίνοντας μιά τιμή στο dymanic textbox και πατ΄ντας το button. Είναι ιδιαίτερα απλό και δέν ελέγχει άν θα του δώσετε αριθμό η όχι. Κάνει τα βασικά μόνο.

Δείτε και το flashaki εδώ :




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

Χ και Υ

Φτιάξτε ένα input textbox και δώστε για variable το όνομα xpos και άλλο ένα με την ονομασία ypos

φτιαξτε ένα κύκλο και μετατρέψτε τον σε movie

Δώστε του για instance name το circlethat

Φτιάξτε ένα button και δώστε του τον παρακάτω κώδικα

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

on &#40;release&#41; &#123;
	circlethat._x = xpos;
	circlethat._y = ypos;
&#125;
Δοκιμάστε το παραπάνω

Η σύνταξη είναι απλή. Άν έχουμε ένα movie πχ με instance name το kiklos για να του αλλάξουμε το x θα λέγαμε πολύ απλά kiklos._x = 30;

Δείτε ένα παράδειγμα εδώ : (το παρακάτω flash το έχω φτιάξει έτσι ώστε οι τιμές των Χ και Υ να είναι πάντα τέτοιες ώστε να μήν ξεφεύγουν απο το πλαίσιο)

Μπορείτε επίσης να πατήσετε πάνω στον κύκλο για να τον μεατακινείτε με το mouse και να βλέπετε τις θέσεις των x & y. Πατήστε το space για να τον αφήσετε




Για να πάρουμε την θέση του mouse γράφουμε _xmouse η _ymouse

Φτιάξτε δύο dynamic text boxes και δώστε στο ένα variable name το xme και στο άλλο τη λέξη yme

βάλτε 2 frames στο layer και βάλτε σε ένα frame τα παρακάτω actions

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

xme = _xmouse;
yme = _ymouse;
δοκιμάστε το. Είναι ίδιο με το παρακάτω flashaki




εκτός απο το να θέσουμε ένα νέο X και Y στα αντικείμενα μπορούμε να τους πούμε να μετακινηθούν και σε μια κοντινή θέση απο αυτή που ήδη είναι. Πχ :

Φτιάξτε ένα movie clip με instance name kivotio και ένα button στο οποίο δώστε τις παρακάτω εντολές:

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

on&#40;release&#41; &#123;_root.kivotio._x = _root.kivotio._x+1;&#125;
Το παραπάνω θα έχει ώς αποτέλεσμα να μετακινείτε 1 pixel δεξιά κάθε φορά που θα πατάτε το button. Άν ήταν αρνητικό το πρόσημο η μετακίνηση θα γινόταν προς τα αριστερά. αντίστοιχα και για τον άξονα των y

Άν δίνατε τώρα στον κώδικα του button το

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

on &#40;release&#41; &#123;
	_root.kivotio._x += 1;
&#125;
Αυτό θα είχε ώς αποτέλεσμα την μετακινήση 1 pixel δεξιά. Δέν είναι όμως το ίδιο με πρίν. Αυτό θα το καταλάβετε καλύτερα άν χρησιμοποιήσετε την μετατόπιση των x και y στα παιχνίδια.

Μετατρέψτε το button σε movie clip (απο τα properties)

Και δώστε του το παρακάτω :

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

onClipEvent &#40;enterFrame&#41; &#123;
	if &#40;Key.isDown&#40;Key.RIGHT&#41;&#41; &#123;
		_root.kivotio._x += 15;
	&#125;
&#125;
Αυτό έχει ώς αποτέλεσμα τη μετακίνηση του movie δεξιά με ταχύτητα ανάλογη με αυτή μετά το ίσσον (15 στο δικό μου παράδειγμα) κάθε φορά που πατάτε το δεξί βελάκι.
Δοκιμάστε το.

Αλλάξτε τον κώδικα σε

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

onClipEvent &#40;enterFrame&#41; &#123;
	if &#40;Key.isDown&#40;Key.RIGHT&#41;&#41; &#123;
		_root.kivotio._x = +15;
	&#125;
&#125;
Αυτό έχει ώς αποτέλεσμα τη μετακίνηση του movie 15 pixels δεξιά απο την αριστερή άκρη του flash.

Για την κίνηση έχω γράψει επίσης εδώ http://www.freestuff.gr/forums/viewtopic.php?t=8430

Πειραματιστείτε με τα παραπάνω και φτιάχτε δικές σας δημιουργίες.

----------------------------------------------------------
DETECT COLLISION
Στο παρακάτω flash φανταστείτε ότι έχουμε 3 τούνελ (κόκκινο, μαύρο και μπλέ)

κάντε με τη σειρά τα παρακάτω

1) Προσπαθήστε με τα βελάκια να περάσετε στο αριστερό άκρο μέσα απο την κόκκινη διαδρομή. Θα διαπιστώσετε ότι υπάρχει μιά αντίσταση και ότι άν αφήσετε στη μέση την προσπάθεια σας θα επιστρέψει μόνο του πίσω στην θέση απο την οποία ξεκίνησε

2) Προσπαθήστε με τα βελάκια να περάσετε στο αριστερό άκρο μέσα απο την μαύρη διαδρομή. Θα δείτε ότι δέ μπορείτε να προχωρήσετε

3) Προσπαθήστε με τα βελάκια να περάσετε στο αριστερό άκρο μέσα απο την μπλέ διαδρομή. Θα δείτε ότι μπορείτε να προχωρήσετε σε ευθεία διαδρομή (στον άξονα των Χ) και ότι επιπλέον δέν μπορείτε να μετακινηθείτε προς τα πάνω η κάτω (στον άξονα των Y) ---αυτό που γίνεται είναι ότι ρυθμίζει το Y του κύκλου να είναι σταθερό όση ώρα θα είστε πάνω στο μπλέ movie clip.---



Η συνέχεια άλλη μέρα...
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
Επικοινωνία:

if, X & Y & hitTest = games

Δημοσίευση από spookyb52 » 25 Μαρ 2004 14:13

Ήρθε η ώρα να πούμε για hitTest ή ανίχνευση σύγκρουσης

Το παρακάτω flash τελειώνει όταν το total pain υπερβεί το 36



Πώς γίνεται η σύνταξη της hitTest

Φτιάξτε δύο κύκλους και μετατρέψτε τους χωριστά σε movie clips
Στο ένα movie δώστε τον παρακάτω κώδικα

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

onClipEvent &#40;enterFrame&#41; &#123;
	if &#40;this.hitTest&#40;"_root.kiklos2"&#41;&#41; &#123;
		trace&#40;"Τα δύο clips βρίσκονται σε επαφή "+i++&#41;;
	&#125;
&#125;
Στο δεύτερο clip δώστε Instance name το kiklos2
Βάλτε τα δύο clips να έρχονται σε επαφή και πατήστε ctrl+enter
Άν τα κάνατε σωστά θα σας βγεί ένα μήνυμα, σε περίπτωση που δέν έρχονται σε επαφή δέν θα γίνει τίποτα

η σύνταξη είναι η εξής δηλαδή

myMovieClip.hitTest(target)
η

instance1.this.hitTest("instance2")

instance1 το instance name του clip1
instance2 το instance name του clip2 που έρχεται σε επαφή με το πρώτο

Φτιάξτε ένα dynamic text box και δώστε για instance name το score


Στον κύκλο που είχατε δώσει τον παλιό κώδικα δώστε τον νέο

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

onClipEvent &#40;enterFrame&#41; &#123;
	this.startDrag&#40;true&#41;;
	if &#40;this.hitTest&#40;"_root.kiklos2"&#41;&#41; &#123;
		_root.score.text = i++;
	&#125;
&#125;
Φτιάξατε το παρακάτω




Υπάρχουν και άλλα που θα μπορούσα να πώ αλλά αυτά είναι όσα χρειάζεσται. Το μόνο που μένει έιναι να πειραματιστείτε.
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 γενικά”

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

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