2014-01-15 5 views
0

спасибо за любую помощь вы можете предоставитьфлэша переход твин с клавиатурой

Я хочу мувиклип двигаться влево или вправо с помощью ослабления, так что я с помощью анимации вспышки .The кода ниже. Проблема заключается в том, что когда я нажимаю левую клавишу, она перемещается один раз, а не продолжает двигаться, пока я продолжаю нажимать клавишу и то же самое с правой клавишей. Помогите пожалуйста? Благодарю.

//variable declarations 
var Currpos:Number = boat_mc.x ; 
var xleft:Number = boat_mc.x - 40; 
var xright:Number = boat_mc.x + 40; 

     // move boat 
     stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyboardClick); 

     function onKeyboardClick (e:KeyboardEvent):void{ 
      if (e.keyCode == Keyboard.LEFT){ 
       var tweenleft:Tween = new Tween(boat_mc, "x", Regular.easeOut, Currpos, xleft, 2, true); 
       } 

       if (e.keyCode == Keyboard.RIGHT){ 
       var tweenright:Tween = new Tween(boat_mc, "x", Regular.easeOut, Currpos, xright, 2, true);    
       } 
     } 

ответ

0

на основе ваших ответов serhatsezer я был в состоянии решить эту проблему, благодаря

Основная проблема, которую я делал, было я объявлял переменные вне функции, поэтому он не получал обновленные

import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.display.Stage; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.geom.Point; 
    import flash.text.TextFieldAutoSize; 
    import flash.text.TextField; 
    import flash.ui.Mouse; 
    import flash.display.DisplayObjectContainer; 
    import fl.transitions.Tween; 
    import fl.transitions.easing.*; 
    import mochi.as3.*; 


    //variable declaration 
    var isRightPressed:Boolean = false; 
    var isLeftPressed:Boolean = false; 
    var tweenleft:Tween; 
    var tweenright:Tween; 


    // move boat 
    stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyboardClick); 
    stage.addEventListener(KeyboardEvent.KEY_UP,onKeyboardUp); 

    function onKeyboardClick(e:KeyboardEvent):void 
    { 
     if (e.keyCode == Keyboard.LEFT) 
     { 
      isLeftPressed = true; 
     } 

     if (e.keyCode == Keyboard.RIGHT) 
     { 
      isRightPressed = true; 
     } 
    } 

    function onKeyboardUp(e:KeyboardEvent):void 
    { 
     if (e.keyCode == Keyboard.LEFT) 
     { 
      isLeftPressed = false; 
     } 

     if (e.keyCode == Keyboard.RIGHT) 
     { 
      isRightPressed = false; 
     } 
    } 

    stage.addEventListener(Event.ENTER_FRAME,loop); 

    function loop(event:Event):void 
    { 
    //variable declrations 

    var Currpos:Number = boat_mc.x; 
    var xleft:Number = boat_mc.x - 40; 
    var xright:Number = boat_mc.x + 40; 

     if (isRightPressed) 
     { 
      tweenright = new Tween(boat_mc, "x", Regular.easeOut, Currpos, xright, 2, true);     
      trace(boat_mc.x); 
     } 

     if (isLeftPressed) 
     { 
      tweenleft = new Tween(boat_mc, "x", Regular.easeOut, Currpos, xleft, 2, true); 
      trace(boat_mc.x); 
     } 
    } 
0

Я думаю, вы пытаетесь сделать неправильный путь. Вы должны управлять нажатой клавишей при прослушивании ENTER_FRAME. После этого переместите их! Но имейте в виду, что вам нужно обновлять переменные в вашей функции.

import fl.transitions.Tween; 
import fl.transitions.easing.Regular; 
import flash.events.Event; 

var Currpos:Number = boat_mc.x; 
var xleft:Number = boat_mc.x - 40; 
var xright:Number = boat_mc.x + 40; 
var isRightPressed:Boolean = false; 
var isLeftPressed:Boolean = false; 


// move boat 
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyboardClick); 
stage.addEventListener(KeyboardEvent.KEY_UP,onKeyboardUp); 

function onKeyboardClick(e:KeyboardEvent):void 
{ 
    if (e.keyCode == Keyboard.LEFT) 
    { 
     isLeftPressed = true; 
    } 

    if (e.keyCode == Keyboard.RIGHT) 
    { 
     isRightPressed = true; 
    } 
} 

function onKeyboardUp(e:KeyboardEvent):void 
{ 
    if (e.keyCode == Keyboard.LEFT) 
    { 
     isLeftPressed = false; 
    } 

    if (e.keyCode == Keyboard.RIGHT) 
    { 
     isRightPressed = false; 
    } 
} 

stage.addEventListener(Event.ENTER_FRAME,loop); 
var xSpeed:Number = 0.8; 
function loop(event:Event):void 
{ 
    if (isRightPressed) 
    { 
     boat_mc.x += xSpeed; 
    } 

    if (isLeftPressed) 
    { 
     boat_mc.x -= xSpeed; 
    } 
} 

Я надеюсь, что эта помощь. Ура!

+0

привет Большое вам спасибо за ваш ответ, и он отлично работает, но не совсем то, что я хотел, это моя ошибка, потому что я думаю, что я был недостаточно ясен. Я использовал var tweenleft: Tween = new Tween (boat_mc, «x», Regular.easeOut, Currpos, xleft, 2, true); функция флеш-анимации, так что объект движется с эффектом непринужденности .., что, конечно, ваш код не делает. Поэтому, если вы могли бы помочь мне с этим, я был бы очень признателен. Спасибо – Anando

+0

жаль, что я не могу ответить. только вам нужно уменьшить или увеличить ваши переменные в вашей функции. –

Смежные вопросы