【问题标题】:CGPoint returning methodCGPoint 返回方法
【发布时间】:2010-11-12 03:36:06
【问题描述】:

我尝试返回一个 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 的类型不兼容”

【问题讨论】:

    标签: objective-c cocos2d-iphone cgpoint


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 是的,我想如果我这样做:“point1.position = CGPointMake(200,200);”它有效。
        【解决方案4】:

        我以一种不完美的方式解决了这个问题,但它确实有效。

        我返回知道一个 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

        【讨论】:

          猜你喜欢
          • 2014-09-11
          • 1970-01-01
          • 2018-07-22
          • 2013-01-17
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          相关资源
          最近更新 更多