私は主に自分を教えるために簡単なゲームライブラリを作成しようとしています。私はこことウェブでいくつかの記事を読む。しかし、私は自分自身の論理を使っているので、私の問題は少し違っていると思う。Javaゲーム、バウンス&ムーブメント
基本:画面上
私のすべてのオブジェクトは、「実体」と呼ばれ、彼らは「EntityActionListener」ウィッヒと呼ばれるインターフェースを実装することができるされている上に移動し、マウスでキーボードを操作することができます画面など
エンティティを移動するにはどうすればよいですか?
アイデア:私は動きを実装するすべての
まず、その後、バウンスして、エンティティの衝突。
運動のためにとバウンス、と私は問題を抱えているところです、私は、次の変数と関数をしたい:
protected float posx = 0, posy = 0;
protected float v = 0, vx = 0, vy = 0;
protected int direction = 0;
私はarg1がして更新する(v)の速度を設定するsetVelocity(float arg1)
機能を使用軸上の速度(VX、VY):
/**
* Set the velocity on both axis according to the direction given
*
* @param arg1 the direction in degrees
* @param arg2 the velocity
*/
private void setVelocityOnAxis(int arg1, float arg2)
{
// Check for speed set to 0
if (arg2 == 0) {
vx = 0;
vy = 0;
return;
}
// Set velocity on axis
vx = (float) (Math.cos(arg1 * Math.PI/180) * arg2);
vy = (float) (Math.sin(arg1 * Math.PI/180) * arg2);
}
だから速度(V)は、例えばトリガイベント内で更新することができます。 =>この手順はうまくいくようです。
しかし、私は次のように扱われるべき方向といくつかのトラブルを抱えている:
/**
* Set the entity direction
*
* @param arg1 the direction in degrees
*/
protected final void setDir(int arg1)
{
// Update direction
direction = arg1;
// Update velocity on axis
setVelocityOnAxis(direction, v);
}
/**
* Get the enity direction based on the axis
*
* @param arg1 the x velocity
* @param arg2 the y velocity
*/
protected final int getPointDir(float arg1, float arg2)
{
// Set the direction based on the axis
return (int) (360 - Math.abs(Math.toDegrees(Math.atan2(arg1, arg2)) % 360));
}
私は比較することにより、4つの方向をチェックして、私は、フレームの境界にバウンスを持っていると思いましたxとyの座標を計算し、辺に応じてvxまたはvyのいずれかをその加法的逆数(1から-1など)に設定します。しかし、これは失敗します。
私はちょうど両側のvxまたはvyを更新すれば、期待どおりにバウンスしますが、方向はこの理由で更新されません。ここで
は、私が使用するコードです:
// ...
// Hit bounds on x axis
direction = -vx; // works.
setDir(getPointDir(-vx, vy)); // does not work.
私は幾何学と三角法では良いことではありませんよ。問題は、360度方向に1の水平速度で衝突すると、45度やデバッグプリントから得られる奇妙なことが起こる理由は言えません。
本当に誰かが助けてくれることを願っています私。私はただそれを修正することはできません。
EDIT:
私の質問は:なぜこれが動作していません。 setDir()またはgetPointDir()のコードの一部が間違っていなければなりません。
EDIT 2
だから、私は最終的にそれが動作します。問題はエンティティが45の方向を持ち、下向きではなく下向きに移動したので、vの速度に対して逆の逆数になります。これはマイナスとマイナスが正であり、バウンスしている間に両方の速度が常に変化するため、とvy。代わりに度の計算で何かを変更しなければなりませんでした。ご協力ありがとうございました。
具体的な質問はここでは解決できません。それがちょうど三角法の場合は、Stack Overflowがおそらく最適な場所ではないでしょう... –
コードが行うべきことを本当に混乱させます。あなたの引数にarg1とarg2よりも意味のある名前を付けることもできます。 :) – Torious
各機能には多くのコメントがあります。まあ、名前を変えることはできますが、これはどうにも関係しません。 –