Actionscript 3 1067:将类型为theplayclass的值隐式强制为不相关的main类型

Actionscript 3 1067:将类型为theplayclass的值隐式强制为不相关的main类型,actionscript-3,oop,reference,pass-by-reference,coercion,Actionscript 3,Oop,Reference,Pass By Reference,Coercion,我需要帮助,因为我想创建一个游戏屏幕,显示分数。但是,有一个错误阻止我将分数从PlayClass.as传输到GameOverClass.as。有没有方法可以将一个值传递给另一个movieclip而不会导致任何错误 我参考了本网站的源代码: 这是错误 C:\Users\xxx\Downloads\Migrate\test\theplayclass.as,第54行,第41列1067:将theplayclass类型的值隐式强制到不相关的main类型 梅因 package { import

我需要帮助,因为我想创建一个游戏屏幕,显示分数。但是,有一个错误阻止我将分数从PlayClass.as传输到GameOverClass.as。有没有方法可以将一个值传递给另一个movieclip而不会导致任何错误

我参考了本网站的源代码:

这是错误

C:\Users\xxx\Downloads\Migrate\test\theplayclass.as,第54行,第41列1067:将theplayclass类型的值隐式强制到不相关的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;
    }
    }
}
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);

    }

    }
 }
游戏是超类的

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

    }

  }

关于您的最新问题(通过屏幕查看游戏中的NaN分数),请查看您的代码在游戏结束时所做的操作:

  • Player类调用
    Main.showGameOver()
  • 玩家类在屏幕上制作新游戏
  • 玩家类在屏幕上设置新游戏的最终分数
在Main.showGameOver()中:

  • 你在屏幕上制作了一个新游戏并将其添加到舞台上,但现在这是一个不同于玩家类的屏幕上游戏
  • 这个屏幕上的新游戏从未设置过最终分数(因此分数为
    NaN
解决这一问题的一种方法是:

  • 从您的玩家类中删除对游戏的所有引用
  • 修改main中的
    showGameOver()
    方法,使其接受分数
  • 使用
    Main.showGameOver()
  • 修改Main中的
    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;
}

关于您的最新问题(通过屏幕查看游戏中的NaN分数),请查看您的代码在游戏结束时所做的操作:

  • Player类调用
    Main.showGameOver()
  • 玩家类在屏幕上制作新游戏
  • 玩家类在屏幕上设置新游戏的最终分数
在Main.showGameOver()中:

  • 你在屏幕上制作了一个新游戏并将其添加到舞台上,但现在这是一个不同于玩家类的屏幕上游戏
  • 这个屏幕上的新游戏从未设置过最终分数(因此分数为
    NaN
解决这一问题的一种方法是:

  • 从您的玩家类中删除对游戏的所有引用
  • 修改main中的
    showGameOver()
    方法,使其接受分数
  • 使用
    Main.showGameOver()
  • 修改Main中的
    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;
}

thegameoverclass的主类没有被使用,为什么不删除它呢?或者theplayclass包含一个变量mainClass,您想将其用于thegameover构造函数吗?@Pan我想使用GameOverClass构造函数。无法删除PlayClass下的变量mainClass,因为我需要将一个方法从main传递给PlayClass。无论如何,在我从GameOverClass中删除Main类并删除GameOverClass和PlayerClass中的所有参数后,我出现了错误#1009,表示它无法访问null对象引用的属性或方法。Pan指出了原始错误的原因,但要明确一点:在PlayerClass中,您可以通过以下内容在屏幕上显示游戏:
gameOverScore=newthegameoverClass(this)但应该是这样:
gameOverScore=newthegameoverclass(mainClass)。错误是无法将PlayerClass转换为主类。@SunilD。谢谢,这很有帮助!现在,下一个挑战是,如何设置确保GameOverclass显示PlayerClass中的分数,因为当我播放电影剪辑时,它会在gameover场景中显示NaN。没有使用GameOverclass的主类,为什么不删除它?或者theplayclass包含一个变量mainClass,您想将其用于thegameover构造函数吗?@Pan我想使用GameOverClass构造函数。无法删除PlayClass下的变量mainClass,因为我需要将一个方法从main传递给PlayClass。无论如何,在我从GameOverClass中删除Main类并删除GameOverClass和PlayerClass中的所有参数后,我出现了错误#1009,表示它无法访问null对象引用的属性或方法。Pan指出了原始错误的原因,但要明确一点:在PlayerClass中,您可以通过以下内容在屏幕上显示游戏:
gameOverScore=newthegameoverClass(this)但应该是这样:
gameOverScore=newthegameoverclass(mainClass)。错误是无法将PlayerClass转换为主类。@SunilD。谢谢,这很有帮助!现在,下一个挑战是,如何放置“确保gameover类显示玩家类的分数”,因为当我播放电影剪辑时,它会显示gameover场景中的NaN。谢谢!它是有效的:)我确实按照你的步骤做了,但是我通过将所有参数从字符串改为整数进行了一些编辑。接下来,我在gameoverclass.as中更改了名为setTextScore的方法,以接受参数。无论如何,非常感谢你的帮助。我从你那里学到了很多。顺便问一下,是否可以让玩家将游戏分数发送到GameOverclass,而不是将分数发送到主类和GameOverclass?谢谢!它是有效的:)我确实按照你的步骤做了,但是我通过将所有参数从字符串改为整数进行了一些编辑。接下来,我在gameoverclass.as中更改了名为setTextScore的方法,以接受参数。无论如何,非常感谢你的帮助。我从你那里学到了很多。顺便说一句,是我吗