Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как описать перемещение клипа в классе? (http://www.flasher.ru/forum/showthread.php?t=100960)

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

Цитата:

Сообщение от Kikasso
Нафиг вам этот 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

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

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


Часовой пояс GMT +4, время: 17:45.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.