2010-02-16 45 views
0

我有一個嵌入了影片剪輯的自定義類。當我嘗試使用父類的時候,比如gotoAndStop()。它忽略了這種方法。我想知道我做錯了什麼。下面是我的代碼。我在我的構造函數中調用該方法謝謝!gotoAndStop(); flashdevelop或flex

遊戲對象類

package com.objects 
{ 
    import com.eapi.IGameObject; 
    import flash.display.MovieClip; 
    /** 
    * ... 
    * @author Anthony Gordon 
    */ 
    public class GameObject extends MovieClip implements IGameObject 
    { 


     public function GameObject() 
     { 

     } 

    } 

} 

的英雄職業。 gotoAndStop()在構造函數中

package com.objects 
{ 
    import flash.display.MovieClip; 
    import flash.events.*; 
    /** 
    * ... 
    * @author Anthony Gordon 
    */ 
    [Embed(source='../../../bin/Assets.swf', symbol='Hero')] 
    public class Hero extends GameObject 
    { 
     private var aKeyPress:Array; 
     private var jumpDisabled:Boolean = false; 

     public function Hero() 
     { 
      gotoAndStop(1) ///<----------------Doesnt stop. Just keeps playing 
      wY = 150; 
      wX = 90; 
      speed = .5; 
      aKeyPress = new Array(); 
      TheGame.sr.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); 
      TheGame.sr.addEventListener(KeyboardEvent.KEY_UP,keyUpListener); 
     } 

     private function keyDownListener(e:KeyboardEvent):void { 
      //trace("down e.keyCode=" + e.keyCode);   
      aKeyPress[e.keyCode]=true; 
     } 

     private function keyUpListener(e:KeyboardEvent):void { 
      //trace("up e.keyCode=" + e.keyCode); 
      aKeyPress[e.keyCode]=false; 
     } 

     override public function UpdateObject():void 
     { 
      Controls(); 
      updatePosition(); 
     } 

     private function Controls():void 
     { 

      if (aKeyPress[38])//Key press up 
       ;//dy -= speed;   
      else if (aKeyPress[40])//Key press down 
       dy += speed; 

      if (aKeyPress[37])//left 
      { 
       dx -= speed; 
      } 
      else if (aKeyPress[39])//Right 
      { 
       dx += speed; 
      } 

      if (aKeyPress[32]){//space 
       jump(); 
      } 


     }//End Controls 

     private function jump():void 
     { 
      if (!jumpDisabled) 
      { 
       if (onGround) 
       { 
        gotoAndStop(10); 
        dy = -15; 
        jumpDisabled = true; 
       } 
      } 
      else 
      { 
       jumpDisabled = false;    
      } 
     } 
    } 

} 

回答

0

找出來。我忘記了我的MovieClip在另一個動畫片段中被封裝了。所以我不得不打電話給裏面的英雄符號

1

你應該添加一個偵聽以瞭解它的加入階段,還有初始化剪輯時。

public function Hero() { 
    if (stage) _init(); 
    else addEventListener(Event.ADDED_TO_STAGE, _init); 
} 

private function _init(e:Event = null):void { 
    removeEventListener(Event.ADDED_TO_STAGE, _init); 
    gotoAndStop(1) ///<----------------Doesnt stop. Just keeps playing 
    wY = 150; 
    wX = 90; 
    speed = .5; 
    aKeyPress = new Array(); 
    TheGame.sr.addEventListener(KeyboardEvent.KEY_DOWN, keyDownListener); 
    TheGame.sr.addEventListener(KeyboardEvent.KEY_UP,keyUpListener); 
} 

另外,我覺得這種閱讀Order of operations通過senocular將是非常有趣的。它解釋了時間軸對象和對象創建中的幀執行。

+0

我有點困惑什麼順序的操作必須做與告訴movieclip停止。此外,英雄不是主要的類,所以它沒有參考舞臺屬性。我沒有將舞臺參考存儲在一個名爲TheGame.sr的常量中。但無論如何,該方法不起作用 – numerical25 2010-02-16 20:26:09

-1

我注意到你還在使用

[Embed(source='../../../bin/Assets.swf', symbol='Hero')]

由於您使用閃光燈開發(但同樣適用於柔性)沒有理由不能使用的SWC 雖然我不能告訴100%肯定地說這就是導致這個問題的原因,一旦你開始使用SWC,它將會帶來一個不同的世界。 不僅您不再需要使用嵌入代碼,gotoandplay和擴展類等工作將會更好,您將能夠看到其中的類和對象。

SWF並不意味着以這種方式使用,並且越早停止將它們用於他們不適合的事情,就越容易。

+0

從SWF文件導入庫元素確實存在*無*錯誤。 – poke 2010-02-16 19:36:51

+0

Sooo,是否可以從自定義類中控制movieclip的播放頭? – numerical25 2010-02-16 23:08:02

+0

對於初學者來說,如果您使用了「添加到庫」選項而不是使用嵌入,那麼您會立即知道這是問題所在。有些人可能會說使用嵌入「沒有錯誤」,但我會說這很像使用記事本編碼。 Flash開發並不知道你在編輯什麼,所以它不能提供很多代碼方面的幫助提示,如果將它添加到庫中,類結構是可見的,這使得擴展類變得輕而易舉。 – Daniel 2010-02-17 06:42:26

3

問題是,當你嵌入一個電影剪輯的瑞士法郎實際上你得到的是一個動畫片段,並添加了真正的動畫片段內的子裝載器。

你必須嘗試像

var aMovie:MovieClip; 
Loader(this.getChildAt(0)).getLoaderInfo.addListener(Event.Complete, methodEventCompleteName); 

function methodEventCompleteName(e:Event) 
{ 
    aMovie = MovieClip(Loader(this.getChildAt(0)).content); 
} 

我真的建議嘗試學習使用SWC文件。我將其導出到flash cs5 IDE中,然後將lib文件夾添加到我的proyect中,然後在flashdeveloper ide中右鍵單擊SWC文件並選中「添加到庫」選項。內部類可以直接實例影片剪輯名稱爲SWC文件是這樣的:

var aMovie:MovieClip = new MyMovieClipFromSWC() as MovieClip; 

它完成:d

希望這有助於有人...因爲我花樣3星期,再想通並最終得到它...有沒有足夠的信息...