JavaScript游戏 - 无法交叉的对象

时间:2017-07-01 04:33:24

标签: javascript oop

我学习JavaScript时有一个项目要做。 这是一个简单的游戏。你必须从画布的底部到顶部。 我想在画布上放一块不能穿过的石头,玩家需要绕过它。 你能帮我解决一下这个问题吗?

这就是我控制播放器的方式

Player.prototype.handleInput = function () {
    var self = this;
    console.log(self);
    document.addEventListener('keyup', function (event) {
        var keyName = event.which || event.keyCode;

        switch (keyName) {
            case true:
                return self.x = 0, self.y = 0;


            case 37:
            case 65:
            case 100:
                return self.x -= 20;

            case 38:
            case 87:
            case 104:
                return self.y -= 20;

            case 39:
            case 68:
            case 102:
                return self.x += 20;

            case 40:
            case 83:
            case 101:
                return self.y += 20;
        }
    })

}

这是摇滚构造函数

Rock = function(){
    this.x = getRandomInt(50, 700);
    this.y = getRandomInt(50, 400);
    this.width = 101;
    this.height = 171;
}

我有一个碰撞检测以及来自MDN网站的内容

function objectCollision(obj1, obj2) {
    var rect1 = obj1;
    var rect2 = obj2;
    if (rect1.x < rect2.x + rect2.width &&
        rect1.x + rect1.width > rect2.x &&
        rect1.y < rect2.y + rect2.height &&
        rect1.height + rect1.y > rect2.y) {
        return true;
    }
    return false;
}

我试图解决不同的方法,但我无法弄清楚。 当玩家从任何一侧击中岩石时,我需要一个解决方案,而不是那个方向不能进一步移动。

谢谢

1 个答案:

答案 0 :(得分:1)

在你的keyup事件处理程序中,尝试使用现有开关周围的类似内容:

    var old_x = self.x;
    var old_y = self.y;
    switch (keyName) {
        ...
    }
    for (var i in obstacles) {
        if (obstacles[i] != self && objectCollision(self, obstacles[i])) {
            self.x = old_x;
            self.y = old_y;
            break;
        }
    }

我假设你有一系列障碍而不仅仅是一块石头。