Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как повесить событие Event.ENTER_FRAME не на отображаемый объект? (http://www.flasher.ru/forum/showthread.php?t=175543)

Den_root 19.02.2012 23:50

как повесить событие Event.ENTER_FRAME не на отображаемый объект?
 
Господа, можно ли(и если до, то как) повесить слушатель события Event.ENTER_FRAME на объект, класс которого не был унаследован от DisplayObject и им подобным?

TanaTiX 19.02.2012 23:55

Это должен быть наследник EventDispatcher.

Gaen 20.02.2012 00:11

Повесить можно точно так же, но коли это не DisplayObject, ваш объект не будет посылать Event.ENTER_FRAME (если вы его не заставите, конечно).

Если вам требуется постоянно выполнять какие-то действия, воспользуйтесь классом Timer.

Den_root 20.02.2012 00:22

Есть куча "не DisplayObject" объектов, которые должны получать событие Event.ENTER_FRAME. Что то вроде этого:
Код AS3:

public class Intelegence extends EventDispatcher{
 
                public function Intelegence() {
 
                          addEventListener(Event.ENTER_FRAME, update);
                      }
 
                public function update(e:Event):void {
 
                        //if (Input.KEY_W) entity.startUngine();
                        trace("Test");
                }
        }

Но данный код не работает:(

-De- 20.02.2012 00:28

Так это другое дело! Берёте экземпляр этого вашего Intelegence (IntelegenceObj), зажимаете вместе с ним в углу любой не удаляемый на протяжении жизни display object (displayObj, root в качестве него подойдёт) и делаете ему так:
Код AS3:

displayObj.addEventListener(Event.ENTER_FRAME, IntelegenceObj.update);


GBee 20.02.2012 00:29

И не будет. Лучше у всей этой кучи вызывайте апдейт из внешнего источника stage, например.

TanaTiX 20.02.2012 00:29

У EventDispatcher-а нет события Event.ENTER_FRAME. Я думал речь идет о dispatch-е. Тогда можно попробовать сочетать с таймером, как советовал Gaen.
А какой смысл в таких манипуляциях?

Zebestov 20.02.2012 00:32

Птщь

Den_root 20.02.2012 01:04

Цитата:

Сообщение от TanaTiX (Сообщение 1064060)
А какой смысл в таких манипуляциях?

Замысел был такой: К объекту класса Intelegence приписан отображаемый объект, которым Intelegence,собственно, и управляет. Так как с "миром" будет взаимодействовать отображаемый объетк, а не эфемерный Intelegence, то и наследовать Intelegence от DisplayObject лишний раз не хотелось.
Код AS3:

public class ArtificialIntelligence extends EventDispatcher{
 
                public var entity:Entity;
 
                public function Intelegence() {
                        entity = new Entity;
                        addEventListener(Event.ENTER_FRAME, update);
                }
 
                public function update(e:Event):void {
 
                        entity.doSomething();
                }
        }


TanaTiX 20.02.2012 01:17

Не вижу смысла в такой прослойке. В чем принципиальная необходимость не наследоваться от DisplayObject-а, если можно наследоваться от DisplayObject-а и переписать необходимый функционал?
Или же если необходимо спрятать функционал (частично или полностью), оставив лишь набор кастомных методов для взаимодействия с объектом, то почему не
Код AS3:

entity.addEventListener(Event.ENTER_FRAME, update);

?
Кстати, вот так правильней:
Код AS3:

entity = new Entity();



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

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