pass variable value έξω από function

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

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

Απάντηση
alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από alou » 13 Απρ 2010 02:41

Καλησπέρα, δεν κατέχω και πολύ από AS3 και έχω κολλήσει κάπου - αν κάποιος μπορεί να βοηθήσει θα ήμουν ευγνώμων.

Στο ψητό:

Υπάρχουν κάποια global variables, στα οποία με κάποιο mouse event καλώ function για να τους αλλάξω την τιμή και να λειτουργήσει όπως θέλω ο κώδικας στη συνέχεια. Όμως η τιμή - από όσο φαίνεται - δεν αλλάζει έξω από το function.

Ένα παράδειγμα και αν βολεύει επισυνάπτω και όλο τον κώδικα:

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

var MiaMetavliti:int;

enakoumpi.addEventListener(MouseEvent.CLICK, miaSynartisi);
enaAllokoumpi.addEventListener(MouseEvent.CLICK, miaAlliSynartisi);

function miaSynartisi():void {
 MiaMetavliti=1;
}

function miaAlliSynartisi():void {
 MiaMetavliti=2;
}

Μέσα σε κάποιο άλλο function, θέλω να λειτουργήσει ένα if statement:

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


if (MiaMetavliti==1) {
tadescene.addChild(enaMC);
}
else if (MiaMetavliti==2) {
tadescene.addChild(ena_alloMC)
}
...
Αν κάνω trace τις αλλαγές της μεταβλητής μέσα στο function που δηλώνεται η τιμή, είναι οκ. Οπουδήποτε αλλού όμως παραμένει το 0 που είναι το default του int.

Χελπ. Θενκς.
:D

flasher1973
Δημοσιεύσεις: 37
Εγγραφή: 10 Μαρ 2010 22:07

pass variable value έξω από function

Δημοσίευση από flasher1973 » 13 Απρ 2010 04:36

Κάνε τον κώδικα σου ετσι και θα σου δουλευει.Απλα βαλε την λεξη _root. πριν απο το ονομα της μεταβλητής σου.

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

if (_root.MiaMetavliti==1) {
tadescene.addChild(enaMC);
}
else if (_root.MiaMetavliti==2) {
tadescene.addChild(ena_alloMC)
} 


alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από alou » 13 Απρ 2010 09:57

flasher νομίζω αυτό που λες ισχύει για AS2, τα παραπάνω είναι AS3.

Άλλωστε το πρόβλημά μου δεν είναι (ή τουλάχιστον δεν έφτασε ακόμα στο σημείο να είναι) ότι δεν άλλαζε η μεταβλητή μέσα στο δεύτερο function, είναι ότι δεν άλλαζε πουθενά έξω από το funcion που δήλωνα την τιμή του. Δηλαδή:

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

var MiaMetavliti:int;

enakoumpi.addEventListener(MouseEvent.CLICK, miaSynartisi);
enaAllokoumpi.addEventListener(MouseEvent.CLICK, miaAlliSynartisi);

