Il y a peut-être une réponse évidente que je devrais voir immédiatement, mais je n'en ai même pas trouvé une obscure. Aidez-moi, s'il vous plaît. Cela me donne même envie de soupçonner un bug, mais c'est peu probable.
J'essaie de créer une fonction qui fera une croix à un point zz, et cela fonctionne partiellement.
En survolant les variables dans Debug alors que je suis arrêté à un point d'arrêt à la fin de la fonction, j'obtiens les valeurs. J'ai inséré les résultats z1 et z2 de NSMakePoint comme commentaires sur les lignes appropriées.
Pourquoi NSMakePoint échoue à un endroit et fonctionne ailleurs dans mon programme ?
La première occurrence devrait incrémenter zz.x de 10 ; au lieu de cela, elle incrémente zz.y de 10.
La deuxième occurrence devrait décrémenter zz.x de 10 ; au lieu de cela, elle décrémente zz.y de 10.
Aux deux occurrences suivantes, il fonctionne correctement.
J'ai d'abord essayé d'incrémenter x à l'intérieur de l'argument comme indiqué dans le commentaire du haut ; puis j'ai essayé d'incrémenter x avant l'argument comme indiqué. J'ai essayé float ainsi que CGFloat.
Qu'est-ce qui ne va pas ici ?
#import "untitled.h"
CGFloat xx,yy;
NSPoint z1,z2, zz;
NSBezierPath *path;
void markpoint (NSPoint zz){ //zz= 133.333, 100 OK
// z2= NSMakePoint(zz.x+10,zz.y); I tried this first and failed;
then I broke out the increment as follows:
xx=zz.x+10; //xx= 143.333 OK
yy=zz.y; //yy= 100 OK
z1= NSMakePoint(xx,yy); //z1= 133.333,110 but should be 143.333,100
[path moveToPoint:z1];
z2= NSMakePoint(zz.x-10,zz.y); //z2= 133.333, 90 but should be 123.333,100
[path lineToPoint:z2];
z1= NSMakePoint(zz.x,zz.y+10); //z1= 133.333, 110 OK
[path moveToPoint:z1];
z2= NSMakePoint(zz.x,zz.y-10); //z2= 133.333, 90 OK
[path lineToPoint:z2];
}
Question secondaire : Je n'ai pas été en mesure de trouver un endroit qui affirme ou nie que float et CGFloat sont interchangeables dans la série de fonctions Bezier et NSPoint dans Cocoa. Le sont-ils ?