我的角色是在屏幕中间生成的,我不知道如何让僵尸从屏幕的左边和右边生成,并向中间移动。我的目标是让僵尸自动生成,而中间的角色能够将它们击落。我刚刚开始在AS3上工作,但我知道我需要做一个数组来做到这一点,但不确定如何实现这一点。谁能告诉我?谢谢。下面是我的代码:
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;
public class ActualGame extends MovieClip
{
public var char:Character;
public var zombie:Zombieclass;
public var timer:Timer;
private var speed:Number = 4;
private var moveleft:Boolean = false;
private var moveright:Boolean = false;
private var i:Number =0;
public function ActualGame()
{
char = new Character();
stage.addChild(char);
zombie = new Zombieclass(0,360);
addChild(zombie);
timer = new Timer(25);
timer.addEventListener(TimerEvent.TIMER, zombie_spawn);
stage.addEventListener(Event.ENTER_FRAME, enterframe);
stage.addEventListener(KeyboardEvent.KEY_UP, keyup);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
timer.start();
}
public function zombie_spawn(timerEvent:TimerEvent):void
{
zombie.zombie_move_right();
if (char.hitTestObject(zombie))
{
timer.stop();
trace("hit");
}
}
public function enterframe(event:Event)
{
if (moveleft)
{
char.x -= speed;
char.scaleX = -1;
}
else if (moveright)
{
char.x += speed;
char.scaleX = 1;
}
}
public function keydown(event:KeyboardEvent)
{
switch ( event.keyCode )
{
case Keyboard.LEFT :
moveleft = true;
break;
case Keyboard.RIGHT :
moveright = true;
break;
}
}
public function keyup(event:KeyboardEvent)
{
switch ( event.keyCode )
{
case Keyboard.LEFT :
moveleft = false;
break;
case Keyboard.RIGHT :
moveright = false;
break;
}
}
}
}
Zombieclass:
package
{
import flash.display.MovieClip;
public class Zombieclass extends MovieClip
{
public function Zombieclass(xcoord:Number, ycoord:Number)
{
x = xcoord;
y = ycoord;
}
public function zombie_move_right():void
{
x += 1.5;
}
public function zombie_move_left():void
{
x -= 1.5;
}
}
}
我理解你的问题,我也有过这样的经历。当你只是通过尝试、复制和修改其他代码来学习编程,并最终完成你的目标时,你可能会错过一些以后需要学习的要点。
Array的工作原理有点像一叠纸。你可以把一张纸放进去,也可以把一张纸拿出来,或者你可以把一整摞纸放在桌子上,然后一张一张地在上面盖上邮票。这就是你想对僵尸做的事。(打个比方来说)。
你还需要学习循环的概念。使用循环,你可以用很少的代码行操作数组中的所有对象,即使你事先不知道数组中有多少项。
你要做的是:
- 创建一个数组来保存僵尸。
- 用僵尸填充你的数组
- 每帧循环你的僵尸,告诉他们移动。
像这样创建数组:public var zombies:Array = new Array();
添加一些僵尸:
var numberOfZombies:uint = 10;
for(var i:uint = 0; i<numberOfZombies; ++i) {
var zombie:ZombieClass = new ZombieClass(0, (360/numberOfZombies)*i);
addChild(zombie);
zombies.push( zombie );
}
这将创建10个僵尸,将它们放在屏幕上,并将它们添加到数组中。
然后,在每一帧中,你可以循环遍历数组并移动僵尸:
for(var i:uint = 0; i<numberOfZombies; ++i) {
var zombie:ZombieClass = zombies[i];
zombie.zombie_move_right();
}
什么的。这段代码可能包含一些错误,因为它没有经过测试,而且我是在iPad上编写的,但希望它能进一步帮助你。学习使用数组和循环。
好运。
我通常喜欢将关注点分开。假设你有各种类型的僵尸,然后你会使用另一种方法来创建它们,并使用这种方法简单地将它们添加到左侧&对,与它们是什么类型无关…
private function addZombie( zombie:Zombie ):void
{
//Get a random number
var random:Number = ( Math.random() * 100 ) % 2;
//If the number is even , place the zombie on the right
if( random == 0 )
{
//add the zombie outside the stage
zombie.x == stage.stageWidth + 10;
zombie.moveLeft();
}else { //otherwise , place it on the left
//add the zombie outside the stage
zombie.x = -10;
zombie.moveRight();
}
addChild( zombie );
}
代替:
public var zombie:Zombieclass;
你会得到这样的内容:
public var zombies:Array;
或
public var zombies:Vector.<Zombieclass>;
而不是:
zombie = new Zombieclass(0,360);
你会有这样的东西:
zombies = new Array(20); //20 Zombies
for(var x:Number = 0; x < zombies.length; x++) {
zombies[x] = new ZombieClass(someVar:Number, 360);
}
然后你可以使用计时器功能将僵尸一个接一个地添加到阶段。在这一点上,我将留给你,不想带走所有的兴奋;)