在Flash中创建多个对象(数组)时出现问题
问题描述:
我在Flash中制作了一个基本的Galaga类型的游戏,并且遇到了问题。这是我第一次真正搞乱ActionScript。
我为我的敌人创造了一个阵列,并想知道如何让他们在他们自己的位置产卵,比如在Galaga,然后让他们从左到右均匀地移动,一直下到舞台的边缘。在Flash中创建多个对象(数组)时出现问题
游戏
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class SpaceVigilanteGame extends MovieClip
{
public var army:Array;
public var avatar:Avatar;
public var gameTimer:Timer;
public var useMouseControl:Boolean;
public var rightKeyIsBeingPressed:Boolean;
public var leftKeyIsBeingPressed:Boolean;
var gameWidth:int = 0;
var gameHeight:int = 0;
public function SpaceVigilanteGame()
{ useMouseControl = false;
leftKeyIsBeingPressed = false;
rightKeyIsBeingPressed = false;
army = new Array();
var newEnemy = new Enemy(60, 30);
army.push(newEnemy);
addChild(newEnemy);
avatar = new Avatar();
addChild(avatar);
if (useMouseControl)
{
avatar.x = mouseX;
avatar.y = mouseY;
}
else
{
avatar.x = 50;
avatar.y = 400;
}
gameWidth = stage.stageWidth;
gameHeight = stage.stageHeight;
gameTimer = new Timer(25);
gameTimer.addEventListener(TimerEvent.TIMER, moveEnemy);
gameTimer.addEventListener(TimerEvent.TIMER, moveAvatar);
gameTimer.start();
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPress);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyRelease);
function onKeyPress(keyboardEvent:KeyboardEvent):void
{
if (keyboardEvent.keyCode == Keyboard.RIGHT)
{
rightKeyIsBeingPressed = true;
}
else if (keyboardEvent.keyCode == Keyboard.LEFT)
{
leftKeyIsBeingPressed = true;
}
}
function onKeyRelease(keyboardEvent:KeyboardEvent):void
{
if (keyboardEvent.keyCode == Keyboard.RIGHT)
{
rightKeyIsBeingPressed = false;
}
else if (keyboardEvent.keyCode ==Keyboard.LEFT)
{
leftKeyIsBeingPressed = false;
}
}
}
public function moveEnemy(timerEvent:TimerEvent):void
{
for each (var enemy:Enemy in army)
{
}
//enemy.moveDownABit();
if(enemy.x+enemy.width+2<=gameWidth)
{
enemy.moveRight();
}
else if(enemy.y+enemy.height+2<=gameHeight)
{
enemy.moveDown();
}
else if(enemy.x-2>=0)
{
enemy.moveLeft();
}
else if(enemy.y-2>=0)
{
enemy.moveUp();
}
}
public function moveAvatar(timerEvent:TimerEvent):void
{
if (useMouseControl)
{
avatar.x = mouseX;
avatar.y = mouseY;
}
else if (rightKeyIsBeingPressed)
{
avatar.moveRight();
}
else if (leftKeyIsBeingPressed)
{
avatar.moveLeft();
}
}
}
}
敌对阶级
package
{
import flash.display.MovieClip;
public class Enemy extends MovieClip
{
public function Enemy(startX:Number, startY:Number)
{
x = startX;
y = startY;
}
public function moveRight():void
{
x = x + 2;
}
public function moveDown():void
{
y = y + 2;
}
public function moveLeft():void
{
x = x - 2;
}
public function moveUp():void
{
y = y - 2;
}
}
}
答
我建议敌人实例中(其中有似乎只有一个),你应该设置的位置相互之间。
为例:
你的代码目前这是否:
var newEnemy = new Enemy(60, 30);
army.push(newEnemy);
addChild(newEnemy);
也许它应该做这样的事情:
for(var x:int = 0; x< ARMY_WIDTH; x++)
{
for(var y:int = 0; y < ARMY_HEIGHT; y++)
{
army.push(new Enemy(60 + x * X_GAP, 30 + y *Y_GAP));
this.addChild(army[army.length-1]);
}
}
现在,我已经做了很多假设在上面的代码中;我发明了你可能没有的常量,而我只解决了你眼前的问题。理想情况下,您需要为您的问题寻找更高级的解决方案,例如为您创建敌人的工厂类,或者从一群敌人中回收它们。
然而,你刚刚开始,你会及时地计算出这些东西。祝你好运,希望你继续发展你的技能:)
谢谢,我可以看到你在做什么,是的,我没有那些常量,我一定会看看工厂类。 – 2015-04-01 16:13:39