現在、COD4でマップのスクリプトを開発しています。問題はこの状況のアルゴリズムにあるので、言語は非常に単純なので、これを言語に依存しないものとしてタグ付けしていると思います。
幅960戸の部屋があります。そしてその中には真ん中にオブジェクトがあり、それを軸として数えます。ボールは、打たれるたびにランダムな位置に移動することになっていますが、壁を超えて移動することはできません。これが図です:
ゲームのAPIは、私が知る限り、オブジェクトの相対的な位置の移動のみを許可しているので、私が思いついたコードを次に示します。問題は、head_move()を2回呼び出した後、予期しない結果が発生し始め、これが私の頭をクラッシュさせることです。誰かが私を助けてくれますか?
motionThink():
while (1)
{
self waittill ("trigger", player); //Wait till player hits the object
head_origin thread head_move();
}
head_move()
{
/* level.prevx is a global variable which I use to store
the distance traveled in the previous shot. Defaults to 0 */
/*This works in the first and second hit, but then it begins to show
incorrect max and min values*/
x_min = (0-480) + level.prevx;
x_max = x_min + 960;
x_units = RandomIntRange( x_min, x_max ); //Create a random integrer
log2screen("MIN: " + x_min + " and MAX: " + x_max + " and MOVED " + x_units);
log2screen("Moved " + x_units);
//Movement function, first parameter is the distance to be traveled, and the second one is the speed
self movex (x_units , level.movespeed);
level.prevx = x_units;
}
編集: 明確にするために。ユーザーがボールを撃つと、その位置が特定の値に変わります。ここで、彼がもう一度ヒットした場合、ランダムintジェネレーターの最小値と最大値を変更して、ボールが壁の外に移動しないようにする必要があります。例:
- レベルが始まります。ボールは部屋の真ん中にあります。最小範囲と最大範囲はそれぞれ-480と480です
- ユーザーがボールを打ち、そのボールが-200ユニット(左に200ユニット)移動しました。
- これで、最小範囲と最大範囲は-280と680になります。
これが十分に明確であることを願っています。
編集2: FlipScriptが提案したようにサインを編集しました。log2screen関数からの出力は、実際に何が起こっているかです。
- 最小:-480および最大480。移動67
- 最小:-413および最大547。移動236
- 最小:-244および最大716。移動461
単なるサンプルケース。何かが逆行していると私は信じています。これらは正しい計算ではありません。