Autor Zpráva
Screed
Profil *
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
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
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
Chamurappi
v tom nevidim souvislost, metoda creep je volana zevnitr tridy, takze nechapu cemu vadi private u teto funkce...?
Screed
Profil *
Bohužel změna privátní metody "creep" na veřejnou nepomohla.
Screed
Profil *
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
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 *
Skvěle onto funguje, moc děkuju :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: