跳ね返りの処理について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
古新

跳ね返りの処理について

#1

投稿記事 by 古新 » 12年前

今、かなり昔に作られた「ポン」を縦方向に持ってきたようなゲームを作っています。

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

ボールは以下のような構造体となっています。
「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してもまったく状況は改善されませんでした。

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

アバター
a5ua
記事: 199
登録日時: 13年前

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

#2

投稿記事 by a5ua » 12年前

以下のような処理でどうでしょうか。

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

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

古新

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

#3

投稿記事 by 古新 » 12年前

回答ありがとうございます。ラジアンの計算法で出来ました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る