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