我遇到的问题似乎是忽略了我试图超载的函数。
我有一个名为Projectile
的类,它扩展了Entity
类。 Projectile传递一组MovieClip来比较碰撞。如果它与其中一个数组元素发生冲突,则collidingWith
设置为该对象。然后调用onCollision()
函数来解决碰撞对象应该发生的事情。
以下是相关代码:
public class Main extends MovieClip{
...
for(var i in projectileArray){
projectileArray[i].update();
}
...
}
public class Entity extends MovieClip{
protected var canCollideWith:Array; //Array of objects to test collision against
protected var collidingWith:Object; //Object this projectile collided with
...
protected function update(){
this.checkCollision()
}
protected function checkCollision(){
for(var in canCollideWith){
if (image.hitTestObject(canCollideWith[i])){
collidingWith = canCollideWith[i];
this.onCollision();
}
}
}
protected function onCollision(){
//To be overriden by child classes
trace("Entity onCollision");
}
}
public class Projectile extends Entity{
public function Projectile(...){
super.(...);
}
override protected function onCollision(){
trace("Projectile onCollision");
}
}
根据我尝试的跟踪语句,我可以重载Entity.update()
和Entity.checkCollision
,它不会让我覆盖Entity.onCollision()
。它只会转到Projectile的超类(实体)的onCollision
函数。
此外,当我尝试从任何Projectile函数中访问collidedWith
时,它仍保持默认值,并且不会在Entity.checkCollision()
内共享应设置的值。
我错过了什么吗?我忽略了一些OOP方面吗?
提前致谢,
格伦
答案 0 :(得分:0)
没关系,我弄明白了这个问题。弹丸可以与真人碰撞,真人都是实体的子类。碰撞的跟踪语句是从Mortal类中调用的,而不是Projectile,因此覆盖似乎不起作用。