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

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

    }

  }
4

1 に答える 1

1

最新の問題 (ゲーム オーバー画面のスコアに NaN が表示される) については、ゲームが終了したときにコードが何を行っているかを確認してください。

  • Player クラスが呼び出すMain.showGameOver()
  • Player クラスが新しいゲーム オーバー スクリーンを作成する
  • プレーヤー クラスは、新しいゲーム オーバー画面で最終スコアを設定します

Main.showGameOver() では:

  • 新しいゲーム オーバー スクリーンを作成してステージに追加しますが、これは Player クラスのゲーム オーバー スクリーンとは異なるゲーム オーバー スクリーンになります。
  • この新しいゲーム オーバー画面には、最終的なスコアが設定されていません (したがって、スコアは ですNaN) 。

これに対処する 1 つの方法:

  • Player クラスからゲーム オーバー画面へのすべての参照を削除します。
  • showGameOver()スコアを受け入れるようにメインのメソッドを変更します
  • を使用して最終スコアを渡すように Player クラスを変更します。Main.showGameOver()
  • メインのshowGameOver()メソッドを変更して、ゲーム オーバー画面でスコアを設定するようにします。

変更したコードは次のようになります。

プレイヤークラス:

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 に答える