我是 AS3 的初学者,我正在尝试制作一个基本的 Player vs CPU pong 游戏(使用教程作为参考)。如果这听起来很愚蠢或显而易见,我深表歉意。我有一个用于 Ball、Player 和 CPU 的文档类和单独的类。我的问题是我不知道如何让 CPU 类使用舞台上影片剪辑球的坐标,以便它可以根据需要相对于球移动以形成 AI。我一直在参考的教程仅在文档类中包含球、球员和 cpu 的所有代码,但我已经为它们各自类中的所有内容编写了代码。
教程链接http://as3gametuts.com/2011/03/19/pong-1/
我的代码版本。目前球正在从墙上反弹,但 HitTest 尚未应用于任何东西。玩家桨正在使用箭头键移动。没有显示警告或错误。
主要的
public class Main extends MovieClip
{
public function Main()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
trace("Initialized");
}
}
球
public class Ball extends MovieClip
{
public var ballSpeedX:int = 5;
public var ballSpeedY:int = 6;
public function Ball()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage)
}
public function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage)
this.x = stage.stageWidth / 2;
this.y = stage.stageHeight / 2;
this.addEventListener(Event.ENTER_FRAME, loop)
}
public function loop(e:Event):void
{
this.y += ballSpeedY;
this.x += ballSpeedX;
if ((this.y <= 0 + this.height/2) || (this.y >= stage.stageHeight - this.height/2))
{
ballSpeedY *= -1;
}
else if ((this.x <= 0 + this.width/2) || (this.x >= stage.stageWidth - this.width/2))
{
ballSpeedX *= -1;
}
}
}
中央处理器
public class TheCpu extends MovieClip
{
public var cpu:TheCpu;
public var ball:Ball;
private var vx:Number = 5;
public function TheCpu()
{
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
this.x = 240;
this.y = 10;
this.addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void
{
/*if (this.x < ball.x - 10)
{
this.x += vx;
}
else if (this.x > ball.x + 10)
{
this.x -= vx;
}*/
}
}
我将此添加到我的主要课程中
private function onAddedToStage(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
trace("It's Alive!");
addBall();
addCPU();
}
public function addBall():void
{
var ball:MovieClip = stage.getChildByName("ball") as MovieClip
stage.addChild(ball);
}
public function addCPU():void
{
var cpu:MovieClip = stage.getChildByName("cpu") as MovieClip
stage.addChild(cpu);
}
}
但现在它给出错误 TypeError: Error #2007: Parameter child must be non-null。在 flash.display::DisplayObjectContainer/addChild() 在 flash.display::Stage/addChild() 在 src::Main/addBall() 在 src::Main/onAddedToStage()
如果我使用
var ball:Ball = new Ball();
var cpu:TheCpu = new TheCpu();
我收到 TypeError:错误 #1009:无法访问空对象引用的属性或方法。在 src::TheCpu() 在 src::Main/addCPU() 在 src::Main/onAddedToStage()
我觉得我现在真的很笨。