2013-08-22 28 views
1

我想從我的播放器類調用打孔功能在另一個類中,但由於某種原因,它給了我這個錯誤:1180:調用可能未定義的方法打孔

1180: Call to a possibly undefined method Punch. 

我不知道爲什麼它給了我這個錯誤。我甚至公開了這些職能。

這是我從調用它的類:

package 
{ 
    public class Player extends MovieClip 
    { 
     public function Player() 
     { 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDown); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPressed); 
      addEventListener(Event.ENTER_FRAME,Update); 
     } 


     function KeyPressed(event:KeyboardEvent):void 
     { 
      //If on floor 
      if (CanJump) 
      { 
       //If A key is down 
       if (event.keyCode == 65) 
       { 
        //Punch 
        Punch(true); 
       } 
      } 
     } 


     function Update(event:Event) 
     { 
      //Do stuff 
     } 

    } 
} 

,這就是我試圖撥打:

package 
{ 

    public class ComboSequence extends ComboHandler 
    { 

     public function ComboSequence(clipName:String, par:BaseObject, _oList:ObjectList) 
     { 
      // constructor code 
      super(clipName, par, _oList); 

     } 

     public function Punch(PunchKey:Boolean) 
     { 
      if (currentAttack != null) 
      { 
       if (Recovery <= 0 && FollowUpTime > 0) 
       { 
        currentAttack = currentAttack.GetNextAttack(PunchKey); 

        if (currentAttack != null) 
        { 
         SetAnimation(currentAttack.animName); 
         Recovery = currentAttack.Recovery; 
         FollowUpTime = currentAttack.Recovery + 25; 
        } 
       } 
      } 

      if (FollowUpTime > 0) 
      { 
       FollowUpTime--; 
      } 
      else 
      { 
       currentAttack = null; 
      } 

      if (Recovery > 0) 
      { 
       Recovery--; 
      } 
     } 

    } 

} 

回答

0

當你對自己打電話Punch()播放器類中,ActionScript正在查找Player.Punch()方法。你的方法在ComboSequence類。你可能試圖這樣做:

var comboSequence:ComboSequence = new ComboSequence(); 
comboSequence.Punch() 

請記住,雖然此代碼將運行,它可能不會做你想做它。我想你想在你的播放器對象中保留一個ComboSequence的實例。如果這對你沒有意義,那麼在一般情況下做一些關於ActionScript和麪向對象編程的背景知識會是一個好主意。

+0

感謝,但我得到新的錯誤我加入這個 '公共變種comboSequence:ComboSequence =新ComboSequence(clipName:字符串,面值:BaseObject,_oList:鏈表類);' ,因爲它需要有三個參數,但現在我得到說期待錯誤直腸結腸前。什麼是右鍵盤 – Saf

+0

聽起來就像你在語言的基礎知識方面有問題。我強烈建議你通過初學者的ActionScript教程。如果這是您的第一個項目,請嘗試更簡單的方法,並在您更有信心時加以解決。 – andypaxo

0

您需要導入ComboSequence球員類並調用打孔雖然像 ComboSequence.Punchandypaxo在他的文章中是正確的,你需要在Player類的某個地方實例化它。

有關您的代碼的一點說明,儘管如此,您不應該用大寫字母命名函數。類名通常以大寫字母開頭,但不以內部方法開頭。

package 
{ 
    import ComboSequence; //you may need the package path if its in a package, something like com.classes.ComboSequence, where com.classes is the folder that ComboSequence is saved. 

    public class Player extends MovieClip 
    { 
     public function Player() 
     { 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDown); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyPressed); 
      addEventListener(Event.ENTER_FRAME,Update); 
     } 


     function KeyPressed(event:KeyboardEvent):void 
     { 
      //If on floor 
      if (CanJump) 
      { 
       //If A key is down 
       if (event.keyCode == 65) 
       { 
        //Punch 
        ComboSequence.Punch(true); 
       } 
      } 
     } 


     function Update(event:Event) 
     { 
      //Do stuff 
     } 

    } 
} 

此外,關於你的 「失蹤rightParen」 的錯誤,rightParen意味着右括號,或leftParen。這錯誤意味着你缺少一個某處。通常情況下,它可能意味着你在某處添加了一個額外的一個,因此會關閉一段您不打算關閉的括號,這會在某處留下一個不成對的括號。

+0

謝謝,但現在我得到錯誤調用一個可能未定義的方法通過靜態類型的參考 – Saf

+0

我知道這是一個令人沮喪的事情,但它聽起來像你需要了解更多關於類和範圍。有太多可能的原因讓事情出錯,一步一步地逐行幫助你。閱讀靜態類與實例化的類。 – Ribs

+0

謝謝我不知道有不同的班級類型,好像我有很多學習要做的,我之前做過Flash遊戲,並認爲我更有信心,但似乎還有更多需要學習的知識 – Saf

相關問題