2015-07-10 76 views
1

在Objective-C中vector_float2和CGPoint *之間轉換最簡單/最快的方法是什麼?如何在vector_float2和CGPoint *之間進行轉換?

Apple是否提供這種類型轉換的任何內置功能?我注意到在2-3個示例應用程序中,他們只是稱CGPointMake()等來進行轉換

是否可以簡單地將CGPoint *投射到vector_float2,反之亦然?這樣做是否安全?


更新:很明顯,解決辦法是:

vector_float2 v = (vector_float2){(float)point.x, (float)point.y}; 
CGPoint p = CGPointMake(v.x, v.y); 

但是如果你需要頻繁做的,更何況,如果有任何vector_float2*CGPoint*的C數組,這是麻煩的。所以我正在尋找可能忽略的已有解決方案或非常簡單的替代方案。

+0

寫一個函數CGPointMakeFromFloat2怎麼樣? – gnasher729

+0

是的,該選項當然存在。但是我想知道是否已經有某種方式在某處建立了某種東西? – LearnCocos2D

回答

0

我試圖簡單地擴展CGPoint但似乎無法導入vector_float2;甚至沒有橋接頭文件。

// Doesn't work!! 
extension CGPoint { 
    init(vector: vector_float2) 
    { 
     self.x = CGFloat(vector.x) 
     self.y = CGFloat(vector.y) 
    } 
} 

雖然你有幾個選擇。您可以通過計算var返回一個CGFloat延長Float並延伸GKAgent2D轉換它的位置到CGPoint

extension Float { 
    var f: CGFloat { return CGFloat(self) } 
} 

extension GKAgent2D { 
    var cgposition: CGPoint { 
     return CGPoint(x: self.position.x.f, y: self.position.y.f) 
    } 
} 

您還可以擴展CGPoint本身接受兩個Float的:

extension CGPoint { 
    init(x: Float, y: Float) { 
     self.x = CGFloat(x) 
     self.y = CGFloat(y) 
    } 
} 

extension GKAgent2D { 
    var cgposition: CGPoint { 
     // Note that the ".f" is gone from the example above 
     return CGPoint(x: self.position.x, y: self.position.y) 
    } 
} 

在這兩種情況下,您都可以這樣使用它:

let agent = GKAgent2D() 
let point = agent.cgposition 
+0

對不起,我忘了Objective-C標籤。但是封裝類型轉換的一個很好的例子。 – LearnCocos2D

相關問題