0

我在为我的代码中的对象设置向量时遇到问题。我尝试对我的代码进行建模,类似于这个问题的答案:游戏敌人向玩家移动,除了我使用的是 GLKVector2's。我认为我的实现似乎是正确的,但这实际上只是我第一次将向量与 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;

然后运动朝着玩家对象工作,但只更新一次,即使它应该每秒更新一次。

4

1 回答 1

0

两件事情:

  • 不需要计算向量的大小并自己除-- GLKit 有一个GLKVector2Normalize函数,它接受一个向量并以相同的方向返回长度为 1 的向量。然后您可以使用GLKVector2MultiplyScalar(如您所做的那样)来更改速度。
  • 假设在目标的更新方法(每个时间步应该调用一次)中,您应该将目标的速度设置为向量,而不是总和,您添加到每个self.moveVelocity.x时间步。就像现在一样,你的变量将保持你的目标在未来应该有一个时间步长的位置,而不是它的速度。self.position.xself.moveVelocity.yself.position.ysum
于 2013-06-26T22:06:31.923 回答