2012-01-09 29 views
0

我不知道我創建的CGPoint變量如何知道如何處理特定的if語句。CGPoint變量如何在幕後工作?

例如,我有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

GCPoint表示一個二維空間,理想情況下在CGPoint中存儲速度意味着您需要一個由2維,x和y表示的速度向量。

在你的情況,我看到你只使用1維,我沒有完全得到你想要達到的目標,但在你的情況下,如果沒有方向,你可以使用浮點來存儲速度值。

如果您需要2維速度,您必須通過檢查矢量的長度來檢查maximumVelocity。在你的例子中,只檢查x維度,但如果速度是x = 50,y = 20000,那麼y軸上的運動速度非常快。

ccpLength(<#const CGPoint v#>讓你檢查CGPoint的lenght,這樣你就可以用一個浮點數比較,看看實際速度比你的最大速度,在這種情況下,你需要規範化的向量實際上符合您maxiumVelocity,你可以用

ccpMult(v, maximumVelocity/ccpLength(v)) 
+0

感謝回答一對CGFloats的。 你是對的,目前我有一個只在x軸上移動的精靈,我會稍微介紹一下y軸。 但是,我的問題是如何檢查發生。 myVelocity如何知道它在maximumVelocity浮點變量的範圍內。 是,myVelocity是速度矢量,但我不知道它是如何知道什麼時候已經達到100 這是否會發生,因爲我以前必須執行的代碼,當我設置myVelocity採取的靈敏度和加速度乘以.x並將myVelocity.x矢量與減速變量相乘? – 2012-01-09 08:54:03

+1

@ElmedinZelenkic:'myVelocity'什麼都不知道。它只是一個數字的容器。你的代碼知道'myVelocity.x'小於'maximumVelocity',因爲你寫了這樣一個比較。 「myVelocity」成員的值是您(或任何其他代碼)在此處指定的任何值。 – 2012-01-09 19:34:36

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實際上是不相關的,以這個職位的原因)