コードでオブジェクトのベクトルを設定するのに問題があります。この質問の答えと同様にコードをモデリングしてみました: 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 回しか更新されません。