2013-08-22 87 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

相关问题