ページ 11

跳ね返りの処理について

Posted: 2011年10月27日(木) 18:16
by 古新
今、かなり昔に作られた「ポン」を縦方向に持ってきたようなゲームを作っています。

プレイヤー(パッド)の動きはすでに実装しています。また、ボールの動きはいわゆる三角関数で実装しました。
あとは境界線までいったら跳ね返るようにコードを書けばいいのですが、まったく分かりません。

ボールは以下のような構造体となっています。
「code=cpp]
typedef struct
{

double x;
double y;
double speed;
double angle;

} ballStatus;
[/code]

ballStatus型の変数ballstがあると仮定してください。また、math.hは#includeされているものとしてください。
ボールの移動ロジックは以下の通りです。

コード:

void moveBall()
{

int x = ballst.x;
int y = ballst.y;

x = cos(ballst.angle) * ballst.speed;
y = sin(ballst.angle) * ballst.speed;

// ここに跳ね返りの処理...

ballst.x = x;
ballst.y = y;

}


試しにspeedに×-1をしてみたのですが、入射角と同じ角度で跳ね返りました。
これでは駄目かと思って上下左右の境界線に達するたびにangleに+45してもまったく状況は改善されませんでした。

ヒントになるソースまたは助言をお願いします。

Re: 跳ね返りの処理について

Posted: 2011年10月27日(木) 22:01
by a5ua
以下のような処理でどうでしょうか。

上下の境界をオーバーしたとき、
angle = -angle;

左右の境界をオーバーしたとき、
angle = 180°- angle;
(ラジアンなら、angle = π - angle;)

Re: 跳ね返りの処理について

Posted: 2011年10月30日(日) 13:58
by 古新
回答ありがとうございます。ラジアンの計算法で出来ました。
ありがとうございました。