movie clips και for

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

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

Απάντηση
Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

movie clips και for

Δημοσίευση από Knorcedger » 04 Ιούλ 2005 07:06

Έχω 5 movie clips (με όνοματα button1, button2..), που το καθενα έχει μέσα του ακομα ένα movie clip (με ονοματα button1in2, button2in2..) και το κάθε movie clip έχει μέσα του ένα text field (με ονοματα button1in1, button2in1..).

Τα παραπάνω movie clips είναι σε ένα layer (τα button1, button2..) και σε ένα δευτερο layer έχω τον κωδικα

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

button1.button1in2.button1in.text = _root.button1text;
button2.button2in2.button2in.text = _root.button2text;
button3.button3in2.button3in.text = _root.button3text;
button4.button4in2.button4in.text = _root.button4text;
button5.button5in2.button5in.text = _root.button5text;
Γίνεται ο παραπάνω κωδικας να αντικατασταθει με μια εντολη for, ή θα έπρεπε τα νουμερα που αλλαζουν να είναι στο τελος?
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

movie clips και for

Δημοσίευση από HeRu » 04 Ιούλ 2005 10:24

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

for &#40;var i = 1; i < 6; i++&#41; &#123;
	this&#91;"button" + i&#93;&#91;"button" + i + "in2"&#93;&#91;"button" + i + "in"&#93;.text = _root&#91;"button" + i + "text"&#93;;
&#125;

Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

movie clips και for

Δημοσίευση από Knorcedger » 04 Ιούλ 2005 10:55

Ότι και να σου πω για να σε ευχαριστησω, στο έχω ήδη ξαναπει. Αρα αποφευγω να επαναλάβω τον εαυτο μου, και επανερχομαι με μερικες ακόμα ερωτησεις.


Στο for, το var τι ρόλο παίζει?

Το this, τωρα που δεν είναι γραμενο σε κωδικα που υπαρχει σε κάποιο movie clip, αλλα σε ένα frame, αναφέρεται στο movie clip, μέσα στο οποιο παριέχεται το frame αυτο?
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

movie clips και for

Δημοσίευση από HeRu » 04 Ιούλ 2005 15:02

Το var είναι προαιρετικό. Το βάζω από συνήθεια για να φαίνεται πιο ολοκληρωμένος ο κώδικας.

Το this συνήθως αναφέρετε στο παρόν timeline που τρέχεις τον κώδικα.

Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

movie clips και for

Δημοσίευση από Knorcedger » 04 Ιούλ 2005 23:15

Thanx again

Και ένα πρόβλημα που έχω με το this.

Ο παρακάτω κωδικας είναι σε ένα movie clip με όνομα compo, και μέσα στο compo υπάρχει το movie clip letter, και μέσα σε αυτό το text box letterin.

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

search = "Knorcedger";
num = search.length;
l = 20;
for &#40;i=0; i<num; i++&#41; &#123;
	duplicateMovieClip&#40;letter, "letter"+i, i&#41;;
	setProperty&#40;"letter"+i, _x, l&#41;;
	l += 30;
&#125;
abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
i = 0;
j = 0;
setInterval&#40;function &#40;&#41; &#123;
	_root.compo&#91;"letter"+i&#93;.letterin.text = abc.charAt&#40;j&#41;;
	if &#40;_root.compo&#91;"letter"+i&#93;.letterin.text == search.charAt&#40;i&#41;&#41; &#123;
		i += 1;
		j = -1;
	&#125;
	j++;
	if &#40;i == num && j == delay&#41; &#123;
		for &#40;m=0; m<num; m++&#41; &#123;
			_root.compo&#91;"letter"+m&#93;.letterin.text = "";
			i = 0;
			j = 0;
		&#125;
	&#125;
&#125;, 30&#41;;
Το προβλημα είναι πως αν αλλαξω τα "_root.compo" με "this", ο κωδικας δεν δουλευει. Αυτο που θελω είναι να διωξω τα _root

Εδω έχω και τα fla/swf αν θες να ρίξεις μια ματιά
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

movie clips και for

Δημοσίευση από HeRu » 05 Ιούλ 2005 02:35

Έκανα κάτι λίγο διαφορετικό. Χρησιμοποίησα ενα object για να κρατάει reference στο interval για να μπορείς να το σταματήσεις και να κρατάει reference στο current timeline. Enjoy :) ( Έκανα και κάποιες μικροαλλαγές )

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

