Форум 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=206731)

tihomir 25.02.2014 12:25

Движение вперёд назад
 
Многоуважаемые Гуру!!! Простите мне моё невежество и просветите скудоумного!!! :)) Я во флеше совсем новичок. Нарисовал я значит персонажа (волка) в спокойном состоянии и во время движения, анимировал его значит. Захотел чтобы он у меня забегал, написал я вот такой код:
Код AS3:

var speed = 15
stage.addEventListener(KeyboardEvent.KEY_DOWN, go)
function go(e:KeyboardEvent):void {     
if (e.keyCode==Keyboard.LEFT) {         
wolf.x -= speed;     
}     
if (e.keyCode==Keyboard.RIGHT) {         
wolf.x += speed;     
} 
};

Он как бы зашевелился, но в состоянии покоя(тоесть просто елозит по сцене вперёд назад) а хочется чтобы при нажатии клавиш появлялся символ вокла во время движения. Буду весьма признателен если подскажите или направите на материал описывающий подобные телодвижения :)

Wolsh 25.02.2014 12:36

Для оформления своего кода надо использовать теги [as3][/as3]

Vansimar 25.02.2014 13:48

запихиваешь в спрайт два мувиклипа: один состояния покоя,другой состояние ходьбы.
и потом как нибудь так менять эти состояния
Код AS3:

parentSprite.getChildByName("walkMc").visible = true;
parentSprite.getChildByName("stayMc").visible = false;


Akopalipsis 25.02.2014 14:12

В примере я заменил волка на квадраты.
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
 
        public class AnimationTest extends Sprite
        {
                private var _isMotionState:Boolean;
                private var _isDefaultState:Boolean;
                private var _wolfs:Array;
                private const WOLF_DEFAULT_STATE:int = 0;
                private const WOLF_MOTION_STATE:int = 1;
                public function AnimationTest()
                {
                        _wolfs = [];
 
                        var wolfDefaultState:Sprite = new Sprite();
                        wolfDefaultState.graphics.beginFill(0xA83824);
                        wolfDefaultState.graphics.drawRect(0, 0, 30, 30);
                        wolfDefaultState.graphics.endFill();
                        wolfDefaultState.x = 200;
                        wolfDefaultState.y = 200;
                        this.addChild(wolfDefaultState);
 
                        var wolfMotionState:Sprite = new Sprite();
                        wolfMotionState.graphics.beginFill(0x4FAA22);
                        wolfMotionState.graphics.drawRect(0, 0, 30, 30);
                        wolfMotionState.graphics.endFill();
                        wolfMotionState.x = 200;
                        wolfMotionState.y = 200;
                        wolfMotionState.visible = false;
                        this.addChild(wolfMotionState);
 
                        _wolfs.push(wolfDefaultState, wolfMotionState);
 
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, stage_keyDownHandler);
                        stage.addEventListener(KeyboardEvent.KEY_UP, stage_keyUpHandler);
                }
 
                private function stage_keyUpHandler(event:KeyboardEvent):void
                {
                        _isDefaultState = true;
                        if (_isMotionState)_isMotionState = false;
                        _wolfs[WOLF_DEFAULT_STATE].visible = true;
                        _wolfs[WOLF_MOTION_STATE].visible = false;
                }
 
                private function stage_keyDownHandler(event:KeyboardEvent):void
                {
                        if (_isDefaultState)
                        {
                                _isDefaultState = false;
                                _wolfs[WOLF_DEFAULT_STATE].visible = false;
                        }
                        _isMotionState = true;
                        _wolfs[WOLF_MOTION_STATE].visible = true;
                }
 
        }
 
}

И у меня вопрос по теме - как лучше делать visible или addChild?

samana 25.02.2014 14:20

Цитата:

Сообщение от Akopalipsis (Сообщение 1160648)
И у меня вопрос по теме - как лучше делать visible или addChild?

Если смена анимации планируется подстановкой нужных мувиклипов, то лучше сделать addChild.
А теперь добавьте к этому волку ещё 10 анимаций и представьте сколько кода нужно будет для того, чтобы сменить анимацию на нужную. Перебирать мувики и всем ставить visible=false? Это лишнее. Намного проще просто удалить один мувик и положить на его место другой.

Akopalipsis 25.02.2014 14:23

samana Спасибо!

tihomir 25.02.2014 14:45

Понимаете волк у меня анимирован, когда он стоит он моргает, головой и хвостом вертит, ну а когда идёт ноги шагают, и вот я что то не соображу как это можно спрайтами сделать.

Akopalipsis 25.02.2014 14:53

Спрайтами Вам и не нужно, это я ими Вашего волка выразил. У Вас состояния волка, это разные MovieClip или все в одном?

tihomir 25.02.2014 14:59

1 клип стоит
2 шагает

Akopalipsis 25.02.2014 15:02

Уберите из кода спрайты и добавляйте в массив клипы.


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

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