【问题标题】:Actionscript 3.0 platformer gameActionscript 3.0 平台游戏
【发布时间】:2014-06-02 00:11:40
【问题描述】:

我有一个带有以下代码的 Flash 游戏 (http://pastie.org/9248528)

当我运行它时,玩家只是跌倒,并且在撞到平台时不会停止。 我尝试调试它,但 moveCharacter 的计时器出现错误,但我不知道这是否是主要问题。

我将播放器放在墙内并使用断点对其进行调试,但它没有检测到播放器在墙内,跳过将其移动到墙外。

有人对我的代码有什么问题有任何想法吗?

【问题讨论】:

  • 是的,我也不喜欢使用 Flash,它只是我正在做的任务所必需的。

标签: actionscript-3 flash


【解决方案1】:

问题出在这段代码中:

// Check if character falls off any platform
    for (var i:int = 0; i < platform.length; i++) {
        if (player.x < platform[i].x || player.x > platform[i].x + platform[i].width) {
            onPlatform = false;
        }
    }

由于玩家不能同时同时在每个平台上,他的 x 位置几乎可以保证超出至少 1 个平台的范围,这会将 onPlatform 设置为 false。相反,您需要保留对播放器所在平台的引用,如下所示:

var lastPlatform:Sprite; //holds reference to last platform player was on
// Function to move character
function moveCharacter(evt:TimerEvent):void {
    ....
    // Check if character falls off the platform he was last on
    if (lastPlatform != null && (player.x < lastPlatform.x || player.x > lastPlatform.x + lastPlatform.width)) {
        onPlatform = false;
    }
}
function detectCollisions():void {
    // Check for collisions with platforms 
    for (var p:int = 0; p < platform.length; p++) {
        // Adjust character to platform level if with landing depth of the platform
        if (!onPlatform && player.hitTestObject(platform[p]) && lastPosY < platform[p].y) {
            lastPlatform = platform[p]; //save reference
            player.y = platform[p].y;
            jumping = false;
            onPlatform = true;
            dy = 0;
        // Prevent character from dropping sideways into platforms
        } else if (!onPlatform && player.hitTestObject(platform[p])) {
            player.x = lastPosX;
        }
    }
    .....
}

这应该会更好,尽管它仍然不是最面向对象的方法。希望这会有所帮助!

【讨论】:

  • +1 我认为 Gigggas 在这方面付出了比 op 更多的努力
  • 谢谢,现在他不会从平台上掉下来,但他不会跳。
  • 实际上他只停留在 922 因为 if player.x > 922 代码。他也跌落其他平台
  • 我稍微编辑了 detectCollision() 代码,这样它就不会尝试检查玩家是否与平台发生碰撞,如果它已经知道他在平台上。这至少可以解决不能跳跃的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
相关资源
最近更新 更多