【问题标题】:Issues with game over screen游戏画面问题
【发布时间】:2013-01-17 15:31:05
【问题描述】:

我的“游戏结束”屏幕有问题。我正在使用课程并且对他们来说相当新。 这是我得到的错误:

TypeError:错误 #1009:无法访问 null 的属性或方法 对象引用。在 DocumentClass/onAvatarDeath() 处 flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchEventFunction() 在 Flash.events::EventDispatcher/dispatchEvent() 在 MethodInfo-31()

这是DocumentClass 中的onAvatarDeath() 方法:

public function onAvatarDeath( avatarEvent:AvatarEvent ):void
{
    var travelScore:Number = playScreen.getTravelScore();
    var coinScore:Number = playScreen.getCoinScore();
    gameOverScreen = new GameOverScreen();
    gameOverScreen.addEventListener( NavigationEvent.RESTART, onRequestRestart );
    gameOverScreen.x = 275;
    gameOverScreen.y = 125;
    gameOverScreen.setTravelScore( travelScore );
    gameOverScreen.setCoinScore( coinScore );
    addChild( gameOverScreen );

    playScreen = null;
}

我的菜单屏幕的工作原理几乎相同,而且工作正常。当我追踪playScreen 时,它是null,这很好。但是当我追踪〜游戏结束〜屏幕时,它不会追踪......有什么帮助吗?我迷路了。

【问题讨论】:

  • 如果playScreennull 那就不行了,因为你试图在上面调用两个方法:getTravelScore()getCoinScore()。因此,这会产生您遇到的错误。
  • 你当然不能在空对象上调用函数!添加检查,例如: if (!playScreen) return;
  • 我还不清楚该怎么做,你能给我举个例子吗?
  • 如果playScreen 为空,那么这就是Flash 抱怨“空对象引用”的原因,因为playScreen.getTravelScore() 正在尝试使用不存在的东西。您需要检查 playScreen 的设置位置以及设置为 null 的位置,并确保在 onAvatarDeath() 运行时它仍然可用。 (也许onAvatarDeath() 不止一次运行,最后一行导致它?)

标签: actionscript-3 flash


【解决方案1】:

查看您的文件后,即使玩家死亡,您的游戏也会继续运行(具体来说,avatarEnterFrame 会一直被调用)。这意味着onAvatarDeath 会一遍又一遍地运行,但是因为您第一次将playScreen 设置为null,所以Flash 在尝试执行getTravelScoregetCoinScore 时找不到它。

我通常有一个像var isGameRunning:Boolean = false; 这样的变量,我会在游戏开始或玩家死亡(或获胜)时保持更新,然后将if (gameRunning) 放在像avatarEnterFrame 这样的所有函数周围。

或者,您可以在玩家死亡时移除avatar 上的ENTER_FRAME 侦听器(但显然记得在玩家重新开始游戏时再次添加它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多