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

Движение в 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 ]

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

Вам необходимо использовать событие ENTER_FRAME:

stage.addEventListener(Event.ENTER_FRAME,stageEnterFrame);

function stageEnterFrame(e:Event):void{
    displayObject.x+=1
}

displayList обновляется только после выполнения кода, поэтому ваш объект перемещается так быстро. Эта ссылка может помочь вам понять процесс.

1 голос
/ 23 июля 2014

Этот тип события является тем, что вы хотите:

' stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler)'
1 голос
/ 07 июля 2014

Сделайте так: Point.x + = 0.2;вместо point.x + = 1;

1 голос
/ 28 января 2013

В данный момент вы ждете, когда пользователь нажмет пробел, а затем переместит символ вправо на один пиксель 200 раз.

Но, как OXMO456 все 200 раз говорил, что он движется вправо, происходит в то же время, как если бы вы вручную набрали "point.x + = 1;" 200 раз.

если ваше намерение состоит в том, чтобы только 200 раз сдвинуть его вправо, вы можете заменить оператор while на оператор if:

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

Затем вы можете изменить скорость, с которой он движется, изменив число после «point.x + =».

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

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

var counter:int = 0; // setting this variable as you define it saves space
var speed:Number = 1; // here's the speed variable  (declared as a number so you can have fractions)
var point:symbol1 = new symbol1();  
addChild(point);  
point.x = 75; // 25+50 is 75, one less thing for flash to work out
point.y = 75;  

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler);

function move_handler(e) { 
  if (e.keyCode == Keyboard.SPACE) {
    if (counter < 200) 
    { 
      trace(counter);
      point.x += 1; 
      counter += 1;
    }
  }
}

Имеет ли это смысл?

0 голосов
/ 07 января 2015

Используйте метод ввода фрейма.

Пожалуйста, не используйте жесткий код: P

0 голосов
/ 28 декабря 2014

Причина, по которой ваш символ слишком быстрый, заключается в том, что while loop повторяет значение point.x 200 раз за один цикл. Чтобы ограничить положение вашего символа, вы должны использовать if statement вместо цикла while:

var point:symbol1 = new symbol1();
point.x = 75; // 25 + 50;
point.y = 75; // 25 + 50;
addChild(point);

const SPEED:Number = 0.7;
const DX:int = 200; // distance to cover
var counter:Number = 0; // counts the distance covered 

stage.addEventListener(KeyboardEvent.KEY_DOWN, move_handler);

function move_handler(e:KeyboardEvent):void
{
    if (e.keyCode == Keyboard.SPACE && counter < DX)
    {
        point.x += SPEED;
        counter += SPEED;
        trace(counter); // stops at 200
    }
}
0 голосов
/ 27 декабря 2014

почему бы не объявить вашу переменную-счетчик как Number (не как int)

var counter:Number = new Number();

затем измените свой статус на

point.x += 0.1; 
counter += 0.1;

это замедлит ваш видеоклип Point. Вы можете изменить движение, изменив значение 0,1 на любое значение.

0 голосов
/ 24 октября 2014
import flash.events.Event;

var point:MovieClip = 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, moveRight);
      }
}

 function moveRight(evt:Event):void
 {
     point.x+=1;
 }

Я думаю, это именно то, что вам нужно. Вначале вы создаете и вызываете функцию key_down. Внутри этой функции вы хотите вызвать саму функцию перемещения. Это функция, которую я создал внизу. Чтобы сделать это, например, на 200px, я предлагаю поработать с оператором if и removeEventlistener.

Обратите внимание, что я изменил несколько небольших кодировок, например, "var point: MovieClip = new Symbol1 ();", чтобы он соответствовал моему символу.

0 голосов
/ 28 июня 2014

Нарисуйте что-нибудь и назовите это в поле имени экземпляра ..... так что это хорошо ускорять и уменьшать клавишей пробела ...... я использую частоту кадров

    import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

 stage.addEventListener(Event.ENTER_FRAME,stageEnterFrame);
 var fremCount:int;
 var upDown:int;
 function stageEnterFrame(e:Event):void{

if(fremCount<30 && upDown==0){
    box.x+=1
    fremCount++
    }

if(fremCount==30){
    upDown=1;
    trace("For next : "+fremCount , upDown);
    }

if(upDown==1){
    box.x-=1
    fremCount--;
    }

if(upDown==1 && fremCount==0){
   upDown=0;
    }

    }

  stage.addEventListener(KeyboardEvent.KEY_DOWN, myKeyDown);
  function myKeyDown(e:KeyboardEvent):void{
  if (e.keyCode == Keyboard.SPACE){
  trace("Success!"+stage.frameRate);
  stage.frameRate += 5;
  if (stage.frameRate>150){stage.frameRate=0;}
 } 
}
0 голосов
/ 25 апреля 2014

ENTER_FRAME - то же самое, что и while.

stage.addEventListener(Event.ENTER_FRAME, nameFunction);   //this event execute fps ones on default 24 frames for seconds


var speed:int = 5;

function nameFunction(ev:Event){

   simbol.x += speed;

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