Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   анимация + несколько состояний (http://www.flasher.ru/forum/showthread.php?t=126512)

kup 21.06.2009 02:05

анимация + несколько состояний
 
Как лучше организовать объект с несколькими состояниями, каждое из которых имеет свою анимацию?

Gaen 21.06.2009 08:39

Присоединяюсь к вопросу, хотелось бы узнать промышленное решение. А то юзаю для этих целей либо код на кадрах, либо addFrameScript - по сути то же самое.

Smrad 22.06.2009 11:17

Мне тоже интересно кто как делает. Сам для этой цели обычно юзаю паттерн state. Для каждого состояния, есть примерно такой код (это псевдокод, если что):
Код AS3:

class RunState extends State
{
    function RunState::init() : void
    {
        m_startFrame = "run_begin";
        m_endFrame  = "run_frame";
        m_looped      = true;
    }
    // bla bla bla...
}
 
//  Дальше где-то в контексте
class MyObject extends Stateable
{
    function changeState(state : State) : void
    {
        state.init();
        state.setContext(this);
        m_animation.gotoAndPlay(state.m_startFrame);
    }
}


Gal4enochek 22.06.2009 12:08

Я раньше так делала
Код AS3:

public class MyClass extends Sprite
        {
                public static const ST_STATE1                :int = 1;
                public static const ST_STATE2                :int = 2;
                public static const ST_STATE3                :int = 3;       
 
                private var state                                        : int;
 
                public function MyClass()
                {
                        super();
                        this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
                }
 
                public function set State(value :int){
                        state = value;
                        switch(state){
                                case ST_STATE1:
                                        // some actions
                                        break;
                                case ST_STATE2:
                                        // some actions
                                        break;
                                case ST_STATE3:
                                        // some actions
                                        break;               
                        }
                }
 
                public function get State():int{
                        return state;
                }
 
                private function enterFrameHandler(event :Event):void{
                        // если надо что делать
                        switch(state){
                                case ST_STATE1:
                                        // some actions
                                        break;
                                case ST_STATE2:
                                        // some actions
                                        break;
                                case ST_STATE3:
                                        // some actions
                                        break;               
                        }
                }               
        }

Но сейчас наверное лучше бы паттерн применила.

Smrad 22.06.2009 12:38

Цитата:

Сообщение от Gal4enochek (Сообщение 829777)
Я раньше так делала
Код AS3:

public class MyClass extends Sprite
        {
                public static const ST_STATE1                :int = 1;
                public static const ST_STATE2                :int = 2;
                public static const ST_STATE3                :int = 3;       
 
                private var state                                        : int;
 
                public function MyClass()
                {
                        super();
                        this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
                }
 
                public function set State(value :int){
                        state = value;
                        switch(state){
                                case ST_STATE1:
                                        // some actions
                                        break;
                                case ST_STATE2:
                                        // some actions
                                        break;
                                case ST_STATE3:
                                        // some actions
                                        break;               
                        }
                }
 
                public function get State():int{
                        return state;
                }
 
                private function enterFrameHandler(event :Event):void{
                        // если надо что делать
                        switch(state){
                                case ST_STATE1:
                                        // some actions
                                        break;
                                case ST_STATE2:
                                        // some actions
                                        break;
                                case ST_STATE3:
                                        // some actions
                                        break;               
                        }
                }               
        }

Но сейчас наверное лучше бы паттерн применила.

Если состояний до четырёх, то можно и switch'ом перебирать.


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

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