簡體   English   中英

碰撞檢測問題或我的邏輯

[英]Collision detection issue or my logic

我使用jQuery / HTML5 Canvas和一個瓦片地圖算法創建了一個小動作原型。 我的問題是碰撞是奇怪的。 我會解釋,如果我向左和向右移動,則檢測到碰撞並停止運動,如果我上下移動則會發生同樣的情況。 如果我向左和向右移動(發生碰撞)那么當我在左右碰撞后上下移動時,上下碰撞不再成立。

這是我的JSFiddle

這是我檢測和移動的片段

            if (keydown == UP) {
                if (!hasCollided(pX, pY - v, mX, mY)) pY -= v;
                keydown = null;
            } else if (keydown == DOWN) {
                if (!hasCollided(pX, pY + v, mX, mY)) pY += v;
                keydown = null;
            } else if (keydown == LEFT) {
                if (!hasCollided(pX - v, pY, mX, mY)) pX -= v;
                keydown = null;
            } else if (keydown == RIGHT) {
                if (!hasCollided(pX + v, pY, mX, mY)) pX += v;
                keydown = null;
            }

任何有關我的邏輯的幫助將非常感激。 提前致謝。

這里亞去! 它並沒有太大的不同。 大多數情況下,您檢查過每次檢查瓷磚是否有碰撞時都移動了播放器,因此如果至少有一個已檢查的磁貼沒有碰撞,則無論如何都會移動播放器。

這樣做:

var desPosX = 0;
    var desPosY = 0;
    if (keydown == UP) {
        desPosY = -v;
    } else if (keydown == DOWN) {
        desPosY = v;
    }
    if (keydown == LEFT) {
        desPosX = -v;
    } else if (keydown == RIGHT) {
        desPosX = v;
    }
    var collided = false;
    if(!gliding)
        keydown = null;
    for (var y = minY; y < maxY; y++) {
        for (var x = minX; x < maxX; x++) {
            if (map[y][x] == 1) {
                mX = x * 32;
                mY = y * 32;
            }

            if (hasCollided(desPosX+pX, desPosY+pY, mX, mY)) {
                collided = true;
            }
        }
    }
    if (!collided) {
        pX += desPosX;
        pY += desPosY;
    }

玩得開心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM