ページ 1 / 1
ブロック崩し
Posted: 2010年6月25日(金) 15:43
by kei
ブロック崩しをつくろうと思ってて、壁に当たったときに跳ね返るのは出来たんですが
ボールが操作しているバーに当たったときに上に跳ね返る
ということができません。
どのような考え方をすればいいでしょうか?
Re:ブロック崩し
Posted: 2010年6月25日(金) 15:52
by シエル
壁に当たったときの判定をそのままバーに置き換えるだけです。
自分ではどの辺まで分かりますか?できるところまででいいのでコードを貼って下さい。
Re:ブロック崩し
Posted: 2010年6月25日(金) 16:01
by kei
判定に関するところで以下のような感じです
ボールは画像を使用してます(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:ブロック崩し
Posted: 2010年6月25日(金) 16:33
by シエル
ざっと見ただけですが、
↓の判定を、
if(!(x<Bullet_t.x || Bullet_t.x>x+100)){ //バーのx座標はxからx+100まで
↓
if(x<Bullet_t.x && Bullet_t.x<x+100)にして、
if(Bullet_t.y==400) //バーのy座標
は、
if(Bullet_t.y>400)
にしたらうまくいきませんか?

Re:ブロック崩し
Posted: 2010年6月25日(金) 16:40
by kei
変えてやってみたんですが、ボールがバーをすり抜けていくんです。
うまくいかないです(TT)
Re:ブロック崩し
Posted: 2010年6月25日(金) 17:08
by KEYONN_
パソコンで実行してみました。
これで、いいと思います。
あと、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;
}
Re:ブロック崩し
Posted: 2010年6月25日(金) 17:17
by kei
どこが変わったのかわからないですが、いけました!!
シエルさん,TKOZさんありがとうございました。