Движение в AS3 - PullRequest
       3

Движение в AS3

1 голос
/ 30 декабря 2010

Я учусь AS3.Как я могу переместить символ?

Мой код

var counter:int = new int();
counter = 0;
var point:symbol1 = new symbol1();  
addChild(point);  
point.x = 25 + 50;  
point.y = 25 + 50;  

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
function move_handler(e) { 
  if (e.keyCode == Keyboard.SPACE) {  

  while (counter < 200) 
  { 
    trace(counter);
    point.x += 1; 
    counter += 1;
  }
}
}

Но когда я нажимаю пробел, символ быстро.Как можно редактировать скорость точки?

Ответы [ 16 ]

0 голосов
/ 27 марта 2014

Вам нужно это

var counter:int = new int();
var vel = 1; //<------- Move 1 pixel by frame
counter = 0;
var point:symbol1 = new symbol1();  
addChild(point);  
point.x = 25 + 50;  
point.y = 25 + 50;  

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 

function move_handler(e) { 
  if (e.keyCode == Keyboard.SPACE) {  
      stage.addEventListener(Event.ENTER_FRAME,moveEnterFrame);
      stage.removeEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
  }
}


function moveEnterFrame(e:Event):void{
    point.x += vel; 
    counter ++;
    if(counter >= 200){
         stage.removeEventListener(Event.ENTER_FRAME,moveEnterFrame);

         counter = 0;
         stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 
    }
}
0 голосов
/ 25 сентября 2013

Ознакомьтесь с библиотекой Greensock - она ​​возьмет на себя всю сложность onEnterFrame и обладает некоторыми замечательными функциями.

Полный документ и примеры на http://www.greensock.com/

0 голосов
/ 15 августа 2013

Добро пожаловать в мир AS3.

Ваше описание вашей проблемы немного расплывчато, но я думаю, что знаю, что вам делать.Вы хотите анимировать экранный объект (symbol1) 200 px каждый раз, когда вы нажимаете пробел?если это так, вот как вы это делаете:

import flash.events.KeyboardEvent;
import flash.events.Event;

var destinationX:int = 0; // this contains the point's destination x 

var point:symbol1 = new symbol1(); // best practice is to name all your classes starting with upper case, like Symbol1, not symbol1
addChild(point);  
point.x = 25 + 50;  
point.y = 25 + 50;

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler); 

stage.addEventListener(Event.ENTER_FRAME, render);// run render function every frame

function move_handler(e:KeyboardEvent):void{// another best practice, when injecting a variable into a function declare what type the variable is, in this case e is a KeyboardEvent. :void when not returning any values from the function, basically all functions you make in the beginning should look like this

    if (e.keyCode == Keyboard.SPACE) {  

            destinationX += 200;// add 200 to destinationX
    }
}

function render(e:Event):void{ // runs every frame, if you set your fps to 30, then this will run 30 times a second

    if(destinationX > point.x){//Check if point's destination x is more than the points current x position

        point.x += 1;// add 1 to points x. you can change this if you want it to go faster
    }
}
0 голосов
/ 25 марта 2013

Ваш цикл while делает это быстрым, если вы удалите оператор while, он будет работать на SPACE DOWN

0 голосов
/ 12 февраля 2013

Использовать анимацию движения:

библиотеки импорта:

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;

var myTween:Tween = new Tween(ball, "x", Strong.easeOut, ball.x, ball.x + 100, 5, true);

Этот код перемещает ваш объект ("шарик") на 100 по оси "x" за 5 секунд.

0 голосов
/ 31 декабря 2010

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

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