PDA

Просмотр полной версии : Как испльзовать onEnterFrame внутри класса?


bjd
08.09.2007, 18:06
Как испльзовать onEnterFrame внутри класса?
class X {
//Клип в котором будут располагаться все ресурсы X
private var container_mc:MovieClip;

//???????????????????????
var onEnterFrame;
//???????????????????????

public function X(target:MovieClip, depth:Number, x:Number, y:Number) {
container_mc = target.createEmptyMovieClip("container_mc" + depth, depth);
container_mc._x = x;
container_mc._y = y;

//???????????????????????
this.onEnterFrame = function() {
trace("yes");
container_mc._x++;
};
//???????????????????????

}
public function load_X(URL:String):Void {
container_mc.loadMovie(URL);
}
}
Так не работает.
Необходимо заставить двигаться экземпляр X.
Подскажите, как это сделать?

etc
08.09.2007, 18:33
Метод onEnterFrame существует у классов-наследников MovieClip.

udaaff
08.09.2007, 18:42
bjd, я в твоей прошлой теме привел тебе пример кода с onEnterFrame, что не получилось?

bjd
08.09.2007, 18:59
Метод onEnterFrame существует у классов-наследников MovieClip.
Значить необходимо дописать
class X extends MovieClip {...}
но это почему-то не помогло?

bjd, я в твоей прошлой теме привел тебе пример кода с onEnterFrame, что не получилось?
к сожалению onEnterFrame ни там ни здесь у меня не работает:(

udaaff
08.09.2007, 19:04
bjd, чтобы у экземпляра класса был метод onEnterFrame, нужно наследоваться от MovieClip.
Мой пример наверное не заработал потому что... читай:
Help > Learning ActionScript 2.0 in Flash > Working with Movie Clips > Assigning a class to a movie clip symbol

Kikasso
08.09.2007, 19:57
import mx.utils.Delegate;
class X {
//Клип в котором будут располагаться все ресурсы X
private var container_mc:MovieClip;
public function X(target:MovieClip, depth:Number, x:Number, y:Number) {
container_mc = target.createEmptyMovieClip("container_mc" + depth, depth);
container_mc._x = x;
container_mc._y = y;
container_mc.onEnterFrame = Delegate.create( this, doEnterFrame);
}

public function doEnterFrame():Void{
trace("yes");
container_mc._x++;
}
public function load_X(URL:String):Void {
container_mc.loadMovie(URL);
}
}
Не хотите наследоваться от MC - применяйте Delegate.

bjd
08.09.2007, 19:58
Help > Learning ActionScript 2.0 in Flash > Working with Movie Clips > Assigning a class to a movie clip symbol
Не пойму две строчки:

-Select Advanced to show the options for Linkage, if they aren't already showing.
-Select the Export for ActionScript option, and type MoveRight in the Class text box. Click OK.

Переведите пожалуйста.

udaaff
08.09.2007, 20:02
- Выбирите "Advanced", чтобы отобразить опции "Linkage", если они уже не отображены.
- Выбирите опцию "Export for ActionScript", и напечатайте "MoveRight" в текстовом поле Class. Кликните OK :)

bjd
08.09.2007, 20:25
Help > Learning ActionScript 2.0 in Flash > Working with Movie Clips > Assigning a class to a movie clip symbol
Спаибо, так как описано там всё работает, особенно помогли 5 и 6 строчки. Но что делать если клип создаётся программно внутри класса?
Что тогда делать вместо:
-Select Advanced to show the options for Linkage, if they aren't already showing.
-Select the Export for ActionScript option, and type MoveRight in the Class text box. Click OK. ?

udaaff
08.09.2007, 20:34
Если создается мувиклип, программно, внутри класса, у него, так же, как и другого лубого мувиклипа, должен быть метод onEnterFrame.

PS: объясни, что ты хочешь сделать, в общих чертах.

bjd
08.09.2007, 21:13
Задача: класс Х.
При создании экземпляра которого создаётся пустой клип(container_mc).
Далее container_mc движется по некой траектории описаной внутри класса. Для упрощения container_mc._x++ , с частотой onEnterFrame.
Паралельно в него загружается некий клип Х (load_X(URL:String)).

class X extends MovieClip {
//Клип в котором будут располагаться все ресурсы X
private var container_mc:MovieClip;

public function X(target:MovieClip, depth:Number, x:Number, y:Number) {
container_mc = target.createEmptyMovieClip("container_mc" + depth, depth);
container_mc._x = x;
container_mc._y = y;

}
public function onEnterFrame() {
trace("yes");
container_mc._x++;
}
public function load_X(URL:String):Void {
container_mc.loadMovie(URL);
}
}
Так не работает.
В чём здесь проблемма?

etc
08.09.2007, 21:18
А как вы создаете экземпляр класса X? Необходимо прописывать данный класс пустому клипу в библиотеке и создавать через attachMovie, а не через оператор new.

Kikasso
08.09.2007, 22:11
var my_x:X = X(attachMovie( linkage_id, depth ));
class X extends MovieClip {
private var container_mc:MovieClip;
public function X() {
super();
}
public function onEnterFrame() {
trace("yes");
container_mc._x++;
}
public function load_X(URL:String):Void {
container_mc.loadMovie(URL);
}
}
container_mc должен быть в клипе.

bjd
08.09.2007, 22:28
var my_x:X = X(attachMovie( linkage_id, depth ));

А что делать, в таком случае, с конструктором класса?

Kikasso
08.09.2007, 22:45
var my_x:X = X(attachMovie( myName, linkage_id, depth, initObject ));
Я пропустил один параметр (первый), сорри.
Все, что в initObject будет передано в класс и в конструкторе с этим можно будет работать. И с тем, что уже в клипе.

Например, container_mc можете создать в конструкторе, а можете просто запихать в клип.