2010-11-12 88 views
0

我試圖返回一個CGPoint,但我做錯了什麼:CGPoint返回方法

這裏是我的方法:

- (CGPoint)calculatePointOnCircleFrom:(CGPoint)pointA PointB:(CGPoint)pointB radius:(float)rd { 
    float sryy = pointA.y - pointB.y; 
    float srxx = pointA.x - pointB.x; 
    float sry = pointA.y + sryy; 
    float srx = pointA.x + srxx; 
    float kpx = pointA.x + cos(atan2(pointA.y - sry, pointA.x - srx)) * rd; 
    float kpy = pointA.y + sin(atan2(pointA.y - sry, pointA.x - srx)) * rd; 

    return CGPointMake(kpx, kpy); 
} 

該方法中的代碼工作正常,但我做一些錯誤的初始化。

這裏我所說的方法:

point1.position = [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]; 

,並得到嘴硬錯誤:「不兼容類型的參數1‘setPosition兩種:’」

回答

0

可能還有一個警告,它無法找到方法聲明。這聽起來像編譯器不知道該方法返回的類型,並默認爲id。

0

該錯誤消息告訴您該類型由[self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]返回不符合point1.position的類型。 position是CGPoint嗎?

+0

是的,我是這麼認爲的,如果我這樣做:「 point1.position = CGPointMake(200,200);「有用。 – Mario 2010-11-12 04:10:11

2

如果你仔細觀察,你會看到該消息爲不兼容的類型爲一個名爲方法,而不是calculatePointOnCircleFrom方法的參數1。 是position財產的準備者。

所以問題是point1.position =部分行,而不是調用calculatePointOnCircleFrom方法。我懷疑point1變量的position屬性不屬於CGPoint類型,因爲這是calculatePointOnCircleFrom方法返回的結果。

或者,您可能不會調用您認爲您打電話的方法。

0

我解決了一個不完美的方式,但它的工作原理。

我回知道NSValue:

- (NSValue *)calculatePointOnCircleFrom:(CGPoint)pointA PointB:(CGPoint)pointB radius:(float)rd { 
    float sryy = pointA.y - pointB.y; 
    float srxx = pointA.x - pointB.x; 
    float sry = pointA.y + sryy; 
    float srx = pointA.x + srxx; 
    float kpx = pointA.x + cos(atan2(pointA.y - sry, pointA.x - srx)) * rd; 
    float kpy = pointA.y + sin(atan2(pointA.y - sry, pointA.x - srx)) * rd; 

    return [NSValue valueWithCGPoint:CGPointMake(kpx, kpy)]; 
} 

和調用方法,像這樣:

NSValue *pos = [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]; 
CGPoint cgpos = [pos CGPointValue]; 
point1.position = cgpos; 

感謝每那些幫助:d

+0

如果是這樣的話,我認爲@查克的答案是正確的。 – Marplesoft 2010-11-12 23:15:19