1

我需要帮助,因为我想创建一个显示分数的游戏结束屏幕。但是,有一个错误阻止我将分数从 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:将 playclass 类型的值隐式强制转换为不相关的 main 类型。

主文件

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

游戏类.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);

    }

    }
 }

游戏结束类.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;
    }

    }

  }
4

1 回答 1

1

关于您的最新问题(在游戏结束屏幕上看到 NaN 的分数),请查看游戏结束时您的代码在做什么:

  • Player 类调用Main.showGameOver()
  • 玩家类在屏幕上制作了一个新游戏
  • 玩家等级在新游戏结束屏幕上设置最终分数

在 Main.showGameOver() 中:

  • 您制作了一个新的游戏结束屏幕并将其添加到舞台,但现在这是一个与您的 Player 类中的游戏不同的游戏结束屏幕
  • 这个新的游戏结束屏幕从未设置过最终得分(因此得分为NaN

解决此问题的一种方法:

  • 从您的 Player 类中删除所有对游戏结束屏幕的引用
  • 修改showGameOver()main 中的方法,使其接受分数
  • 修改 Player 类,以便通过最终分数使用Main.showGameOver()
  • 修改showGameOver()Main 中的方法,使其在游戏结束屏幕上设置分数

您修改后的代码可能如下所示:

球员等级:

public function showgameoverFunction(e:MouseEvent)
{
    mainClass.showGameOver(gameScore.toString());
}

主类:

public function showGameOver(finalScore:String)
{
    gameOverClass = new thegameoverclass(this);
    gameOverClass.setScoreText(finalScore);
    addChild(gameOverClass);
    removeChild(playClass);
    playClass = null;
}
于 2013-07-01T17:36:00.477 回答