0

我尝试返回一个 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

4 回答 4

2

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

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

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

于 2010-11-12T04:42:52.623 回答
0

There's probably also a warning that it can't find the method declaration. It sounds like the compiler doesn't know what type the method returns and is defaulting to id.

于 2010-11-12T04:52:05.020 回答
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

于 2010-11-12T06:22:12.180 回答
0

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

于 2010-11-12T04:00:55.280 回答