访问超类属性(AS3)的问题

时间:2015-06-20 20:38:08

标签: actionscript-3 inheritance overloading

我遇到的问题似乎是忽略了我试图超载的函数。

我有一个名为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方面吗?

提前致谢,

格伦

1 个答案:

答案 0 :(得分:0)

没关系,我弄明白了这个问题。弹丸可以与真人碰撞,真人都是实体的子类。碰撞的跟踪语句是从Mortal类中调用的,而不是Projectile,因此覆盖似乎不起作用。