Oop 在类之间传递变量并存储变量Actionscript 3.0
我想将变量得分从GameScreen.as转移到gamesoverscreen.as 来自GameOverScreen.as的方法称为getScore(score:Number),它不会更新来自GameOverScreen.as的构造函数的finalScore 是否有办法确保最终核心的值与游戏屏幕中的得分的值相同?(P.S.我试着找到答案,但没有用。) 代码如下: GameScreen.asOop 在类之间传递变量并存储变量Actionscript 3.0,oop,function,variables,actionscript,constructor,Oop,Function,Variables,Actionscript,Constructor,我想将变量得分从GameScreen.as转移到gamesoverscreen.as 来自GameOverScreen.as的方法称为getScore(score:Number),它不会更新来自GameOverScreen.as的构造函数的finalScore 是否有办法确保最终核心的值与游戏屏幕中的得分的值相同?(P.S.我试着找到答案,但没有用。) 代码如下: GameScreen.as package { import flash.display.MovieClip; import f
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.net.SharedObject;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.text.*;
/**
* ...
* @author xxxx
*/
public class GameScreen extends MovieClip
{
private var mainClass:main;
private var enemy:Enemy;
private var timer:Timer;
public var scorePoints:Number;
public var gameOverScreen:GameOverScreen;
private var debugValue:Number;
public function GameScreen(passedClass:main)
{
mainClass = passedClass;
gameOverScreen = new GameOverScreen();
enemy = new Enemy();
addChild(enemy);
debugValue = 1;
scorePoints = 0;
addEventListener(Event.ADDED_TO_STAGE, onAdd);
ClickToWinButton.addEventListener(MouseEvent.CLICK, clickToWin);
}
private function clickToWin(e:MouseEvent):void
{
scorePoints += 50;
}
private function onAdd(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAdd);
init();
}
private function init():void
{
addEventListener(Event.ENTER_FRAME, gameScreenProgress);
}
public function gameScreenProgress(e:Event):void
{
ScoreText.text = "Score: " + scorePoints;
if (enemy.hitTestPoint(mouseX, mouseY, true))
{
mainClass.showGameOver();
gameOverScreen.getScore(scorePoints);
enemy.removeEnemy();
}
}
}
}
GameOverScreen.as
package
{
import flash.events.Event;
import flash.display.MovieClip;
import flash.net.SharedObject;
import flash.text.*;
/**
* ...
* @author xxxx
*/
public class GameOverScreen extends MovieClip
{
private var mainClass:main;
private var gameScreen:GameScreen;
public var finalScore:Number;
public function GameOverScreen()
{
ScoreText.text = "" + finalScore;
}
public function getScore(score:Number)
{
finalScore = score;
trace(finalScore);
}
}
}
问题似乎是您的
GameOverScreen
只更新构造函数中的ScoreText.text
。构造函数仅在创建GameOverScreen
时执行
稍后,在创建了GameOverScreen
之后,调用getScore()
方法并通过最终分数。但是getScore()
方法所做的就是更新finalScore
变量它实际上不会用实际分数更新文本字段
您可能应该做的是从构造函数中删除这一行:
ScoreText.text = "" + finalScore;
并将其放入您的getScore()
方法中。我还将考虑改名<代码> GETSCORE()<代码> >代码> SETCOMSEEL()/<代码>,因为它正在设置分数,而不是检索它…< /P>
public function setScore(score:Number)
{
finalScore = score;
trace(finalScore);
ScoreText.text = "" + finalScore;
}
它无法更新finalScore,并给出NAN,因为我将ScoreText.text放在了游戏屏幕上的movieclip中。有没有办法改变分数?我假设正在将setScore(finalScore)放入构造函数中,但它出现了错误。您可以为主类添加代码吗?我不确定我是否了解你的评论。如果我可以通过电子邮件或dropbox将代码和fla发送给你会更好吗?@Minelava别忘了返回finalScore,然后在你的另一封邮件中,你可以写“GameScreen.finalScore”,所以“返回finalScore”和“GameScreen.finalScore”。如果我写GameScreen.finalScore,我会有TypeError:Error#1009:无法访问null对象引用的属性或方法。在游戏屏幕上()在游戏屏幕上()在主屏幕上()在SplashScreen/debugButtonClick()上/showGame()在SplashScreen/debugButtonClick()上