我正在尝试制作类似于世界上最难的游戏的游戏,但我遇到了hitTestObject块的问题。这是我对敌人mi的代码:
package {
import flash.display.MovieClip;
import flash.events.Event;
public class enemys extends MovieClip {
public function enemys() {
stage.addEventListener(Event.ENTER_FRAME, hittrue)
}
public function hittrue(event:Event) {
if (this.hitTestObject(?)) {
while (numChildren > 0) {
removeChildAt(0)
}
gotoAndStop(2)
}
}
}
}
我不知道该把什么问题放进去。当我把我的播放器的实例名称,它说它是未定义的。
答案 0 :(得分:1)
您收到错误,因为enemys
(原文如此)似乎无法访问任何类型的播放器实例。
您应该将命中测试从enemys
类移到您可以访问enemys
和播放器实例的某个位置。一个好的地方就是某种GameEngine类。
答案 1 :(得分:0)
如何设置播放器的实例名称?你通过构造函数传递实例吗?
从您的主要课程中,您需要将您的播放器实例发送到enemys课程。 (顺便说一句,敌人的复数就是敌人)
public class Enemies extends Sprite{
private var player:PlayerClass;
public function Enemies(p:PlayerClass) {
stage.addEventListener(Event.ENTER_FRAME, hittrue);
player = p;
}
然后你就可以把''播放器'在哪里?是。在你的主要课程中,你会有类似的东西:
var enemies:Enemies = new Enemies(player);
我将MovieClip更改为Sprite。这是你的选择,但有时候使用Sprit会更好,因为它会比MovieClip更快。你可能想要研究它们,特别是如果你一次要在舞台上有多个敌人的话。
另一件事是设计你的ENTER_FRAME事件。
您不希望在多个类中进行多个Enter_Frame事件。一个好的设计是在你的主要课程中有一个。然后从需要时钟周期的类中,在主类的ENTER_FRAME事件中调用这些对象的更新方法。
所以在你的主课程的ENTER_FRAME活动中你会打电话:
enemies.hittrue();
而不是在你的敌人类中有一个EnterFrame事件。这也可以让您更轻松地暂停游戏。
正如另一个答案所暗示的那样。你的碰撞检测应该在你的敌人类之外。但是,这就是你将玩家的引用传递给另一个类的方法。