CGPoint Variable如何在幕后工作?

时间:2012-01-09 08:27:34

标签: iphone objective-c ios

我不确定我创建的CGPoint变量如何知道如何处理特定的if语句。

例如,我有CGPoint myVelocity;然后我有一个任意数字float maximumVelocity = 100; 然后我执行以下代码

if (myVelocity.x > maximumVelocity) {
     myVelocity.x = maximumVelocity;
    }
   else if (myVelocity.x < -maximumVelocity) 
    {
      myVelocity.x = -maximumVelocity;
    }

根据我的理解,如果满足第一个条件,即myVelocity.x > maximumVelocity,则CGPoint变量设置为最大值,即数字100.这样我的变量永远不会超过任意数。并且设置了另一个条件,以便它不会进入否定状态。

至少这就是我的想法。 现在这里是这篇文章的重要部分..我对myVelocity变量如何知道该任意数字是什么感到困惑。例如它是10?它是下一秒的25还是何时达到100。

我还应该指出,在运行if语句之前,我在myVelocity

中存储了以下代码

以下是在执行if语句之前存储在“myVelocity”中的代码。

float deceleration = 0.4f;
float sensitivity = 6.0f;
float maximumVelocity = 100;

myVelocity.x = myVelocity.x *deceleration   + acceleration.x *sensitivity;

我最近在问题的后半部分询问了代码,但现在我对前者感到好奇。

2 个答案:

答案 0 :(得分:3)

CGPoint只是一个带有“x”和“y”组件的结构。你可以把它想象成一种更简单的方法来传递一对花车。

所以上面的代码相当于:

float x;
// other stuff
if (x > maximumVelocity) {
 x = maximumVelocity;
}
else if (x < -maximumVelocity) 
{
  x = -maximumVelocity;
}

现在使用结构与另一个变量配对:

struct CGPoint {
    float x;
    float y;
};

要访问该“x”变量,要么设置或从中读取,请使用“.x”,就像在代码示例中一样。

(P.S.CGPoints实际上是一对CGFloats,原因与此帖无关)

答案 1 :(得分:2)

GCPoint表示二维空间,理想情况下,在CGPoint中存储速度意味着您需要一个由2维,x和y表示的速度向量。

在你的情况下,我看到你只使用1维,我没有完全得到你想要实现的东西,但在你的情况下你可以使用浮点来存储速度值,如果它没有方向。

如果需要2维速度,则必须通过检查向量的长度来检查maximumVelocity。在您的示例中,您仅检查x维度,但如果速度为x = 50,y = 20000,则在y轴上移动速度非常快。

ccpLength(<#const CGPoint v#>让你检查CGPoint的长度,这样你就可以与浮点数进行比较,看看实际速度是否比你的最大速度快,在这种情况下你需要规范化你的矢量以实际匹配你的maxiumVelocity ,你可以用

来做到这一点
ccpMult(v, maximumVelocity/ccpLength(v))