Autor | Zpráva | ||
---|---|---|---|
Screed Profil * |
#1 · Zasláno: 12. 12. 2007, 19:34:13
Dobrý den, mám tu další problém :( následující kod funguje ,ale když ve .fla souboru ve kterém je tohle....
var creep:Creeps = new Creeps(1,_root,"solider",12); přepíšu na tohle button.onPress = function(){ var creep:Creeps = new Creeps(1,_root,"solider",12); } asi jsou zde potíže s adresací. Děkuji za pomoc. Zde je .as class Creeps { public var mc:MovieClip; private var v:Number; private var c:Number; private var i:Number; private var s:Number; private var dist_y:Number; private var dist_x:Number; private var angle:Number; private var depth:Number; private var layer:String; public var init:Number; public var init2:Number; public var path:Array; public function Creeps (i:Number, target:MovieClip, layer:String, v:Number) { path=[[100,100,25,25,150,150,275,275,300,300,200,200,25,25,350,350,3 25,325,350,350,275,275,200,200],[25,100,100,175,175,100,100,250,250,30 0,300,250,250,350,350,175,175,100,100,25,25,50,50,-50]]; this.i=i; this.v=v; c = 1; this.layer = layer; depth = target.getNextHighestDepth(); mc = target.createEmptyMovieClip("wave",depth); inited(); } private function creep (){ mc.attachMovie(layer,layer+i,i); mc[layer+i]._x = -35+12; mc[layer+i]._y = 25+12; mc[layer+i].path = path; mc[layer+i].s = 0; mc[layer+i].onEnterFrame = function () { dist_x = this.path[0][s]+12-this._x; dist_y = this.path[1][s]+12-this._y; if(this._y<-25){this.removeMovieClip();}; if ((Math.abs(dist_x)+Math.abs(dist_y))<1) { this.s++; } angle = Math.atan2(dist_y, dist_x); this._x = this._x+1*Math.cos(angle); this._y = this._y+1*Math.sin(angle); this._rotation = angle/Math.PI*180-90 } i++; c++; } private function inited () { this.init = setInterval(this,"creep",1000); this.init2 = setInterval(this,"checkforcount",1000); } private function uninited (){ clearInterval(init); clearInterval(init2); } private function checkforcount(){ if(c == v){ uninited(); } } } Pravdepodobne je problem nekde tady : this.init = setInterval(this,"creep",1000); |
||
Chamurappi Profil |
#2 · Zasláno: 12. 12. 2007, 20:26:10
Reaguji na Screeda:
Jestli je ActionScript (který neumím) podobný JavaScriptu (který umím) tolik, jak si myslím (což nevím), tak by příčina mohla být v tom, že metoda „creep“ není veřejná. V JS fungují časovače setInterval/setTimeout tak, že volají funkci z globálního kontextu (ztrácí se i reference na this). Tu flashovou trojargumentovou variantu vidím prvně, možná to má nějak ošetřené a pamatuje si kontext, když je objektová… |
||
embee Profil |
#3 · Zasláno: 12. 12. 2007, 21:04:03
Mozna proto, protoze v kodu
button.onPress = function(){ var creep:Creeps = new Creeps(1,_root,"solider",12); } deklarujes creep jako lokalni promennou. Takze po ukonceni funkce je automaticky smazana. Schvalne si do te tridy dej nejaky trace statement - treba do kontruktoru. Vsadim se, ze se instance tridy vytvori a hned se zase smaze :) |
||
embee Profil |
#4 · Zasláno: 12. 12. 2007, 21:07:07
Chamurappi
v tom nevidim souvislost, metoda creep je volana zevnitr tridy, takze nechapu cemu vadi private u teto funkce...? |
||
Screed Profil * |
#5 · Zasláno: 12. 12. 2007, 21:22:55
Bohužel změna privátní metody "creep" na veřejnou nepomohla.
|
||
Screed Profil * |
#6 · Zasláno: 12. 12. 2007, 21:31:04
Takže bych měl nejdřív deklarovat proměnnou mimo funkci a pak spustit konstruktor ? :] jestli ano tak jak prosimvás :) děkuji
|
||
embee Profil |
#7 · Zasláno: 12. 12. 2007, 22:15:43
Screed
no ja bych to spis definoval tak, ze je potreba promenne deklarovat mimo funkci a pak jim pouze priradit hodnoty. Pokud jich ma byt vice, pah bych je strkal do pole, ktere bych opet deklaroval mimo funcki. Takze napr: var myCreep:Creep; this.myBtn.onPress = function () { myCreep = new Creep(); } |
||
Screed Profil * |
#8 · Zasláno: 13. 12. 2007, 15:09:40
Skvěle onto funguje, moc děkuju :)
|
||
Časová prodleva: 16 let
|
0