我正在研究一些敌人AI,我希望他们每隔一段时间就转向一名玩家,具体取决于计时器。所有的代码都充实了,但是我使用了多个单独的类,而且我很难让玩家成为可以被敌人AI访问的全局点。
我写道:
public var playerGlobalPos:Point = localToGlobal(new Point(PlayerTank.x, PlayerTank.y))
但这会不断出现此错误消息:
1119:通过具有静态类型Class的引用访问可能未定义的属性y。
而且我不确定我是否可以像这样引用敌人类中的变量playerGlobalPos并让代码jsut识别它,有些东西告诉我它不会起作用。我是多类编程的新手,所以将变量转移到其他类会给我带来一些麻烦。
答案 0 :(得分:1)
显然,您的PlayerTank
是类名,而不是对象(实例)名称。想象一下你的玩家控制两个坦克,应该使用哪个X和Y?所以,你的敌人应该能够以某种方式到达玩家的坦克实例。虽然只有一个玩家和一个坦克,但最好的学习方法是为你的AI类使用静态变量。
public static var player:PlayerTank;
在创建战场时使用玩家实例分配一次,因为它是您放置所有,AI,玩家,障碍物等的地方,然后在AI例程中引用它。这样的playerGlobalPoint
var也可以是静态的,但请注意,如果可能的话,应定期更新其X和Y而不调用new Point()
。调用localToGlobal()
仍会在每次调用时创建一个Point
对象,但您可以避免创建两个。