PDA

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


bjd
08.09.2007, 02:27
Как описать в классе перемещение клипа при нажатии кнопки?
Возможно ли это?
class MainHero {
//Клип в котором будут располагаться все ресурсы MainHero
private var container_mc:MovieClip;
/**
* MainHero Конструктор
*
* @param target Клип к которому будет прикреплён MainHero
* @param depth Глубина на которой прикрепляется клип
*
*/
public function MainHero(target:MovieClip, depth:Number) {
container_mc = target.createEmptyMovieClip("container_mc" + depth, depth);
var bottonHero = new Object();
bottonHero.onKeyDown = controlHero;
Key.addListener(bottonHero);
}
private function controlHero() {
if (Key.isDown(Key.DOWN)) {
goDOWN();
}
}
private function goDOWN() {
container_mc._y += 5;
}
//изображение загружаемое в пустой клип
public function loadHero(URL:String):Void {
container_mc.loadMovie(URL);
}
}
К сожалению, выше приведённый код не работает.
Необходимо что-бы созданный экземпляр MainHero отслеживал нажатие кнопки, в этом примере кнопки Down. А также, после нажатия, выполнял с этим экземпляром определённые действия, в этом примере перемещение вниз.
Буду признателен если объясните в чём проблема и как от неё избавиться?

Kikasso
08.09.2007, 03:21
Нафиг вам этот bottonHero?
Пускай onKeyDown будет в самом классе, и подписывайте на прослушивание не этот мифический bottonHero, а сам экземпляр класса, т.е. this
И trace задействуйте. В данном случае controlHero вызывается от имени вашего локального объекта, а в нем такой функции нет.
Можно было заюзать Delegate (поиск), чтобы вызывать controlHero от имени класса, но не вижу в этом нужды.

bjd
08.09.2007, 03:42
Нафиг вам этот bottonHero?
Пускай onKeyDown будет в самом классе, и подписывайте на прослушивание не этот мифический bottonHero, а сам экземпляр класса, т.е. this
И trace задействуйте. В данном случае controlHero вызывается от имени вашего локального объекта, а в нем такой функции нет.
Можно было заюзать Delegate (поиск), чтобы вызывать controlHero от имени класса, но не вижу в этом нужды.
Если я правильно понял необходимо сделать так:
class MainHero {
//Клип в котором будут располагаться все ресурсы MainHero
private var container_mc:MovieClip;
//????????????????????????????????????????????
var onKeyDown
//????????????????????????????????????????????
/**
* MainHero Конструктор
*
* @param target Клип к которому будет прикреплён MainHero
* @param depth Глубина на которой прикрепляется клип
*
*/
public function MainHero(target:MovieClip, depth:Number) {
container_mc = target.createEmptyMovieClip("container_mc" + depth, depth);
//******************************************
this.onKeyDown = controlHero;
Key.addListener(this);
//******************************************
}
private function controlHero() {
if (Key.isDown(Key.DOWN)) {
goDOWN();
trace("yes_1");
}
}
private function goDOWN() {
container_mc._y += 5;
trace("yes_2");
}
//изображение загружаемое в пустой клип
public function loadHero(URL:String):Void {
container_mc.loadMovie(URL);
}
}

Спасибо за помощ.

//????????????????????????????????????????????
var onKeyDown
//????????????????????????????????????????????
Как правильно это написать? Хотя и так работает.

Kikasso
08.09.2007, 03:50
Добавьте ))
public var onKeyDown:Function;
public function MainHero(target:MovieClip, depth:Number) {
//...
onKeyDown = controlHero;
Key.addListener(this);
}
Или добавьте метод в класс:
public function MainHero(target:MovieClip, depth:Number) {
//...
Key.addListener(this);
}
public function onKeyDown():Void{
trace( Key.getCode() + ' pressed' );
};

bjd
08.09.2007, 05:18
Клип начал двигаться, но не очень хорошо.
При нажатии на любую кнопку курсора клип делает рывок, потом останавливается на мгновение, и только после этого начинает равномерное движение в заданном направлении.
Всем, кто подскажет, как от этого избавиться, заранее спасибо!
Материал для размышлений прилагается.

Kikasso
08.09.2007, 05:40
Ну а что же вы хотели? У вас герой двигается по нажатию клавиши. Откройте блокнот, нажмите любую букву и подержите.
Вам надо по нажатию начинать двигаться, по отпусканию прекращать. Расставляйте флажки..

udaaff
08.09.2007, 12:45
class Class extends MovieClip {
//
public function Class() {
Key.addListener(this);
onKeyDown = __onKeyDown;
}
//
private function __moving() {
_x++;
}
private function __onKeyDown() {
onEnterFrame = __moving;
onKeyUp = __onKeyUp;
onKeyDown = null;
}
private function __onKeyUp() {
onEnterFrame = null;
onKeyDown = __onKeyDown;
onKeyUp = null;
}
}
:confused:

etc
08.09.2007, 14:36
ZOOM:
http://etcs.ru/files/zoom.png