ブロック崩し的なゲームを今作っています。
斜めの壁にボールがぶつかった時の移動量の計算がうまくいきません。
うまくいかないと言うのが、
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ライブラリを使っています。