2015-06-20 90 views
0

我遇到了一个问题,它似乎忽略了我尝试重载的函数。访问超类属性(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()内设置的值。

我错过了什么吗?我忽略了一些面向对象的方面吗?

由于提前,

格伦

回答

0

没关系,我想通了这个问题。射弹可以与实体的两个子类相碰撞。碰撞报警声明是从Mortal类中调用的,而不是在Projectile中调用的,因此为什么这个替换似乎不起作用。