【发布时间】:2013-06-30 04:16:54
【问题描述】:
我需要帮助,因为我想创建一个显示分数的游戏结束屏幕。但是,有一个错误阻止我将分数从 theplayclass.as 转移到 thegameoverclass.as。有没有办法将值传递给另一个影片剪辑而不会导致任何错误。
我参考了这个网站的源代码:http://www.emanueleferonato.com/2008/12/17/designing-the-structure-of-a-flash-game-as3-version/
这是错误
C:\Users\xxx\Downloads\Migrate\test\theplayclass.as,第 54 行,第 41 列 1067:将类型为 theplayclass 的值隐式强制转换为不相关的类型 main。
main.as
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class main extends MovieClip
{
public var playClass:theplayclass;
public var gameOverClass:thegameoverclass;
public function main()
{
showWin();
}
public function showWin()
{
playClass = new theplayclass(this);
addChild(playClass);
}
public function showGameOver()
{
gameOverClass = new thegameoverclass(this);
addChild(gameOverClass);
removeChild(playClass);
playClass = null;
}
}
}
playclass.as
package
{
import flash.display.MovieClip;
import flash.events.*;
public class theplayclass extends MovieClip
{
private var mainClass:main;
var gameScore:Number;
var gameOverScore:thegameoverclass;
public function theplayclass(passedClass:main)
{
mainClass = passedClass;
scoreText.text ="0";
gameScore = 0;
win.addEventListener(MouseEvent.CLICK, showwinFunction);
next.addEventListener(MouseEvent.CLICK, showgameoverFunction);
addEventListener(Event.ADDED_TO_STAGE, addToStage);
addEventListener(Event.ENTER_FRAME, changeScore);
}
public function addToStage(e:Event):void
{
this.x = 0;
this.y = 0;
}
private function showwinFunction(e:MouseEvent):void
{
gameScore+=50;
}
private function changeScore(e:Event):void
{
scoreText.text =""+gameScore;
}
public function showgameoverFunction(e:MouseEvent)
{
mainClass.showGameOver();
gameOverScore = new thegameoverclass(this);
gameOverScore.setTextScore(gameScore);
}
}
}
thegameoverclass.as
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.*;
public class thegameoverclass extends MovieClip
{
var mainClass:main;
var scorePoints:Number;
public function thegameoverclass(passedClass:main)
{
mainClass = passedClass;
finalScore.text = "test";
}
public function setTextScore(textToSet:Number)
{
finalScore.text = ""+scorePoints;
}
}
}
【问题讨论】:
-
thegameoverclass 的 mainClass 没有被使用,为什么不移除呢?或者 theplayclass 包含一个变量 mainClass,你想将它用于 thegameover 构造函数吗?
-
@Pan 我想使用gameoverclass构造函数。 playclass 下的变量 mainClass 无法删除,因为我需要将 main 中的方法传递给 playclass。无论如何,在我从gameoverclass中删除mainClass并删除gameoverclass和playerclass中的所有参数后,我有错误#1009,说它无法访问空对象引用的属性或方法。
-
Pan 有点指出了原始错误的原因,但要说清楚:在 PlayerClass 中,您将游戏显示在屏幕上:
gameOverScore = new thegameoverclass(this);但应该是这样:gameOverScore = new thegameoverclass(mainClass);.错误表明它无法将您的 PlayerClass 转换为 Main 类。 -
@SunilD。谢谢它帮助!现在下一个挑战是如何设置确保游戏结束类显示来自玩家类的分数,因为当我播放电影剪辑时,它在游戏结束场景中显示 NaN。
标签: actionscript-3 oop reference pass-by-reference coercion