function miaSynartisi():int {
 MiaMetavliti=1;
 trace&#40;MiaMetavliti&#41;; // <---εδω γίνεται 1
&#125;

trace&#40;MiaMetavliti&#41;; // <---εδώ παραμένει 0

function miaAlliSynartisi&#40;&#41;&#58;int &#123;
 MiaMetavliti=2;
&#125; 
Οπότε δεν έχει νόημα να κάνω και trace μέσα στο άλλο function.

Αν πάντως δεν γίνεται με τον τρόπο που λέω και υπάρχει κάποιος άλλος τρόπος να αλλάζω μια μεταβλητή με ένα mouse event ώστε να το χρησιμοποιώ παρακάτω σε ένα άλλο function με if statement, ευχαρίστως να το ακούσω!

flasher ευχαριστώ και πάλι για την προσπάθεια :D

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

pass variable value έξω από function

Δημοσίευση από korgr » 13 Απρ 2010 11:26

http://greenethumb.com/article/11/globa ... les-in-as3

Νομιζω πως σου δινει λυση.
Δημιουργησε ενα object που να παιζει το ρολο που επαιζε η _globals στην as2 και οριζε static vars αυτου του object ως global variables

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

pass variable value έξω από function

Δημοσίευση από HeRu » 13 Απρ 2010 11:45

alou αυτός ο κώδικας που βρίσκεται ? Αν είναι σε κάποια class μπορείς να βάλεις το modifier "static" για να τα κάνεις global.

Ρίξε και μια ματιά εδώ: http://www.freestuff.gr/forums/viewtopic.php?t=48635

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από alou » 13 Απρ 2010 18:49

korgr & HeRu thanks, θα το παλέψω πάλι το βράδι και θα δω πως θα μου βγει. Αν δεν κάνω λάθος, περίπου το ίδιο πράγμα μου λέτε και οι δύο.

HeRu ο συγκεκριμένος κώδικας δεν είναι σε κάποιο class, οπότε από όσο καταλαβαίνω θα πρέπει να φτιάξω είτε το object που αναφέρει το παράδειγμα του korgr είτε το Herustaticvars σε ένα πακέτο και να το κάνω import - η αλήθεια είναι ότι δεν τόχω και πολύ σε τέτοια θέματα οπότε πρέπει να πειραματιστώ για να καταλάβω πως θα λειτουργήσουν.

Θα επανέλθω με αποτέλεσμα.

Άβαταρ μέλους
Maradonna
Δημοσιεύσεις: 135
Εγγραφή: 07 Ιουν 2007 03:19
Τοποθεσία: Αθήνα
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από Maradonna » 15 Απρ 2010 05:03

αυτος ο κώδικας πάντως είναι λάθος..

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

function miaSynartisi&#40;&#41;&#58;void &#123;
 MiaMetavliti=1;
&#125;

function miaAlliSynartisi&#40;&#41;&#58;void &#123;
 MiaMetavliti=2;
&#125; 

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

function miaSynartisi&#40;event&#58;MouseEvent&#41;&#58;void &#123;
 MiaMetavliti=1;
&#125;

function miaAlliSynartisi&#40;event&#58;MouseEvent&#41;&#58;void &#123;
 MiaMetavliti=2;
&#125; 
just to mention..

Τωρα για αυτό που λές,σε περίπτωση που το έχω καταλάβει,η απάντηση μου πιθανότατα να σε καλύψει.
Αρχικά,όρισε τη μεταβλητή σου.
Όταν κάνεις κλίκ στο τάδε κουμπί,φώναξε τη συνάρτηση του event σου.
Φτιάξε ΜΙΑ συνάρτηση,την οποία θα χρησιμοποιείς σε κάθε event που θέλεις για να χειριστείς τη συγκεκριμένη μεταβλητή-μεταβλητές που θές.

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

var metavliti&#58;int;
button.addEventListener&#40;MouseEvent.CLICK, fOnClick&#41;;
function fOnClick&#40;event&#58;MouseEvent&#41;&#58;void &#123;
handleButtonEvents&#40;&#41;;
&#125;
function handleButtonEvents&#40;&#41; &#123;
if &#40; condition &#41; &#123; metavliti = 1; &#125;
if &#40; condition 2 &#41; &#123; metavliti = 2; &#125;
//κλπ
&#125;
Εικόνα
Code is poetry

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από alou » 15 Απρ 2010 10:01

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

Ίσως βοηθήσει περισσότερο να καταλάβει κανείς και τι πάω να κάνω: μια tv που παίζει μια στατική εικόνα (MC) με ένα noise effect (έχω το link στα σχόλια αν θέλει κανείς να δει το class) και με ένα remote που βρίσκεται δίπλα, θέλω καταρχάς να αλλάζει το MC της εικόνας.

Δυστυχώς δεν πρόλαβα να κάνω πολλά πειράματα, δεν ξεχειλώνει αυτή η ρημάδα η μέρα με τίποτα...

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

	import com.flashandmath.dg.display.*;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import com.greensock.*;
	import com.greensock.easing.*;



var TV&#58;RetroTV;
var ball&#58;Sprite;
var ballRadius&#58;Number;
var ballVelX&#58;Number;
var ballVelY&#58;Number;
var star&#58;mcStar;
var kanalia&#58;int;


//To remote fainetai mikro arxika kai megalwnei sto mouse over 
//kapoiou button &#40;bremote&#41; wste na fainontai ka8ara ta koumpia tou &#40;mega, ant1&#41;,
//pou einai sto stage 
bremote.addEventListener&#40;MouseEvent.ROLL_OVER, remotebig&#41;;
bremote.addEventListener&#40;MouseEvent.ROLL_OUT, remotesmall&#41;;
bremote.useHandCursor = false;

function remotebig&#40;event&#58;MouseEvent&#41;&#58;void &#123;
	TweenMax.to&#40;tvremote, 2, &#123;scaleX&#58;1, scaleY&#58;1, x&#58;670, y&#58;7, ease&#58;Elastic.easeOut&#125;&#41;;
&#125;

function remotesmall&#40;event&#58;MouseEvent&#41;&#58;void &#123; 	
	TweenMax.to&#40;tvremote, 2, &#123;scaleX&#58;0.5, scaleY&#58;0.5, x&#58;697, y&#58;94, ease&#58;Elastic.easeOut&#125;&#41;;
&#125;

//ta buttons gia ta pliktra &#40;mega, ant1&#41; einai panw apo to koumpi pou megalwnei 
//to remote opote kanw kati gia na min ksanamikrainei / megalwnei 
//sta mouse over / out twn koumpiwn tou remote
function stay&#40;event&#58;MouseEvent&#41;&#58;void &#123;
	TweenMax.to&#40;tvremote, 0.1, &#123;scaleX&#58;1, scaleY&#58;1, x&#58;670, y&#58;7, ease&#58;Elastic.easeOut&#125;&#41;;
	bremote.removeEventListener&#40;MouseEvent.ROLL_OUT, remotesmall&#41;;
&#125;

function ksestay&#40;event&#58;MouseEvent&#41;&#58;void &#123;
bremote.addEventListener&#40;MouseEvent.ROLL_OUT, remotesmall&#41;;
&#125;

//MEGA
mega.addEventListener&#40;MouseEvent.CLICK, gomega&#41;;
//to gomega 8a prepei na einai to function pou 8a allazei 
//tin eikona stin tv, antistoixa to goant1 kai kapoia pou
//8a mpoun epipleon
mega.addEventListener&#40;MouseEvent.ROLL_OVER, stay&#41;;
mega.addEventListener&#40;MouseEvent.ROLL_OUT, ksestay&#41;;

function gomega&#40;int&#41;&#58;void &#123;
	//????; - edw 8a prepei na ginei kati, pou 8a odigisei 
	//stin allagi kapoiou MC pou ginetai addChild sto
	//function setUpScene parakatw
	kanalia=1;
	trace&#40;kanalia&#41;; //edw allazei i timi kanonika kai ginetai 1
&#125;

	trace&#40;kanalia&#41;; //edw i timi paramenei 0, pou einai default
//ANT1
ant1button.addEventListener&#40;MouseEvent.ROLL_OVER, stay&#41;;
ant1button.addEventListener&#40;MouseEvent.ROLL_OUT, ksestay&#41;;
ant1button.addEventListener&#40;MouseEvent.CLICK, goant1&#41;;

function goant1&#40;int&#41;&#58;void &#123;
	//????; - edw 8a prepei na ginei kati, pou 8a odigisei 
	//stin allagi kapoiou MC pou ginetai addChild sto
	//function setUpScene parakatw
	kanalia=2;
&#125;

//to perissotero kommati apo edw kai katw einai copy / paste apo
//edw&#58; http&#58;//www.flashandmath.com/flashcs4/retrotv/
stage.scaleMode=StageScaleMode.NO_SCALE;

init&#40;&#41;;

////////////////////////////////////


function init&#40;&#41;&#58;void &#123;
	TV = new RetroTV&#40;159,94&#41;;
	this.addChild&#40;TV&#41;;
	TV.x = 209;
	TV.y = 33;
	
	
	TV.redOffsetX = 1.5;
	TV.redOffsetY = 0.75;
	TV.greenOffsetX = -0.5;
	TV.greenOffsetY = 0;
	TV.blueOffsetX = -0.25;
	TV.blueOffsetY = 0;
	
	
	sliderStatic.value = 50;
	
	setUpScene&#40;&#41;;
	
	//set up the warping checkbox
	cbWarping.setStyle&#40;"textFormat", new TextFormat&#40;"Arial",11,0xcccccc&#41;&#41;;
	cbWarping.label = "";
	cbWarping.selected = false;
	cbWarping.addEventListener&#40;MouseEvent.CLICK, warpingCheckBoxHandler&#41;;
	cbWarping.selected = true;
	TV.warping = true;
	
	//Although unnecessary, we add a blurred frame around the 
	//TV to create faded edges.
	var frame&#58;Shape = new Shape&#40;&#41;;
	frame.graphics.lineStyle&#40;5,0x000000&#41;;
	frame.graphics.drawRect&#40;1,1,TV.TVWidth-2,TV.TVHeight-2&#41;;
	var frameBlur&#58;BlurFilter = new BlurFilter&#40;4,4,3&#41;;
	frame.filters = &#91;frameBlur&#93;;
	frame.alpha = 0.5;
	frame.x = TV.x;
	frame.y = TV.y;
	this.addChild&#40;frame&#41;;
	
	
	TV.addEventListener&#40;MouseEvent.ROLL_OVER, hideMouse&#41;;
	TV.addEventListener&#40;MouseEvent.ROLL_OUT, showMouse&#41;;
	
	this.addEventListener&#40;Event.ENTER_FRAME, onEnter&#41;;
	
	
&#125;

function hideMouse&#40;evt&#58;MouseEvent&#41;&#58;void &#123;
	//Mouse.hide&#40;&#41;;
&#125;
function showMouse&#40;evt&#58;MouseEvent&#41;&#58;void &#123;
	//Mouse.show&#40;&#41;;
&#125;

function setUpScene&#40;&#41;&#58;void &#123;
	
	star = new mcStar&#40;&#41;;
	star.scaleX = star.scaleY = 0.75;

	
	ballRadius = 18;
	ballVelX = 0.56;
	ballVelY = 0.61;
	ball = new Sprite&#40;&#41;;

	//edw einai to MC pou me endiaferei na allazei, me ton 
	//tropo auto pantws den exei leitourgisei ka8ws den blepei 
	//tin allagi tis metablitis 'kanalia' pou dilwnetai sto 
	//antistoixo function &#40;goant1, gomega&#41;
	
	var testPattern&#58;mcTestPattern200 = new mcTestPattern200&#40;&#41;;
	var testPattern2&#58;papandreoupat = new papandreoupat&#40;&#41;;
	var testPattern3&#58;mcTestPattern200 = new mcTestPattern200&#40;&#41;;
	
	
	if &#40;kanalia==1&#41; &#123;
	TV.scene.addChild&#40;testPattern2&#41;;
	&#125;
	
	else if &#40;kanalia==2&#41; &#123;
	TV.scene.addChild&#40;testPattern3&#41;;
	&#125;
	
	else &#123;
	TV.scene.addChild&#40;testPattern&#41;;
	&#125;
	////mexri edw
	
	TV.scene.graphics.beginFill&#40;0x000000&#41;;
	TV.scene.graphics.drawRect&#40;0,0,TV.sceneWidth,TV.sceneHeight&#41;;
	TV.scene.graphics.endFill&#40;&#41;;
	
	var format1&#58;TextFormat = new TextFormat&#40;"Arial",18,0xD93A13,true&#41;;
	var format2&#58;TextFormat = new TextFormat&#40;"Arial",18,0x999999,true&#41;;
	var format3&#58;TextFormat = new TextFormat&#40;"Arial",18,0x27C4EB,true&#41;;
	var tf&#58;TextField = new TextField&#40;&#41;;
	var len&#58;int;
	tf.autoSize = TextFieldAutoSize.LEFT;
	tf.text = "reboot";
	tf.setTextFormat&#40;format1,0,tf.length&#41;;
	len = tf.length;
	tf.appendText&#40;"them"&#41;;
	tf.setTextFormat&#40;format2,len,tf.length&#41;;
	len = tf.length;
	tf.appendText&#40;".gr"&#41;;
	tf.setTextFormat&#40;format3,len,tf.length&#41;;
	tf.x = 200;
	tf.y = 100;
	TV.scene.addChild&#40;tf&#41;;
	

	TV.scene.addChild&#40;star&#41;;

&#125;

//random function gia na allazei to noise parakatw

      function randRange&#40;minNum&#58;Number, maxNum&#58;Number&#41;&#58;Number
      &#123;
      return &#40;Math.floor&#40;Math.random&#40;&#41; * &#40;maxNum - minNum + 1&#41;&#41; + minNum&#41;;
      &#125;

function onEnter&#40;evt&#58;Event&#41;&#58;void &#123;
		
	star.x = mouseX/5;
	star.y = mouseY/3;
	
	
	
	//ananewsi tou tv noise effect
	TV.noiseAmount = randRange&#40;45,80&#41;;
	TV.update&#40;&#41;;	
&#125;

function warpingCheckBoxHandler&#40;evt&#58;MouseEvent&#41;&#58;void &#123;
	TV.warping = cbWarping.selected;
&#125;


Άβαταρ μέλους
Maradonna
Δημοσιεύσεις: 135
Εγγραφή: 07 Ιουν 2007 03:19
Τοποθεσία: Αθήνα
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από Maradonna » 15 Απρ 2010 18:53

Φαντάζομαι είναι καλύτερο να δει κανείς αυτό που είναι γραμμένο στην πραγματικότητα παρά να υποθέτει πράγματα
Μπορείς να είσαι και πιο ευγενικός σε ανθρώπους που αμήτιάλλο να σε βοηθήσουν προσπαθούν,άσχετα με το αν καταλάβαν ή όχι αυτό που εσύ θέλεις να πετύχεις.
μια tv που παίζει μια στατική εικόνα (MC) με ένα noise effect (έχω το link στα σχόλια αν θέλει κανείς να δει το class) και με ένα remote που βρίσκεται δίπλα, θέλω καταρχάς να αλλάζει το MC της εικόνας.
Μάλιστα.Τώρα εξηγούνται όλα :o
Αν κάποιος κατάλαβε απο αυτή τη περιγραφή και απο τον άναρχο κώδικα σου,τότε ας σε βοηθήσει.Εγω νιοκ.

:lol:
Εικόνα
Code is poetry

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

pass variable value έξω από function

Δημοσίευση από alou » 16 Απρ 2010 06:42

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

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

Ειλικρινά δεν είχα καμμία διάθεση ούτε να σε πειράξω ούτε να σε ειρωνευτώ. Για τα υπόλοιπα δεν έχει νόημα νομίζω να το συνεχίσω. Ευχαριστώ.

Απάντηση

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

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

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