2011-11-22 41 views
1

我目前遇到问题时引用了MovieClip子项,我将其添加到Document类的Stage中。基本上当孩子被添加到Document类的Stage时,我想Stage上的某个MovieClip已经在Stage上引用它。参考影片剪辑作为子项添加到舞台后

此外,如果可能的话,我不希望MovieClip引用孩子被添加到Stage有与Document类连接它的参数,因为我计划稍后在另一个MovieClip嵌套这MovieClip在将来。

下面是MovieClip类,这是参照孩子一旦它被添加到Stage代码:

package com.gameEngine.assetHolders 
{ 
    import com.gameEngine.documentClass.*; 
    import com.gameEngine.assetHolders.*; 
    import com.gameEngine.assetHolders.Levels.*; 
    import flash.display.*; 
    import flash.events.*; 

    public class FallingPlatform extends MovieClip 
    { 
     public var _document:Document; 
     // Trying to reference "_player" 
     public var _player:Player; 
     public var fallState:Boolean; 
     public var platformYSpeed:Number = 0; 
     public var platformGravityPower:Number = 0.75; 

     public function FallingPlatform() 
     { 
      this.addEventListener(Event.ADDED_TO_STAGE, initFallingPlatform); 
      // constructor code 
     } 
     public function initFallingPlatform(event:Event) 
     { 
      this.addEventListener(Event.ENTER_FRAME, dynamicFall); 
      this.addEventListener(Event.ENTER_FRAME, hitTest); 
     } 
     public function dynamicFall(event:Event) 
     { 
      if (this.fallState) 
      { 
       this.platformYSpeed += this.platformGravityPower; 
       y += this.platformYSpeed; 
      } 
     } 
     // Trying to reference "_player" 
     public function hitTest(event:Event) 
     { 
      if (this.hitTestPoint(_player.x, _player.y + 1, true)) 
      { 
       this.fallState = true; 
      } 
     } 
    } 
} 

回答

0

玩家在Document类中初始化,对吗?所以对我来说,最好的选择是要么通过玩家参考在FallingPlatform类的构造函数这样

public function FallingPlatform (thePlayer:Player) { 
     this._player = thePlayer 
} 

或者具有setter方法将它传递给它。通过这种方式,你不是要绑定你的代码的结构

public function set player (thePlayer:Player):void { 
     this._player = thePlayer 
} 

希望它有帮助!

0

如果为FLA文件在舞台上的每一个影片剪辑可以访问设置文档类通过它的实例名称 - 就像你将创建一个var与它的名字一样。 事件更多,你可以这样做:

如果你在舞台上放置两个影片剪辑,例如mc1和mc2,你可以将它们作为变量添加到文档类中。

package{ 
    public class DocClass{ 

    public var mc1:MovieClip; 
    public var mc2:MovieClip; 

    [...] 

    } 
} 

比你可以从你的类代码提示形成你的IDE(闪存或flashbuilder)访问这些影片剪辑

相反还菱:在类中定义的变量比访问它们闪光灯

!当你的文档类扩展一个Sprite的时候,它效果最好,我没有;在从一个MovieClip扩展的时候测试它,但它也应该可以工作

+0

好吧,我用hitTest函数中的“_document._player”替换了“_player”,但现在我得到错误#1009:无法访问空对象引用的属性或方法。任何想法如何解决这个错误? – Blaze356

+0

是否_documment属性发起somwhere?也许你应该创建一个静态变量来保存文档的实例 –

+0

该代码仍然与上次相同,只不过我在hitTest函数中将“_player”替换为“_document._player”。 “_document”属性是在FallingPlatform类(我发布的类)中初始化的,但是我是否正确地做了它? – Blaze356

相关问题