代码之家  ›  专栏  ›  技术社区  ›  Mario

CGPoint返回法

  •  0
  • Mario  · 技术社区  · 14 年前

    以下是我的方法:

    - (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]; 
    

    4 回复  |  直到 13 年前
        1
  •  0
  •   Chuck    14 年前

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

        2
  •  2
  •   Marplesoft    14 年前

    如果仔细观察,您会发现消息是关于名为的方法的参数1的不兼容类型的 setPosition ,而不是 calculatePointOnCircleFrom 方法。这个 定位 position

    所以问题在于 point1.position = 电话的一部分,不是打给 方法。我怀疑 位置 财产 point1 变量不是CGPoint类型,因为 方法正在返回。

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

        3
  •  0
  •   David Gelhar    14 年前

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

        4
  •  0
  •   Mario    14 年前

    我返回know a 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