【发布时间】:2015-06-20 20:38:07
【问题描述】:
我遇到了一个问题,它似乎忽略了我试图重载的函数。
我有一个名为 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 方面吗?
提前致谢,
格伦
【问题讨论】:
标签: actionscript-3 inheritance overloading