Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone CGPoint变量在幕后是如何工作的?_Iphone_Objective C_Ios - Fatal编程技术网

Iphone CGPoint变量在幕后是如何工作的?

Iphone CGPoint变量在幕后是如何工作的?,iphone,objective-c,ios,Iphone,Objective C,Ios,我不确定我创建的CGPoint变量如何知道如何处理特定的if语句 例如,我有CGPoint myVelocity

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

例如,我有
CGPoint myVelocityfloat maximumvocity=100
然后我执行以下代码

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

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

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

在你们的例子中,我看到你们只使用一维,我并没有完全理解你们想要实现的,但在你们的例子中,你们可以使用一个浮点来存储速度值,如果它没有方向的话

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

ccpLength(
允许您检查CGPoint的长度,以便与浮点进行比较,查看实际速度是否快于最大速度,在这种情况下,您需要规范化向量以实际匹配最大速度,您可以使用

ccpMult(v, maximumVelocity/ccpLength(v))

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

在你们的例子中,我看到你们只使用一维,我并没有完全理解你们想要实现的,但在你们的例子中,你们可以使用一个浮点来存储速度值,如果它没有方向的话

如果你需要二维速度,你必须通过检查向量的长度来检查最大速度。在你的例子中,你只检查x维,但是如果速度是x=50,y=20000,这在y轴上移动得非常快

ccpLength(
允许您检查CGPoint的长度,以便与浮点进行比较,查看实际速度是否快于最大速度,在这种情况下,您需要规范化向量以实际匹配最大速度,您可以使用

ccpMult(v, maximumVelocity/ccpLength(v))

CGPoint只是一个包含“x”和“y”组件的结构。你可以认为它是传递一对浮点数的一种更简单的方法

因此,上面的代码相当于:

float x;
// other stuff
if (x > maximumVelocity) {
 x = maximumVelocity;
}
else if (x < -maximumVelocity) 
{
  x = -maximumVelocity;
}
要访问“x”变量,设置或读取它,请使用“.x”,就像您在代码示例中所做的那样


(p.S.CGPoint实际上是一对Cgploat,原因与本文无关)

CGPoint只是一个包含“x”和“y”组件的结构。你可以将其视为传递一对float的更简单方法

因此,上面的代码相当于:

float x;
// other stuff
if (x > maximumVelocity) {
 x = maximumVelocity;
}
else if (x < -maximumVelocity) 
{
  x = -maximumVelocity;
}
要访问“x”变量,设置或读取它,请使用“.x”,就像您在代码示例中所做的那样


(p.S.CGPoints实际上是一对CGfloat,其原因与本帖无关)

谢谢你的回答。你说得对,目前我有一个只在x轴上移动的精灵,我会稍微介绍一下y轴。但是,我的问题是检查是如何进行的。myVelocity如何知道它何时在maximumVelocity浮点变量的限制范围内。是的,myVelocity是速度向量,但我不确定如何进行检查我不知道它何时达到100,这是否是因为我之前实现的代码,当我设置myVelocity以获取灵敏度并将其乘以加速度.x,然后将myVelocity.x向量乘以减速变量时发生的?@ElmedinZelenkic:
myVelocity
什么都不知道。它只是几个n的容器编号。您的代码知道何时
myVelocity.x
小于
maximumVelocity
,因为您编写了这样一个比较。
myVelocity
成员的值与您(或任何其他代码)的值无关分配到那里。谢谢回答。你说得对,目前我有一个只在x轴上移动的精灵,我会稍微介绍一下y轴。但是,我的问题是如何进行检查。myVelocity如何知道何时在maximumVelocity浮动变量的限值内。是的,myVelocity是速度向量,但我不是我不确定它如何知道何时达到100,这是否是因为我之前实现的代码,当我设置myVelocity以获取灵敏度并将其乘以加速度.x,然后将myVelocity.x向量乘以减速变量时发生的?@ElmedinZelenkic:
myVelocity
什么都不知道。它只是一个容器两个数字。您的代码知道何时
myVelocity.x
小于
maximumVelocity
,因为您编写了这样一个比较。
myVelocity
成员的值是您(或任何其他代码)在其中指定的值。