В CS5 Actionscript 3.0 функция Tween () позволяет им не иметь конечную точку для параметра анимации - PullRequest
0 голосов
/ 07 июня 2011

Я пробовал множество различных методов, чтобы сделать это так, как я хочу. Я использую клавиши со стрелками для показа MovieCLip по оси X, используя только стрелку вправо и стрелку влево, в то время как MovieClip выполняет анимацию во время движения. Я обнаружил, что функция Tween () будет работать лучше всего. Вот мой код:

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);

function keyPressed(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.RIGHT && var_move == false)
    {
        var_move = true;
        hero.gotoAndPlay(3);
        hero.scaleX = 1;
        var tween1:Tween = new Tween(hero, "x", None.easeNone, hero.x, hero.x += 70, 15, false);
        tween1.addEventListener(TweenEvent.MOTION_FINISH, onMotionFinished);
    }

    if(evt.keyCode == Keyboard.LEFT && var_move == false)
    {
        var_move = true;
        hero.gotoAndPlay(3);
        hero.scaleX = -1;
        var tween2:Tween = new Tween(hero, "x", None.easeNone, hero.x, hero.x -= 70, 15, false);
        tween2.addEventListener(TweenEvent.MOTION_FINISH, onMotionFinished);

    }
}

function onMotionFinished($evt:TweenEvent):void
{
    hero.gotoAndPlay("Stand");
    var_move = false;

}

Код, о котором идет речь:

var tween1:Tween = new Tween(hero, "x", None.easeNone, hero.x, hero.x += 70, 15, false);

Мне было интересно, нужна ли вам конечная точка для Tween (). Это единственная часть, которая меня портит. Я не хочу, чтобы объект останавливался в заданных точках. Так что, если вы просто нажмете кнопку со стрелкой, объект продолжит работу до заданной для него точки. Я пытаюсь остановить на десять центов, где захочу. Я попробовал следующий код.

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, releaseKey);

function keyPressed(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.RIGHT)
    {
        var_move = true;
        hero.gotoAndPlay("Walk");
        hero.scaleX = 1;
        hero.x += 5;
    }

    if(evt.keyCode == Keyboard.LEFT)
    {
        var_move = true;
        hero.gotoAndPlay("Walk");
        hero.scaleX = -1;
        hero.x -= 5;
    }
}

function releaseKey(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.RIGHT || evt.keyCode == Keyboard.LEFT)
    {
        hero.gotoAndStop("Stand");
    }
}

Этот код работает, когда дело доходит до остановки анимации на десять центов, но с плохой задержкой, когда сначала нажимается клавиша со стрелкой. Почти как easyIn, но это не так. Это как задержка ответа в ActionScript и нажатии клавиши. Кто-нибудь может мне помочь с одним из этих вопросов? Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

Вы можете попробовать использовать событие ENTER_FRAME для своего движения и убить слушателя, когда отпустите клавишу.Примерно так (не проверено):

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, releaseKey);

var movement:int = 0;

function keyPressed(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.RIGHT) {
        hero.gotoAndPlay("Walk");
        hero.scaleX = 1;
        movement = 5;
        stage.addEventListener(Event.ENTER_FRAME,doMovement);
    } else if(evt.keyCode == Keyboard.LEFT) {
        hero.gotoAndPlay("Walk");
        hero.scaleX = -1;
        movement = -5;
        stage.addEventListener(Event.ENTER_FRAME,doMovement);
    }
}

function releaseKey(evt:KeyboardEvent):void
{
    if(evt.keyCode == Keyboard.RIGHT || evt.keyCode == Keyboard.LEFT)
    {
        hero.gotoAndStop("Stand");
        stage.removeEventListener(Event.ENTER_FRAME,doMovement);
    }
}

function doMovement(evt:Event):void
{
    hero.x += movement;
}
0 голосов
/ 07 июня 2011

Я не совсем понимаю вопрос, но я рекомендовал изучить http://www.greensock.com/tweenmax/ для вашей анимации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...