私が書いているGBAゲームの衝突検出と処理を行っていますが、処理部分を関数に入れる際に問題が発生しています。メンバー変数 (この場合は ) の値を変更しようとしていますがPlayer.global_x
、オブジェクトを関数に渡すと、これが機能しません。関連するコードは次のとおりです。
main.cpp
bool CheckCollision(sprite obj1, sprite obj2){
int obj1_top = obj1.global_y;
int obj1_bottom = obj1.global_y + (obj1.height-1);
int obj1_left = obj1.global_x;
int obj1_right = obj1.global_x + (obj1.width-1);
int obj2_top = obj2.global_y;
int obj2_bottom = obj2.global_y + (obj2.height-1);
int obj2_left = obj2.global_x;
int obj2_right = obj2.global_x + (obj2.width-1);
if(obj1_right < obj2_left){ // if obj1 is left of obj2
return false;
}
if(obj1_left > obj2_right){ // if obj1 is right of obj2
return false;
}
if(obj1_bottom < obj2_top){ // if obj1 is above obj2
return false;
}
if(obj1_top > obj2_bottom){ // if obj1 is below obj2
return false;
}
return true;
}
void HandleCollision(sprite obj1, sprite obj2){
if(obj1.direction == RIGHT){
Player.global_x -= (obj1.global_x + obj1.width) - obj2.global_x; // This works but is not modular
obj1.global_x -= (obj1.global_x + obj1.width) - obj2.global_x; // This does not work
}
}
void CheckAllPossibleCollisions(){
bool collision = false;
for(int i=0; i<(WallsVector.size()); i++){
collision = CheckCollision(Player, WallsVector.at(i));
if(collision==true){
// This piece of code works, but would incur repetition of code for each different type of game object
/*if(Player.direction == RIGHT){
Player.global_x -= ((Player.global_x+Player.width) - WallsVector.at(i).global_x);
}*/
HandleCollision(Player, WallsVector.at(i));
}
}
}
オブジェクトを渡すときは関数は正常に機能しますが、変数を変更するときCheckCollision()
は機能しません。HandleCollision()
これに役立つコメントをいただければ幸いです。ありがとうございます。