ブロック崩しをつくろうと思ってて、壁に当たったときに跳ね返るのは出来たんですが
ボールが操作しているバーに当たったときに上に跳ね返る
ということができません。
どのような考え方をすればいいでしょうか?
ブロック崩し
Re:ブロック崩し
判定に関するところで以下のような感じです
ボールは画像を使用してます(40×40)
ボールの座標は(Bullet_t.x,Bullet_t.y)
バーはDrawBox(x , 400, x+100, 410, GetColor(255,255,255), TRUE)
//画面左端もしくは画面右端
if(Bullet_t.x<0 || (Bullet_t.x+40)>640)
if(Bullet_t.angle <PI)
Bullet_t.angle = PI-Bullet_t.angle;
else if(Bullet_t.angle<2*PI)
Bullet_t.angle = 3*PI-Bullet_t.angle;
//画面上に当たったとき
if(Bullet_t.y<0)
Bullet_t.angle = 2*PI-Bullet_t.angle;
//ここから間違っているらしい
if(!(x<Bullet_t.x || Bullet_t.x>x+100)){ //バーのx座標はxからx+100まで
if(Bullet_t.y==400) //バーのy座標
Bullet_t.angle= 2*PI -Bullet_t.angle;
ボールは画像を使用してます(40×40)
ボールの座標は(Bullet_t.x,Bullet_t.y)
バーはDrawBox(x , 400, x+100, 410, GetColor(255,255,255), TRUE)
//画面左端もしくは画面右端
if(Bullet_t.x<0 || (Bullet_t.x+40)>640)
if(Bullet_t.angle <PI)
Bullet_t.angle = PI-Bullet_t.angle;
else if(Bullet_t.angle<2*PI)
Bullet_t.angle = 3*PI-Bullet_t.angle;
//画面上に当たったとき
if(Bullet_t.y<0)
Bullet_t.angle = 2*PI-Bullet_t.angle;
//ここから間違っているらしい
if(!(x<Bullet_t.x || Bullet_t.x>x+100)){ //バーのx座標はxからx+100まで
if(Bullet_t.y==400) //バーのy座標
Bullet_t.angle= 2*PI -Bullet_t.angle;
Re:ブロック崩し
パソコンで実行してみました。
これで、いいと思います。
あと、PIの定義を3.14159265…か、180にするかで迷いました
なので、PIを180に置換しました。
//画面左端もしくは画面右端
if(Bullet_t.x<0 || (Bullet_t.x+40)>640)
if(Bullet_t.angle <180)
Bullet_t.angle = 180-Bullet_t.angle;
else if(Bullet_t.angle<2*180)
Bullet_t.angle = 3*180-Bullet_t.angle;
//画面上に当たったとき
if(Bullet_t.y<0)
Bullet_t.angle = 2*180-Bullet_t.angle;
//ここから間違っているらしい
if((x<Bullet_t.x && Bullet_t.x+40<x+100)){//バーのx座標はxからx+100まで
if(Bullet_t.y>400) //バーのy座標
Bullet_t.angle= 2*180 -Bullet_t.angle;
}
これで、いいと思います。
あと、PIの定義を3.14159265…か、180にするかで迷いました
なので、PIを180に置換しました。
//画面左端もしくは画面右端
if(Bullet_t.x<0 || (Bullet_t.x+40)>640)
if(Bullet_t.angle <180)
Bullet_t.angle = 180-Bullet_t.angle;
else if(Bullet_t.angle<2*180)
Bullet_t.angle = 3*180-Bullet_t.angle;
//画面上に当たったとき
if(Bullet_t.y<0)
Bullet_t.angle = 2*180-Bullet_t.angle;
//ここから間違っているらしい
if((x<Bullet_t.x && Bullet_t.x+40<x+100)){//バーのx座標はxからx+100まで
if(Bullet_t.y>400) //バーのy座標
Bullet_t.angle= 2*180 -Bullet_t.angle;
}