访问超类属性(AS3)的问题
问题描述:
我遇到了一个问题,它似乎忽略了我尝试重载的函数。访问超类属性(AS3)的问题
我有一个名为Projectile
的类,它扩展了Entity
类。投射物被传递一组数字影片剪辑来比较相撞。如果它与其中一个数组元素发生冲突,则将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
函数。此外,当我试图从任何子弹功能中访问collidedWith
时,它仍保持其默认值,并且不共享应该从Entity.checkCollision()
内设置的值。
我错过了什么吗?我忽略了一些面向对象的方面吗?
由于提前,
格伦
答
没关系,我想通了这个问题。射弹可以与实体的两个子类相碰撞。碰撞报警声明是从Mortal类中调用的,而不是在Projectile中调用的,因此为什么这个替换似乎不起作用。