ブロック崩し的なゲームを今作っています。
斜めの壁にボールがぶつかった時の移動量の計算がうまくいきません。
うまくいかないと言うのが、
1、斜めの壁にぶつかった時にボールが止まる時がある。(傾斜が緩い所で特に)
2、壁にぶつかった後に飛んでいく角度がおかしい
/
/
/
↑
○
上記の場合ぶつかった後は→に行くのが正しいですよね?
なのに 右下に行きます。
弾のクラスです。
void Shot::Action(){ for(int l=0;l<10;l++){ x[0] += vx/10; y[0] += vy/10; //当たり判定 for(i=0;i<MIRRORMAX;i++){ if(mir.used == true){ double D = distance(mir.sx, mir.sy, mir.ex, mir.ey, x[0], y[0]); if(D < 10 && hit == false){ Bound(i); hit = true; } else if(D >= 10)hit = false; } } } for(int k=0;k<9;k++){ x[9-k] = x[8-k]; y[9-k] = y[8-k]; } if(x[9] < -32 || x[9] > 640+32 || y[9] < -32 || y[9] > 480+32)used = false; } void Shot::Bound(int i){ float kata_x = ( mir.ex - mir.sx ); float kata_y = ( mir.ey - mir.sy ); float hou_vx = kata_x; float hou_vy = -kata_y; float sei_x = hou_vx / sqrt( pow(hou_vx, 2) + pow(hou_vy, 2) ); float sei_y = hou_vy / sqrt( pow(hou_vx, 2) + pow(hou_vy, 2) ); float touei = (-vx * sei_x) + (-vy * sei_y); float Px = touei * sei_x; float Py = touei * sei_y; vx = Px; vy = Py; }
http://www5f.biglobe.ne.jp/~kenmo/progr ... turi5.html
参考にさせて頂いているサイトです。
どこがおかしいか教えてください。
環境は
WindowsXP Home
VC++2005
DXライブラリを使っています。