CGPoint返回方法

时间:2010-11-12 03:36:06

标签: objective-c cocos2d-iphone 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]; 

并得到愚弄错误:“'setPosition:'参数1的不兼容类型”

4 个答案:

答案 0 :(得分:2)

如果仔细观察,您会发现该消息是关于名为 setPosition 的方法的参数1的不兼容类型,而不是calculatePointOnCircleFrom方法。 setPositionposition属性的setter。

问题在于行的point1.position =部分,而不是对calculatePointOnCircleFrom方法的调用。我怀疑position变量的point1属性不是CGPoint类型,因为这是calculatePointOnCircleFrom方法返回的内容。

或者,您可能没有调用您认为正在呼叫的方法。

答案 1 :(得分:0)

该错误消息告诉您[self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]返回的类型与point1.position的类型不匹配。 position是CGPoint吗?

答案 2 :(得分:0)

可能还有一个警告,它无法找到方法声明。听起来好像编译器不知道方法返回什么类型并且默认为id。

答案 3 :(得分: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