我正在研究一个基本的方形碰撞检测系统,该系统可以检查玩家和一堆瓷砖。问题在于,因为它从最左边的最左边的瓷砖(在舞台中)到最右边的瓷砖开始通过拼贴,所以它先检查与玩家上方和左边的拼贴之前的碰撞。因此,如果您向左和向上移动靠墙,则会卡住,因为它会纠正上方磁贴的玩家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);
}
}
}
}
}
}
此外,对此的任何优化都将受到赞赏。