search = "Knorcedger";
num = search.length;
l = 30;
for &#40;i = 0; i < num; i++&#41; &#123;
	duplicateMovieClip &#40;letter, "letter" + i, i&#41;;
	this&#91;"letter" + i&#93;._x = l * i;
&#125;
abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
i = 0;
j = 0;
var o = &#123;&#125;;
o.rt = this;
o.id = setInterval &#40;function &#40;o&#41; &#123;
	var cl = o.rt&#91;"letter" + i&#93;;
	cl.letterin.text = abc.charAt &#40;j&#41;;
	if &#40;cl.letterin.text == search.charAt &#40;i&#41;&#41; &#123;
		i += 1;
		j = -1;
	&#125;
	j++;
	if &#40;i == num&#41; &#123;
		for &#40;m = 0; m < num; m++&#41; &#123;
			this&#91;"letter" + m&#93;.letterin.text = "";
		&#125;
		clearInterval &#40;o.id&#41;;
	&#125;
&#125;, 10, o&#41;;

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

movie clips και for

Δημοσίευση από spookyb52 » 05 Ιούλ 2005 13:10

Γιατί δέ θές να χρησιμοποιείς την διαδρομή? Πού είναι το πρόβλημα...?

Δέν μπορείς να μήν τη χρησιμοποιήσεις... απλά να δημιουργήσεις μια αναφορά σε αυτή και να χρησιμοποιείς το όνομα της αναφοράς. Αλλά γιατί να το κάνεις αυτό? Περιπλέκεις τον κώδικα και δημιουργείς επιπλέον αντικείμενα χωρίς λόγο!

Σχετικά με την var.

Η var χρησιμοποιείται για να δηλώσει πώς μια μεταβλητή είναι τοπική (local)
Η δήλωση αυτή δέν έχει αξία παρά μόνο άν γίνει χρήση της μέσα σε εισαγωγικά {} σε μιά συνάρτηση και υπάρχει μόνο για την συνάρτηση στην οποία δηλώθηκε.

Πχ το παρακάτω

function f(){var j=0;trace(j);} f(),trace(j)

δίνει

0 // η μεταβλητή j είναι τοπική της συνάρτησης f
undefined // η μεταβλητή j δέν υφίσταται έξω από τη συνάρτηση

Σε αντίθεση με άλλες γλώσες όπως η c++ που μιά μεταβλητή μπορεί να δεχτεί διάφορους τύπους ανάλογα με τα Bytes πχ σε long, short, unsigned, double, float κτλ στην actionscript μπορείς απλά να ορίσεις άν η μεταβλητή θα είναι local (var) η global (_global)

Τελευταία στο flash και την actioscript 2 προστέθηκε το στοιχείο του strict data typing όπου καθορίζεις το άν μια μεταβλητή θα περιέχει boolean, string, number τιμές.

Για να γίνει αυτό θα πρέπει η δήλωση της μεταβλητής να κάνει χρήση του var

πχ var varMe:Boolean = true;

Εξαίρεση βέβαια είναι οι συναρτήσεις όπυ μπορούμε να γράψουμε

function this_code(a:String, b:Number, c:Boolean) {
}

Η χρήση της var στις υπόλοιπες περιπτώσεις δέν είναι αναγκαία καθώς δέν προσθέτει κάποιο στοιχείο στον κώδικα.
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

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

movie clips και for

Δημοσίευση από HeRu » 05 Ιούλ 2005 14:05

Γενικά είναι καλό να αποφεύγεις να χρησιμοποιείς την εντολή _root. Έτσι αυξάνεις την μεταφερσιμότητα και είναι πιο εύκολη η συντήρηση και η ανάπτυξη.

Το var έχει νόημα σε δύο περιπτώσεις
  • 1. όπως είπε spookyb52 μέσα σε αγκύλες ({}) για να σβηστεί από την μνήμη όταν τελειώσει η χρησιμότητα του και να ελευθέρωσης πόρους. (garbage collection)
    2. Από το Flash 2004 και μετά για να δηλώσεις το είδος του variable με την σύνταξη var name:type. Αυτό χρησιμεύει μόνο όσο είσαι στο compiler για να σε βοηθήσουν να αποφύγεις προγραμματιστικά λάθη ( όπως πχ να βάλεις κείμενο σε μια variable που την έχεις δηλώσει σαν αριθμό ). Στο τελικό swf σβήνονται αυτόματα όλα τα types.
