Обнаружение столкновений холста Javascript

Я создаю игру на Javascript, используя холст, который требует обнаружения столкновений. В этом случае, если спрайт игрока попадает в поле, игрок не должен проходить через это поле.

У меня есть глобальный массив под названием blockList , который содержит все блоки, отрисовываемые на холсте. Это выглядит так:

var blockList = [[50, 400, 100, 100]];

И они рисуются на холсте следующим образом:

c.fillRect(blockList[0][0], blockList[0][1], blockList[0][2], blockList[0][3]);

У меня также есть объект игрока, у которого есть метод обновления и метод рисования. Обновление устанавливает положение игрока на основе ввода с клавиатуры и т. Д., А рисование используется основным игровым циклом для рисования игрока на холсте. Игрок рисуется следующим образом:

this.draw = function(timestamp) {
        if(this.state == "idle") {
            c.drawImage(this.idleSprite, this.idleSprite.frameWidth * this.idleSprite.frameCount, 0, this.idleSprite.frameWidth, this.idleSprite.frameHeight, this.xpos, this.ypos, this.idleSprite.frameWidth, this.idleSprite.frameHeight);
            if(timestamp - this.lastDraw > this.idleSprite.updateInterval) {
                this.lastDraw = timestamp;
                if(this.idleSprite.frameCount < this.idleSprite.frames - 1) { this.idleSprite.frameCount++; } else { this.idleSprite.frameCount = 0; }
            }
        } else if(this.state == "running") {
            var height = 0;
            if(this.facing == "left") { height = 37; }
            c.drawImage(this.runningSprite, this.runningSprite.frameWidth * this.runningSprite.frameCount, height, this.runningSprite.frameWidth, this.runningSprite.frameHeight, this.xpos, this.ypos, this.runningSprite.frameWidth, this.runningSprite.frameHeight);
            if(timestamp - this.lastDraw > this.runningSprite.updateInterval) {
                this.lastDraw = timestamp;
                if(this.runningSprite.frameCount < this.runningSprite.frames - 1) { this.runningSprite.frameCount++; } else { this.runningSprite.frameCount = 0; }
            }
        }
    }

Теперь у игрока есть определенные свойства: player.xpos , player.ypos , player.width , player.height . Такие же свойства существуют и для блоков. Итак, у меня есть все необходимое для обнаружения столкновений, я просто не знаю, как это сделать. Я пробовал делать такие вещи, как:

if(player.x > blockList[0][0] && player.y > blockList[0][1])

, но он далек от совершенства или игры.

Кто-нибудь знает простой метод или функцию, способную возвращать истину или ложь в зависимости от того, сталкиваются ли два объекта?

7
задан James Dawson 5 November 2011 в 01:35
поделиться