Alottelen ActionScriptin harjottelua ja en tajuu mikä täs on vikana. Tän pitäis alottaa timeri vaan jos se on null, mutta se tuntuu aina vaan alottavan uuden timerin kun klikkaa tota objectia "a". Eli miks toi null tarkistus ei toimi?
var timer:Timer = null; function rot(event:MouseEvent):void{ if(timer == null){ timer = new Timer(10); timer.addEventListener(TimerEvent.TIMER, tick); timer.start(); }else{ timer.stop(); timer = null; } } function tick(event:TimerEvent):void{ a.rotation += 3; } a.addEventListener(MouseEvent.CLICK, rot);
var "muuttuja" ei ylety funktioiden sisälle, eikä myöskään funtiosta ulkopuolelle. Määrittele muuttuja ilman tuota var:a jos haluat siitä "globaalin".
Heippa taas!
Lebe80 kirjoitti:
var "muuttuja" ei ylety funktioiden sisälle, eikä myöskään funtiosta ulkopuolelle. Määrittele muuttuja ilman tuota var:a jos haluat siitä "globaalin".
Joka tieto ei pidä paikkaansa...muuttuja on globaali ja näkyy koko scriptille, mutta sen arvo ei ole tässä tapauksessa null vaan undefined, koska sitä ei ole määritelty eli defined. Elikä jos muutat if(timer == null) muotoon if(timer == null || timer == undefined) niin määrittely tapahtuu automaattisesti, kun funktiota kutsutaan ensimmäisen kerran.
Itseasiassa nytkin määrittely tapahtuu ensimmäisellä kerralla else{} osan sisällä, mutta timer arvoksi tulee null eikä New Timer(10)
neau33 kirjoitti:
...
Puhut eri asiasta kuin minä.
Flashissä muuttujia määriteltäessä var:lla muuttujasta tulee lokaali. Jos halutaan että ko. muuttuja määritellään funktion ulkopuolella ja se näkyisi myös funktion sisällä, jätetään sana "var" pois.
Totta on se, että tämän takia muuttuja määritellään ensimmäisen kerran funktion sisällä, koska arvo ei ole null vaan määrittelemätön undefined.
Tässä vielä Flashin Helpistä:
var variableName [= value1][...,variableNameN[=valueN]]
Used to declare local variables. If you declare variables inside a function, the variables are local. They are defined for the function and expire at the end of the function call.
nimim. työkseen fläsäyttäjä.
Heippa taas!
Lebe80 kirjoitti:
...
Tässä vielä Flashin Helpistä:var variableName [= value1][...,variableNameN[=valueN]]Used to declare local variables. If you declare variables inside a function, the variables are local. They are defined for the function and expire at the end of the function call.
nimim. työkseen fläsäyttäjä.
I just give a shit for all about that; in this case the varible had been declared outside the function, but not defined and that's the point!
If you don't believe me just do make a test with another function and see whether the variable has a different value or not after calling the function that defines the variable...
Ei voi tietää ku ei näe koodia.
edit:
tässä siis oma koodini
var foo = "bar"; function a() { var foo = "foobar"; trace(foo); } function b() { var foo = "barfoo"; trace(foo); } a(); b(); trace(foo); // foobar // barfoo // bar
foo = "bar"; function a() { foo = "foobar"; trace(foo); } function b() { foo = "barfoo"; trace(foo); } a(); b(); trace(foo); // foobar // barfoo // barfoo
I rest my case.
Pysyykö ensimmäisen esimerkkisi tulos samana, jos a
:n ja b
:n sisältä jättää var
:in pois eli laittaa vaan "foo = ...
"? Entä jos toiseen esimerkkiin lisää nuo var
:it, muuttavatko funktiot silti globaalia foo
:ta? Tässähän on kyse nimenomaan siitä, onko ulommassa määrittelyssä käytetty var
:ia vai ei.
En väitä tietäväni ActionScriptistä mitään, mutta ainakaan dokumentaatiossa ei suoraan sanota, että ulompana määritellyt muuttujat eivät näkyisi sisempiin funktioihin. Toisin päin se toki pitää paikkansa.
Heippa taas!
vastauksena alkuperäiseen kysymykseen + ammattilaisille...
var timer; function rot(event:MouseEvent):void{ if((timer == undefined)||(timer == null)){ //trace(timer); timer = new Timer(10); timer.addEventListener(TimerEvent.TIMER, tick); timer.start(); } else{ //trace(timer.delay); timer.stop(); timer.removeEventListener(TimerEvent.TIMER, tick); timer = null; } } //...
...ei harras flässääjä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.