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轴上向左移动。我确信我有很多问题阻止它向左移动,但我无法弄明白。感谢您提前获得所有帮助!
答案 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
希望这足以让你顺利上路。我假设你对制作函数和使用事件监听器有一些了解。如果您有任何问题,请发表评论。