Actionscript 3 AS3调用可能未定义的方法时出现静态类型类错误,我可以';不固定

Actionscript 3 AS3调用可能未定义的方法时出现静态类型类错误,我可以';不固定,actionscript-3,Actionscript 3,我遵循一个游戏教程,但做了一些修改。为了添加多个级别,我添加了实例,但这让我无法修复 每个关卡都可以获得积分,如果你死了,这些积分会出现在游戏屏幕上 级别代码 package { import flash.display.MovieClip; import flash.display.Sprite; import flash.utils.Timer; import flash.utils.getTimer; import flash.events.TimerEvent; import f

我遵循一个游戏教程,但做了一些修改。为了添加多个级别,我添加了实例,但这让我无法修复

每个关卡都可以获得积分,如果你死了,这些积分会出现在游戏屏幕上

级别代码

    package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.utils.getTimer;
import flash.events.TimerEvent;
import flash.events.MouseEvent;
import flash.media.SoundMixer;
import flash.media.Sound;
import flash.media.SoundTransform;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.net.URLLoader;


public class LevelEen extends MovieClip 
{
    public var gerardJoling : GerardJoling;
    public var geerTimer:Timer;
    public var geerGame : GeerGame;
    public var geer_score:GeerScore;
    public static var instance:LevelEen;

    public var gameOverScherm:GameOverScherm;
    public var levelEen:LevelEen;

    public var pattys:Array;        

    public var enemy:VrouwVijand;

    public var volumeAdjust:SoundTransform = new SoundTransform();
    public var channelNogniet:SoundChannel = new SoundChannel();
    public var channelScore:SoundChannel = new SoundChannel();

    public var Nogniet:URLRequest = new URLRequest("Sounds/Gerard Joling - Het is nog niet voorbij.mp3");
    public var Score:URLRequest = new URLRequest("Sounds/10046_1361186725.mp3");
    public var noMoreNogniet:Sound = new Sound(Nogniet);
    public var noMoreScore:Sound = new Sound(Score);

    public function LevelEen() 
    {
        SoundMixer.stopAll();
        volumeAdjust.volume = 1;
        channelNogniet = noMoreNogniet.play(0,10);
        channelNogniet.soundTransform = volumeAdjust;

        gerardJoling = new GerardJoling();
        addChild(gerardJoling);
        gerardJoling.x = mouseX;
        gerardJoling.y = mouseY;

        pattys = new Array();

        geerTimer = new Timer( 25 );
        geerTimer.addEventListener( TimerEvent.TIMER, geerInteractie);
        geerTimer.start();
    }

    public function geerInteractie( timerEvent:TimerEvent ):void 
    {
        if ( Math.random() < 0.04 )
        {
            var randomX:Number = Math.random() * 550;
            var vrouwVijand:VrouwVijand = new VrouwVijand( randomX, -40 );
            pattys.push(vrouwVijand);
            addChild(vrouwVijand);
            geer_score.addToValue( 0 );
        }

        gerardJoling.x = mouseX;
        gerardJoling.y = mouseY;

        var i:int = pattys.length - 1;
        var enemy:VrouwVijand;
        var finalScore:Number = getFinalScore();

        while ( i > -1 )
        {
            enemy = pattys[i];
            enemy.dalen();
            if ( gerardJoling.hitTestObject(enemy) ) 
            {
                geerTimer.stop();
                SoundMixer.stopAll();
                GameOverScherm.setFinalScore( finalScore );
                GeerGame.instance.switchScreen( "GameOverScherm" );
                trace (geer_score.currentValue);
            }

            if ( enemy.y > 400 )
            {
                removeChild( enemy );
                pattys.splice( i, 1 );
                geer_score.addToValue( 10 );
                channelScore = noMoreScore.play(0,1);
            }

            if (geer_score.currentValue > 40)
            {
                geerTimer.removeEventListener(TimerEvent.TIMER, geerInteractie);
                GeerGame.instance.switchScreen( "LevelTwee" );
            }

            i = i - 1;
        }

    }
    public function getFinalScore():Number
    {
        return geer_score.currentValue;
    }
}}
这是我遇到的错误,我似乎无法想出如何修复它,并使最终分数出现在游戏屏幕上

C:\Users\Ian-w\Dropbox\game\GeerGame\LevelEen.as, Line 87   1061: Call to a possibly undefined method setFinalScore through a reference with static type Class.
我真的希望有人能在这方面帮助我,我已经被困在这几天了

新网

进行了更改,现在如果我在GameOverScherm类中跟踪(scoreValue)函数setFinalScore,我会得到一个正确分数的响应,但是

    public function setFinalScore( scoreValue:Number ):void
{
    finalScore.text = scoreValue.toString();
    trace(scoreValue)
}
在GameOverScherm屏幕中,动态tekst字段名:finalScore不会更改值

通常我不能发布图片,所以我只发布链接


我做错了什么?我是否需要在将分数输入到字段或其他内容后更新屏幕???

您的代码中有几个错误,请使用以下命令:

GameOverScherm.setFinalScore( finalScore );
要将函数“setFinalScore”用作静态方法,您必须更改类“GameOverScherm”中的一些内容。我不认为你想要什么,我看你有:

public var gameOverScherm:GameOverScherm;
看起来你想创建某种“单例模式”。如果是这样,您需要将此变量设置为静态变量,那么“gameOverScherm”应该设置为类中的某个地方的“gameOverScherm=this”。这样您就可以更改“LevelEen”中的行:

GameOverScherm.GameOverScherm.setFinalScore(finalScore)


根据您的代码(使用或不使用静态方法/变量),有许多方法可以纠正此错误,但您的错误是没有名为“setFinalScore”的静态函数。我建议您看看静态单词的含义以及如何/为什么使用它。

您试图从
GameOverScherm
访问
setFinalScore()
,就好像它是一个公开可见的静态函数一样。由于没有该名称的公共函数可用,因此它返回未定义的函数

这是一篇关于静态函数如何工作以及何时使用它们的好文章

看起来您在
LevelEen
中有一个
gameOverScherm
变量,但尚未创建
gameOverScherm
类的新实例。你可以使用这个变量来实现你想要做的事情。您需要在适当的位置创建一个新的
GameOverScherm
实例,如下所示:

gameOverScherm = new GameOverScherm();
因此,您可以访问其公共功能,如下所示:

gameOverScherm.setFinalScore(finalScore);

非常感谢,我将阅读静态函数并做一些更改!谢谢你的链接,比用谷歌搜索更简单:D和我会把它放在实例中!遇到一个新问题,现在我修复了其他问题:(
gameOverScherm.setFinalScore(finalScore);