PDA

Просмотр полной версии : Наследование и композиция MovieClip


Kud
28.09.2009, 19:13
Вопрос в следующем.

class Avatar extends MovieClip {
public static var HAPPY:Number = 0;
public static var SAD:Number = 1;
public static var IDLE:Number = 2;

private var av_mc:MovieClip;

public function Avatar(name:String,
target:MovieClip,
depth:Number,
x:Number,
y:Number) {
av_mc = target.attachMovie("AvatarSymbol", name, depth);
setState(Avatar.HAPPY);
setPosition(x, y);
}
public function setPosition(x:Number, y:Number):Void {
av_mc._x = x;
av_mc._y = y;
}
public function setState(newState:Number):Void {
switch(newState) {
case Avatar.HAPPY:
av_mc.gotoAndStop("HAPPY");
break;
case Avatar.SAD:
av_mc.gotoAndStop("SAD");
break;
case Avatar.IDLE:
av_mc.gotoAndStop("IDLE");
break;
}
}
}

var av:Avatar;
av = new Avatar("avatar", this, 0, 300, 200);
av.setState(Avatar.HAPPY);

Работает корректно. Но если убрать наследование, то есть написать вместо "class Avatar extends MovieClip" "class Avatar", то строка "av.setState(Avatar.HAPPY);" работает не корректно: смена кадра не происходит.

Вопрос почему? Ведь в конечном счете и так и сяк вызывается "av_mc.gotoAndStop("HAPPY")", а "av_mc" это "MovieClip".

Kuruki
28.09.2009, 19:23
Работает и без наследования.

Kud
28.09.2009, 19:33
Разобрался в чем была проблема.
Надо было в свойствах Linkage оставить пустым поле "AS 2.0 class".

Добавлено через 17 минут
Ещё вопрос, пока тема не остыла, правда уже другой.

function gg ():Void {
tb.gotoNextFrame();
}

setInterval(gg, 1000);

почему так работает?
setInterval(tb.gotoNextFrame, 1000);
а так нет?

Kuruki
28.09.2009, 20:09
Два типа синтаксиса setInterval:setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number
setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number

Kud
28.09.2009, 20:14
спасибо