【问题标题】:1180:Call to a possibly undefined method Punch1180:调用可能未定义的方法
【发布时间】:2013-08-23 05:45:13
【问题描述】:

我正在尝试从另一个类中的播放器类调用打孔函数,但由于某种原因它给了我这个错误:

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--;
            }
        }

    }

}

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    当您在播放器类中单独调用Punch() 时,ActionScript 正在寻找Player.Punch() 方法。您的方法在 ComboSequence 类上。您可能正在尝试执行以下操作:

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

    请记住,虽然此代码会运行,但它可能不会执行您希望它执行的操作。我猜你想在你的播放器对象中保留一个ComboSequence 的实例。如果这对您没有意义,那么最好阅读一些有关 ActionScript 和一般面向对象编程的背景知识。

    【讨论】:

    • 谢谢,但我得到了新的错误,我添加了这个public var comboSequence:ComboSequence = new ComboSequence(clipName:String, par:BaseObject, _oList:ObjectList);,因为它需要三个争论,但现在我收到错误说在冒号之前期待 rightparen。到底什么是右括号
    • 听起来您在语言基础方面遇到了问题。我强烈建议您阅读初学者 ActionScript 教程。如果这是您的第一个项目,请先尝试一些更简单的项目,然后在您更有信心时再做。
    【解决方案2】:

    您需要将 ComboSequence 导入到 Player 类中并调用 Punch 虽然这样 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将是 (。该错误意味着您在某处缺少 )。通常,这可能意味着您在某处添加了一个额外的括号,从而关闭了您不想关闭的括号部分,这会在某处留下一个不成对的括号。

    【讨论】:

    • 谢谢,但现在我得到错误调用一个可能未定义的方法通过静态类型类的引用打孔
    • 我知道这是一件令人沮丧的事情,但听起来你需要更多地了解类和范围。出现问题的可能原因太多了,在这里逐行帮助您,逐步进行。阅读静态类与实例化类。
    • 谢谢 我不知道有不同的课程类型 好像我有很多东西要学学习
    • 尽量不要气馁。总是有更多的东西要学,即使你认为你已经学会了一切!我现在不能,但是当我有时间的时候,我会查看我的参考资料,以获得关于 as3 中的类的好教程。谷歌搜索应该会让你开始。
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多