0

これでは、int値が整数であるか小数であるかをテストしています。小数である場合は、値をゆっくりと加算または減算して整数にします。最初と 3 番目の部分は機能しますが、2 番目と 4 番目の部分は機能しません。

if(ax % tileSize != 0) {
    ax -= (ax % tileSize) / 6; // works fine
}
if(ax % tileSize != 0) {
    ax += (ax % tileSize) / 6; // doesn't work
}
if(ay % tileSize != 0) {
    ay -= (ay % tileSize) / 6; // works fine
}
if(ay % tileSize != 0) {
    ay += (ay % tileSize) / 6; // doesn't work
}

48 / 6効くものはずつ 減り、それ以外は ずつ増えるはずなの48 / 6ですが、 増える量が毎回変わるようです。

4

1 に答える 1

1

この著者のコメントを考えると:

これは単なる Java ゲームであり、これはタイルベースのゲームであるため、プレーヤーの x 座標 (ax) と y 座標 (ay) がタイルと一致しているかどうかだけをテストしています。それらがタイルと一致していない場合は、座標が増減されるため、タイルと一致します。

それを行う方法は、次のようなものです。

double tileSize = 10;
double ax = 25;
double vectorX = Math.floor(ax/tileSize + 0.5) - ax/tileSize;

これにより、-1..1 の範囲のベクトルが得られ、これに速度を掛けたり、動きを決定したいことを何でも実行したりできます。例えば:

ax = ax + Math.ceil(vectorX*speed);

y軸も同様です。また、式に double があることに注意してください。必要に応じて適切なキャストを適用してください。

于 2013-11-13T07:03:40.330 に答える