我尝试返回一个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的不兼容类型”
答案 0 :(得分:2)
如果仔细观察,您会发现该消息是关于名为 setPosition
的方法的参数1的不兼容类型,而不是calculatePointOnCircleFrom
方法。 setPosition
是position
属性的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