【问题标题】:Issues with Accessing Superclass Properties (AS3)访问超类属性的问题 (AS3)
【发布时间】: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


    【解决方案1】:

    没关系,我找到了问题所在。射弹可以与凡人相撞,后者都是实体的子类。碰撞的跟踪语句是从 Mortal 类中调用的,而不是 Projectile,因此为什么覆盖似乎不起作用。

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多