change var listener AS2

ActionScript και Flex Προγραμματισμός

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

Απάντηση
Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

change var listener AS2

Δημοσίευση από dapadoupas » 26 Μαρ 2010 14:49

Γενικά υπάρχει ένα θέμα με το onEnterFrame και μου καθηστερεί όλη την εφαρμογή, έχει κανείς ιδέα αν υπάρχει τρόπος να δημιουργήσω listener που να κανει trig όταν αλάζει μια μεταβλητή. Το onEnterFrame δημιουργεί θέμα και γενικά το βρήσκω λίγο απαράδεκτο σαν λύση.

Έχω βρει αυτή τη λύση σε AS3, αλλα σε AS2????

http://stackoverflow.com/questions/3068 ... ntlistener

Ευχαριστώ!
beware the power of Arrays...

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

change var listener AS2

Δημοσίευση από HeRu » 26 Μαρ 2010 16:50

Υπάρχει η εντολή watch. Έχει και example στα livedocs.

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

change var listener AS2

Δημοσίευση από dapadoupas » 29 Μαρ 2010 15:42

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

// Write the callback function to be executed if the speed property changes
var viewWatcher:Function = function(prop, oldVal, newVal) {
    // Check whether speed is above the limit
	if (newVal == "none") {
		trace("1. "+newVal) 
		ApplicationHolder._visible = false;
		TxtHolder._visible = false;
		ApplicationBG._visible = false;
	}
	
	
     if (newVal == "Text") {			
		ApplicationHolder._visible = false;
		TxtHolder._visible = true;
		if &#40;ApplicationBG._visible<>true&#41; &#123;
			ApplicationBG._visible = true;
		&#125;
	&#125;
	
	
	if &#40;newVal == "Application"&#41; &#123;
		trace&#40;"3. "+newVal&#41;
		ApplicationHolder._visible = true;
		TxtHolder._visible = false;
		if &#40;ApplicationBG._visible<>true&#41; &#123;
			ApplicationBG._visible = true;
		&#125;
	&#125;



	if &#40;newVal == "Home"&#41; &#123;
		trace&#40;"4. "+newVal&#41;
		ApplicationHolder._visible = true;
		TxtHolder._visible = false;
		ApplicationBG._visible = false;
	&#125;

	
trace&#40;"5. "+newVal&#41;
		
	 // Return the value of newVal.
   return newVal;
&#125;

var TnFWatcher&#58;Function = function&#40;prop, oldVal, newVal&#41; &#123;
if &#40;newVal == true&#41; &#123;
		SwitchViewBtn._visible = true;
	&#125; else &#123;
		SwitchViewBtn._visible = false;
	&#125;

&#125;

Λοιπόν, κατέληξα σε αυτό εδω τον κώδικα, όλα ωραία αλλα δε μου αναγνωρίζει τις μεταβλητές

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

ApplicationHolder._visible = false;
		TxtHolder._visible = false;
		ApplicationBG._visible = false;
Παρ'όλο που της έχω δηλώσει στην αρχή του κώδικα. οι μεταβλητές αυτές είναι κάποια MovieClip που θέλω να γινονται visible ή να εξαφανίζονται.
beware the power of Arrays...

Άβαταρ μέλους
dapadoupas
Δημοσιεύσεις: 34
Εγγραφή: 29 Ιούλ 2009 16:43
Τοποθεσία: athina

change var listener AS2

Δημοσίευση από dapadoupas » 29 Μαρ 2010 19:26

Τελικά δουλεύει απλά είχα κανει μια γκάφα και το ApplicationHolder δημιουργήτω μετά απο την εκτέλεση του κώδηκα που ελέγχει το _visible.

Είναι πολύ καλή λύση για να δημιουργείς κάποια switch controllers και να κάνεις track on change μεταβλητές χωρής να βαρένεις την εφαρμογή σου με infinite loops όπως πχ ένα onEnterFrame.

O κώδικας που έχω postarei μπορεί να χρησημοποιηθεί σαν παράδειγμα.

Thanx Heru... ήταν πολύ καλή η συμβολή σου με ξελάσπωσε.

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

////2 trackers , i Εφτιαξα 2 objects γιατί διάβασα οτι δεν λειτουργούν 2 watches σε 1 Object
var trackers&#58;Object = new Object&#40;&#41;;
var trackerB&#58;Object = new Object&#40;&#41;;

// Η παρακάτω function θα καλείται όταν η μεταβλητή σου / property θα αλλάζει τιμή
//prop είναι η property που μας απασχολεί εδω θέλω την CurrentView 
//oldVal είναι η τελευταία τιμή που είχε η property μας πρην της αλλάξουμε τιμή , χρησιμέυει για να ελέγχουμε αμα θέλουμε να θέσουμε όρια και εξαιρέσεις στη μεταβλητή μας. Να κάνουμε συγκρίσεις κλπ
//newVal ειναι η τιμή που θέτουμε αυτή τιν στιγμή, ΠΡΟΣΟΧΗ!!! αν δεν γράψουμε στη παρακάτω function την εντολή return newVal; η τιμή της property παραμένει η ίδια, δηλαδή η oldVar
var viewWatcher&#58;Function = function &#40;prop, oldVal, newVal&#41; &#123;
trace&#40;"1. "+newVal&#41;;
// Check whether speed is above the limit
if &#40;newVal == "none"&#41; &#123;
trace&#40;"1. "+newVal&#41;;
ApplicationHolder._visible = false;
TxtHolder._visible = false;
ApplicationBG._visible = false;
&#125;
if &#40;newVal == "Text"&#41; &#123;
trace&#40;"2. "+newVal&#41;;
ApplicationHolder._visible = false;
TxtHolder._visible = true;
ApplicationBG._visible = true;
&#125;
if &#40;newVal == "Application"&#41; &#123;
trace&#40;"3. "+newVal&#41;;
ApplicationHolder._visible = true;
TxtHolder._visible = false;
ApplicationBG._visible = true;
&#125;
if &#40;newVal == "Home"&#41; &#123;
trace&#40;"4. "+newVal&#41;;
ApplicationHolder._visible = true;
TxtHolder._visible = false;
ApplicationBG._visible = false;
&#125;
   
// Return the value of newVal.    
return newVal;

&#125;;





// Η παρακάτω function θα καλείται όταν η μεταβλητή σου / property θα αλλάζει τιμή
//prop είναι η property που μας απασχολεί εδω θέλω την CompbineTnF 
//oldVal είναι η τελευταία τιμή που είχε η property μας πρην της αλλάξουμε τιμή , χρησιμέυει για να ελέγχουμε αμα θέλουμε να θέσουμε όρια και εξαιρέσεις στη μεταβλητή μας. Να κάνουμε συγκρίσεις κλπ
//newVal ειναι η τιμή που θέτουμε αυτή τιν στιγμή, ΠΡΟΣΟΧΗ!!! αν δεν γράψουμε στη παρακάτω function την εντολή return newVal; η τιμή της property παραμένει η ίδια, δηλαδή η oldVar

var TnFWatcher&#58;Function = function &#40;prop, oldVal, newVal&#41; &#123;
if &#40;newVal == true&#41; &#123;
SwitchViewBtn._visible = true;
&#125; else &#123;
SwitchViewBtn._visible = false;
&#125;
&#125;;


// Χρησιμοποίησε την εντολή watch&#40;&#41; για να ενεργοποιήσεις το tracking του property μπορείς να χρησιμοποιήσεις τις παρακάτω παραμέτρους
// - the name of the property to watch&#58; "CurrentView" & "CompbineTnF"
// - a reference to the callback function viewWatcher & TnFWatcher, δηλαδή της function που θα ενεργοποιήται όταν η property αλλάζει τιμή
// - μια τιμή η οποία είναι η initial του property
// - Αλλές μεταβλητές που χρησιμοποιείς
trackers.watch&#40;"CurrentView",viewWatcher&#41;;
trackerB.watch&#40;"CompbineTnF",TnFWatcher&#41;;

////πενάμε τιμές στις trackable vars
trackers.CurrentView = "none";
trackerB.CompbineTnF = false;
beware the power of Arrays...

Απάντηση

Επιστροφή στο “ActionScript και Flex Προγραμματισμός”

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

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