0

コードでオブジェクトのベクトルを設定するのに問題があります。この質問の答えと同様にコードをモデリングしてみました: GLKVector2 を使用していることを除いて、ゲームの敵がプレーヤーに向かって移動します。私の実装は正しいように思えましたが、実際には GLKit でベクターを使用するのは初めてであり、一般的にあまり使用したことがありません。

私の現在のコードは次のようになります。

GLKVector2 vector = GLKVector2Make(self.player.position.x - self.target.position.x, self.player.position.y - self.target.position.y);

    float hypo = sqrt(vector.x*vector.x + vector.y*vector.y);
    float speed = 0.25;

    vector = GLKVector2Make(vector.x/hypo, vector.y/hypo);
    vector = GLKVector2MultiplyScalar(vector, speed);

    GLKVector2 sum = GLKVector2Add(vector, self.target.position);

    self.target.moveVelocity = sum;

ここで私の論理が正しくない可能性はありますか? 助けや提案をいただければ幸いです。ありがとう!

編集:何が起こるかを実際に説明しなかったので、明確にするために..基本的に、「敵」は吃音/ジャンプまたは単にスティックします。それらは他のオブジェクトに向かってまったく移動していません。

編集2:

GLKVector2Normalize を使用しようとすると、何も動きません。私が次のようなことをした場合:

GLKVector2 vector = GLKVector2Make(self.player.position.x - self.target.position.x, self.player.position.y - self.target.position.y);

    float speed = 0.10;
//    float distance = GLKVector2Distance(self.player.position, self.target.position);

//    vector = GLKVector2Normalize(vector);
    vector = GLKVector2MultiplyScalar(vector, speed);
    self.target.moveVelocity = vector;

その後、動きはプレーヤー オブジェクトに向かって機能しますが、1 秒ごとに更新する必要がある場合でも、1 回しか更新されません。

4

1 に答える 1

0

2つのこと:

  • ベクトルの大きさを計算して自分で割る必要はありません。GLKit にはGLKVector2Normalize関数があり、ベクトルを受け取り、長さ 1 で同じ方向にベクトルを返します。その後、GLKVector2MultiplyScalar(実行するように) を使用して速度を変更できます。
  • ターゲットの速度は、ターゲットの update メソッド (タイムステップごとに 1 回呼び出す必要があります) で、各タイムステップに追加することを想定して、合計ではなくベクトルに設定する必要がself.moveVelocity.xありself.position.xます。現在のように、変数は、速度ではなく、ターゲットが将来 1 つのタイムステップを持つべき位置を保持します。self.moveVelocity.yself.position.ysum
于 2013-06-26T22:06:31.923 に答える