c ++ - 2d碰撞检测问题

时间:2014-12-02 02:37:46

标签: c++ collision-detection

我正在研究一个基本的方形碰撞检测系统,该系统可以检查玩家和一堆瓷砖。问题在于,因为它从最左边的最左边的瓷砖(在舞台中)到最右边的瓷砖开始通过拼贴,所以它先检查与玩家上方和左边的拼贴之前的碰撞。因此,如果您向左和向上移动靠墙,则会卡住,因为它会纠正上方磁贴的玩家Y位置,然后将磁贴的X位置调整到左侧(或右侧)。只是想知道如何解决这个问题。碰撞代码如下:

for(std::vector<Tile*>::iterator tile = tiles.begin(); tile != tiles.end(); tile++) {
    if((*tile)->tileType == Tile::TILE_WALL) {
        float cx = character->getPosition().x;
        float cy = character->getPosition().y;
        float chw = character->halfWidth();
        float chh = character->halfHeight();
        float thw = Tile::TILE_WIDTH/2;
        float thh = Tile::TILE_HEIGHT/2;
        float dx = cx - ((*tile)->getPosition().x);
        float dy = cy - ((*tile)->getPosition().y);
        if(fabsf(dy) < chh + thh) {
            if(fabsf(dx) < chw + thw) {
                float ox = chw + thw - fabsf(dx);
                float oy = chh + thh - fabsf(dy);
                if(ox > oy) {
                    if(dy > 0) {
                        character->setPosition(cx, cy + oy);
                    }
                    else {
                        character->setPosition(cx, cy - oy);
                    }
                }
                else {
                    if(dx > 0) {
                        character->setPosition(cx + ox, cy);
                    }
                    else {
                        character->setPosition(cx - ox, cy);
                    }
                }
            }
        }
    }
}

此外,对此的任何优化都将受到赞赏。

0 个答案:

没有答案