2013-06-26 24 views
0

我无法为我的代码中的对象设置向量。我试着对代码进行建模,类似于这个问题的答案:Game enemy move towards player,只是我使用的是GLKVector2's。我认为我的实现看起来是正确的,但它实际上只是我第一次使用带有GLKit的向量,并且通常我以前没有使用过它们。问题与GLKVector2的

我当前的代码看起来像:

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; 

然后移动工作向游戏对象,但仅更新,即使它应该更新每秒的一次。

回答

0

两件事情:

  • 没有必要计算矢量的幅值和划分自己 - GLKit有GLKVector2Normalize功能,需要一个载体,长度为1的返回矢量相同的方向。然后您可以使用GLKVector2MultiplyScalar(与您一样)更改速​​度。
  • 你的目标的速度应设置为载体,不去总结,假定目标的更新方法(你应该每个时间步长调用一次),你添加到self.moveVelocity.xself.position.xself.moveVelocity.y每个self.position.y时间步长。现在,您的sum变量将持有位置您的目标在将来应该有一个时间步,而不是它的速度。
+0

我更新了我的问题。有些东西仍然无法正常工作。我认为我的更新代码很好,但我不太确定。 – Josh

+0

你能发布你的更新代码吗?在每个时间步骤绘制屏幕之前,您应该通过'moveVelocity.x * timeSinceLastUpdate'和'moveVelocity.y * timeSinceLastUpdate'增加'position.x'。不知道为什么GLKVector2Normalize不起作用。 –