我試圖做一個成熟的遊戲在C++和我進行了塊的矢量, 和我簡單地遍歷向量和檢查單獨的碰撞:2D Box Collisions - 我做錯了什麼? (C++)
//Pseudo code
class Block{
...int x
...int y
...int width
...int height
};
class Player{
int x
int y
int width
int height
int hsp //horizontal speed
int vsp //vertical speed
int facing //0 = no direction, -1 = left, 1 = right
...
void loop()
{
if(keyboard_pressed(key_left) { x-=hsp; facing = -1;}
if(keyboard_pressed(key_right) {x+=hsp; facing = 1;}
if(keyboard_pressed(key_up) {y-=vsp;}
if(keyboard_pressed(key_down) {y+=vsp;}
if(keyboard_released(key_left | key_right) {facing = 0;}
for(int i = 0; i < blocks.size(); i++)
{
Block b = blocks.at(i);
check_Collision(b);
}
}
};
,你可以看,我的播放器根據hsp和vsp簡單地移動。夠簡單。 我的問題的主要部分是在check_Collision()。首先,我檢查玩家 是否位於街區頂部,如果他是,讓他留在那裏。 然後我檢查玩家是否在街區的兩側。 但由於某種原因有問題。由於某種原因,當我在頂部時, 他停留在頂部,但他被轉移到左側。
我真的不知道該去哪裏。 下面的代碼只對頂部和左側的檢查:
check_Collision(){
///////////////////////////////////
var myLeft, myRight, myTop, myBot;
var bLeft, bRight, bTop, bBot;
myLeft = x;
myRight = x + width;
myTop = y;
myBot = y + height;
/////////////////////
bLeft = b.x;
bRight = b.x + b.width;
bTop = b.y;
bBot = b.y + b.height;
//////////////////////////////////
//Check if we are at the top
if(myBot + vsp > bTop+1){
y = bTop - height;
}
//Check if we are at the sides
if(myBot > bTop+2){
if(myRight + hsp > bLeft)
{
x = bLeft - width;
}
}
}
如果任何人都可以點我到二維盒碰撞一些教程,將是巨大的。