spookyb52 στον παραπάνω κώδικα η βασική λειτουργία του object είναι να περάσει σαν παράμετρο στο setInterval αναφορά στον εαυτό του για να μπορέσεις να σταματήσεις την επανάληψη εσωτερικά. Σκέψου λίγο πως θα έπρεπε να το κάνεις διαφορετικά&#8230;να δημιουργήσεις μια επιπρόσθετη function που να καλείται σε κάθε επανάληψη και να τερματίζετε από εκεί το interval. Αυτό που σου φαίνεται πολύπλοκο στην ουσία αν το σκεφτείς έχει απλοποιήσει πολύ τον κώδικα.

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

movie clips και for

Δημοσίευση από spookyb52 » 05 Ιούλ 2005 14:33

HeRu έγραψε:...είναι καλό να αποφεύγεις να χρησιμοποιείς την εντολή _root...

...spookyb52 στον παραπάνω κώδικα η βασική λειτουργία του object είναι να περάσει σαν παράμετρο στο setInterval αναφορά στον εαυτό του για να μπορέσεις να σταματήσεις την επανάληψη εσωτερικά...
Συμφωνώ μαζί σου HeRu αλλά δέν αναφερόμουν στον κώδικά σου (τον οποίο τον κοίταξα στα γρήγορα και δέν πρόσεξα βασικά τι έκανες) :wink:

Άποψή μου είναι πώς δέν υπάρχει λόγος να αντικαταστήσει την _root παρά μόνο άν τον ενδιαφέρει να προσαρμόσει τον κώδικα σε διάφορες περιπτώσεις πράγμα το οποίο δέν θυμάμαι να ανέφερε ο Knorcedger.

Υγ: και τώρα που κοίταξα πάλι το script σου... πολύ καλός ο κώδικας που έγραψες παραπάνω! Μου αρέσεις! :) όχι ερωτικά... μήν παρεξηγηθούμε :lol:

Να σε ρωτήξω κάτι? Άν θές απαντάς. Το flash το χρησιμοποιείς επαγγελματικά?
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

Άβαταρ μέλους
HeRu
Flash Moderator
Δημοσιεύσεις: 800
Εγγραφή: 16 Αύγ 2004 10:49
Επικοινωνία:

movie clips και for

Δημοσίευση από HeRu » 05 Ιούλ 2005 15:12

Ναι! Δουλεύω σαν Flash developer σε μια e-learning εταιρία. Κάνω heavy actionscript programming oop και διασύνδεση δεδομένων με xml κυρίως. Έχω φτιάξει και μερικά παιχνίδια για το Ram :P

Υ.Γ. Σχετικά με το "_root" έχω να το χρησιμοποιήσω 2-3 χρόνια και πίστεψε με έχω γράψει πολύ κώδικα σε αυτό το διάστημα.
Υ.Γ.2 Και εμενα μου αρέσεις :P:P:P:P lolz 8) :lol: 8) :kaloe: :pint: :hammer:

Άβαταρ μέλους
Knorcedger
Script Master
Δημοσιεύσεις: 1226
Εγγραφή: 18 Μάιος 2004 04:29
Επικοινωνία:

movie clips και for

Δημοσίευση από Knorcedger » 05 Ιούλ 2005 15:40

Να μαι και εγω.

Το _root δεν θέλω να το χρησιμοποιήσω, γιατι θέλω ο παραπάνω κώδικας (με κάποιες ακόμα προσθήκες) να γίνει ένα component. Οπότε για να μην χρειάζεται ο χρήστης να βάζει σαν instant name το compo, έπρεπε να φύγει το _root

Το clearInterval μηδενίζει τον μετρητη του setInterval?

Αν είδατε μεταβλητες (όπως το delay) που δεν έχουν τιμες, είναι επειδη αυτο που έγραψα πραπάνω είναι είναι ένα τμήμα του συνολικου κώδικα.

Παιδια, εμενα μου αρεσετε και οι δυο :D

Ευχαριστω για την βοήθεια και για την εξήγηση του var
Εικόνα
myUbuntu.gr[Ελληνικός οδηγός για Ubuntu]

Απάντηση

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

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

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