ActionScript 3 - 阵列问题中对象的碰撞检测

ActionScript 3 - Collision detection of objects in an array issue

我正在开发一款小型 Flash 游戏,目前正在尝试实现最多 4 名玩家的多人游戏。虽然 1 个玩家的碰撞检测工作完美,但当添加更多玩家时 只有最后一个玩家可以与其他对象发生碰撞

使用跟踪语句我发现从主要 class return 调用有问题玩家的 x 和 y 坐标作为初始 x 和 y 位置 而不是当前坐标 (trace(players[0].x + "/" + players[0].y);),而从播放器中调用它们时 class (trace(this.x + "/" + this.y);) 总是给出正确的值。

最后一个玩家总是 return 两个 class 中的正确坐标。下面是主要框架 class.

public class main extends MovieClip {

    public var collisionObject: Array = new Array(14);
    public var players: Array = new Array();
    private var noOfPlayers = 2;

    public function main() {
        for (var i = 0; i < noOfPlayers; i++) {
            setupPlayer(i);
            stage.addChild(players[i]);
        }
        setupCollisionObject();
        stage.addEventListener(Event.ENTER_FRAME, checkForCollision);
    }

    private function setupCollisionObject() {
      /* Determines positions of and spawns objects */ 
    }

    private function setupPlayer(playerNo) {
        switch (playerNo) {
            case 3:
                players[3] = new player(1000, 576, 180, 104, 100, 102);
            case 2:
                players[2] = new player(24, 576, 0, 73, 74, 76);
            case 1:
                players[1] = new player(1000, 384, 180, 38, 37, 39);
            case 0:
                players[0] = new player(24, 384, 0, 87, 65, 68);
        }
    }

    public function checkForCollision(e: Event) {

        trace("x: "+players[0].x+" y: "+players[0].y);
        trace("x: "+players[1].x+" y: "+players[1].y);

        for (var i in players) {
            for (var j in collisionObject) {
                if (players[i].hitTestObject(collisionObject[j])) {
                    //damage player
                }
            }
        }
    }
}

我不知道为什么会这样。

您在 setupPlayer() 的 switch-case 中缺少 break;,这会导致所有玩家在每次调用 setupPlayers(i) 期间重新初始化,但最后一个玩家除外。

private function setupPlayer(playerNo) {
    switch (playerNo) {
        case 3:
            players[3] = new player(1000, 576, 180, 104, 100, 102);
            break;
        case 2:
            players[2] = new player(24, 576, 0, 73, 74, 76);
            break;
        case 1:
            players[1] = new player(1000, 384, 180, 38, 37, 39);
            break;
        case 0:
            players[0] = new player(24, 384, 0, 87, 65, 68);
            break;
    }
}