AS3对象移动

时间:2014-11-24 07:17:06

标签: actionscript-3 flash

AS3的新手,并试图让这个游戏机制正常工作。我需要做的是让每个流星在屏幕上显示时立即向左移动,但它们根本不会移动。如果有人知道如何解决这个问题,我将不胜感激!我将代码分为两部分,舞台代码和对象(流星)类代码。

以下是舞台上的代码。

import flash.events.MouseEvent;
import flash.events.Event;

var mcShip:Ship;
var meteor:Meteor;
var uiTimer:uint = 0;
var aMeteors:Array = new Array();

function InitializeGame():void
{
    mcShip= new Ship();
    mcShip.Initialize(100,200);
    stage.addChild(mcShip);
    stage.addEventListener(MouseEvent.MOUSE_MOVE, MouseInput);
    stage.addEventListener(Event.ENTER_FRAME,GenerateMeteors);
}

function MouseInput(me_:MouseEvent):void
{
    mcShip.Movement(me_);
}

function GenerateMeteors(eGenerate:Event):void
{
    if (0 == ++uiTimer%10)
    {
        meteor= new Meteor();
        aMeteors.push(meteor);
        meteor.Initialize(550, 390, 20);
        stage.addChild(meteor);

        trace (aMeteors);
    }
}
InitializeGame();

下面是对象(流星)代码。

import flash.events.Event;
var speed:int;
var aMeteors:Array = new Array();


function Initialize(iPosX_:int, iPosY_:int, iSpeed_:int):void
{
    x = iPosX_;
    y = Math.round(Math.random()* iPosY_)
    speed = Math.round(Math.random() * iSpeed_);
    var timer:Timer = new Timer(12)
    timer.addEventListener(TimerEvent.TIMER,Update);
    timer.start();

}



function Update(ev_:Event):void
{
    for (var a:int=0; a < aMeteors.length; a++)
    {
        aMeteors[a].x -= 1 * speed;
    }
}

基本上,我试图让流星在x轴上向左移动。我确信我有很多问题阻止它向左移动,但我无法弄明白。感谢您提前获得所有帮助!

1 个答案:

答案 0 :(得分:1)

首先:生成随机数,使用

Math.random()

这将生成0到1之间的随机数。要获得0到400之间的数字,可以将此数字乘以400,然后使用

Math.round(number)

要移动小行星,首先需要创建一个数组来存储它们。

var asteroids:Array = new Array;

您需要一个带有事件监听器的计时器来添加它们。

var asteroidAdder:Timer = newTimer([delay],[repetitions or 0 for infinite repetitions]);
asteroidAdder.addEventListener(TimerEvent.TIMER,addAsteroid);

你应该将addAsteroid放入一个创建小行星的函数中,并使用以下函数将其添加到数组中:

asteroids.push(asteroid);

您的最后一步是添加另一个带有事件侦听器的计时器来移动它们。让它调用一个函数,也许是'moveAsteroids'。在这个函数中应该是一个'for'循环,如下所示:

for (var a:int=0; a<asteroids.length; a++){
    asteroids[a].x+=asteroids[a].speed;
}

这将遍历数组中的每个对象(小行星[0]然后是小行星[1]等)并按其速度移动它们的x位置。您可能还需要添加一个检查,以确定它们何时离开屏幕边缘。发生这种情况时,您可以使用以下命令通过for循环删除它们:

removeChild(asteroids[a]); //removes the asteroid being checked from the stage
asteroids.splice(a,1) //remove the asteroid at position 'a' in asteroids from the array

希望这足以让你顺利上路。我假设你对制作函数和使用事件监听器有一些了解。如果您有任何问题,请发表评论。