我不确定我创建的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;
我最近在问题的后半部分询问了代码,但现在我对前者感到好奇。
答案 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))