2015-01-20 59 views
0

我有一個movieClip對象(Creature),並且在它內部,我有要添加到Creatures Array HitPoints中的生命值。我想這樣做的方式是讓每個可能有hitPoints的Parent都有一個名爲HitPoints的數組,以便我可以讓每個點將它自己添加到Array,而不管父級。 IE,骨骼生物和地精生物可以在其基礎movieClip中使用相同類型的hitPoint對象,並且仍然可以訪問。從AS3中的movieClip中添加子項訪問父數組

我在子類(生命值),省略了一些這類

package Assets.Creatures 
{ 
import Assets.Points.HitPoint; 
import Assets.GameStates.Main; 
import flash.display.MovieClip; 
import flash.events.Event; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 
import flash.geom.Point; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 


public class BaseAI_ extends MovieClip 
{ 
     //Characteristics 
    protected var Health : int = 10; 
    protected var SPEED : int = 3; 
    protected var Intellect : int = 3; 
    protected var Strength : int = 3; 
    protected var Dexterity : int = 3; 
    protected var AttackRange : int = 70; 
    protected var Temperment : String = "Agressive"; 
    //public var Temperment : String = "Passive"; 
    //public var Temperment : String = "Defensive"; 

     //ARRAYS 
    public var HitPoints : Array = new Array; 


     // AttackTimers 
    protected var canAttack : Boolean = false; 
    protected var AttackSpeed : int; 
    protected var AttackTimer : Timer; 
    protected var AbilityCooldownsUP : Boolean = false; 
    //protected var ABILITY : Timer; 

     //AI STATES 
    protected var CURRENT_STATE : int = 0; 
    protected static var STATE_IDLE : int = 0; 
    protected static var STATE_ENGAGE : int = 1; 
    protected static var STATE_ATTACK : int = 2; 
    protected static var STATE_FLEE : int = 3; 

     //Reference 
    protected var Target : MovieClip; 

     //Directions 
    protected var SlopeY : Number; 
    protected var SlopeX : Number; 
    protected var EngagePosition : Point; 
    protected var RunDirection : Number; 

    public function BaseAI_() 
    { 
     addEventListener(Event.ADDED_TO_STAGE, Awake); 

    } // constructor code 

    private function Awake (e : Event) : void 
    { 
     AttackSpeed = (5000/Dexterity); 
     AttackTimer = new Timer (AttackSpeed, 0); 
     AttackTimer.addEventListener(TimerEvent.TIMER, AttackSpeedTimer); 
     AttackTimer.start(); 


     Main.main.EnemyArray_2.push(this); 
     stage.addEventListener(Event.ENTER_FRAME, update); 
    } 

    public function AddHitPoints (hitPoint : MovieClip) : void 
    { 
     HitPoints.push(hitPoint); 
    } 
} 

和Hitpoint的類的不需要的部分被

package Assets.Points 
{ 
import Assets.Creatures.BaseAI_; 
import Assets.Creatures.Player_; 
import Assets.Creatures.Player_Human; 
import flash.display.MovieClip; 
import flash.events.Event; 


public class HitPoint extends MovieClip 
{ 


    public function HitPoint() 
    { // constructor code 
     addEventListener(Event.ADDED_TO_STAGE, Awake); 
    } // constructor code 

    private function Awake (e : Event) : void 
    { 
     trace("HitPoints parent is " + parent); 
     parent.AddHitPoints(this); 
     //parent.HitPoints.push(this) 
     //trace("my parent has " + parent.HitPoints.length); 
    } 


} 
} 

所以我直接添加生命值的在舞臺上的ParentClass BaseAI_中,我嘗試了幾種不同的方法來直接用parent.AddHitPoints(this)添加HitPoint。和parent.HitPoints.push(this)

回答

0

我認爲你需要使用this.parent而不僅僅是父項。

+0

不幸的是,此外,this.parent將是多餘的。感謝您盡力幫助 – KingWrex 2015-01-21 17:56:29

相關問題