2010-11-12 6 views
0

i essayer de retourner un CGPoint mais je fais quelque chose de mal:CGPoint méthode retour

Voici ma méthode:

- (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); 
} 

Le code dans la méthode fonctionne très bien, mais je fais quelque chose de mal à l'initialisation.

Ici j'appelle la méthode:

point1.position = [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]; 

et obtenir erreur duper: "type incompatible pour l'argument 1 de 'setPosition:'"

Répondre

0

Il y a probablement aussi un avertissement qu'il ne peut pas trouver la déclaration de méthode. Il semble que le compilateur ne connaisse pas le type retourné par la méthode et soit par défaut id.

0

Ce message d'erreur vous dit que le type retourné par [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64] ne correspond pas au type de point1.position. Est-ce que position est un CGPoint?

+0

oui, je pense que si je fais: " point1.position = CGPointMake (200 200); " Ça marche. – Mario

2

Si vous regardez attentivement, vous verrez que le message est sur un type incompatible pour l'argument 1 d'une méthode appelée , pas la méthode calculatePointOnCircleFrom. Le est le setter pour la propriété position. Donc le problème est avec la partie point1.position = de la ligne, pas l'appel à la méthode calculatePointOnCircleFrom. Je soupçonne que la propriété position de la variable point1 n'est pas de type CGPoint puisque c'est ce que retourne la méthode calculatePointOnCircleFrom.

Vous pouvez également ne pas appeler la méthode que vous pensez appeler.

0

J'ai résolu le problème d'une manière pas parfaite mais cela fonctionne.

Je reviens connaître un 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)]; 
} 

et la méthode d'appel comme si:

NSValue *pos = [self calculatePointOnCircleFrom:Player.position PointB:touchPos radius:64]; 
CGPoint cgpos = [pos CGPointValue]; 
point1.position = cgpos; 

Merci pour tous les aide: D

+0

Si c'est le cas, je pense que la réponse de @ Chuck est correcte. – Marplesoft

Questions connexes