Entiers et CGRect

Mettre un IBAction dans une NSView, c'est pecher. Et je m'en repend.


mais bon c'etait juste pour le test.. mon shoot them up a encore besoin de beaucoup de lignes de codes.. :)


 


Par contre pourquoi ne pourrait-on pas utiliser un gentil "int" dans un CGRect (ou NSRect) ?


Réponses

  • AliGatorAliGator Membre, Modérateur

    Parce que

    struct CGPoint {
      CGFloat x;
      CGFloat y;
    };
    typedef struct CGPoint CGPoint;
     
    /* Sizes. */
     
    struct CGSize {
      CGFloat width;
      CGFloat height;
    };
    typedef struct CGSize CGSize;
     
    /* Rectangles. */
     
    struct CGRect {
      CGPoint origin;
      CGSize size;
    };
    typedef struct CGRect CGRect;
    Autrement dit un CGRect est défini comme étant une structure contenant 2 structures, toutes avec des CGFloat dedans et pas des int.
  • MaatMaat Membre

    d'accord c'est noté


    cimer petit croco !


  • MonsieurPaulMonsieurPaul Membre
    avril 2013 modifié #4

    Je pense que d'une manière générale pour tout ce qui est affichage, c'est préférable de raisonner en points et en float plutôt qu'en pixels et en int.


    Pour l'instant tu choisis une valeur arbitraire dans ta méthode, donc cela ne gène pas d'utiliser un int, mais quand cette valeur sera calculée d'une autre façon, tu pourras te retrouver très rapidement avec un float.


     


    En plus, NSRect ou CGRect sont composés de float, fin de la discussion :)


  • MalaMala Membre, Modérateur


    Je pense que d'une manière générale pour tout ce qui est affichage, c'est préférable de raisonner en points et en float plutôt qu'en pixels et en int.


    Pour l'instant tu choisis une valeur arbitraire dans ta méthode, donc cela ne gène pas d'utiliser un int, mais quand cette valeur sera calculée d'une autre façon, tu pourras te retrouver très rapidement avec un float.


     


    En plus, NSRect ou CGRect sont composés de float, fin de la discussion :)




    Sauf qu'à  travailler uniquement en float on se retrouve avec des effets de blur du fait du lissage inter pixel à  l'affichage. Donc à  l'usage, un cast ou un round en int n'est pas idiot.

  • CéroceCéroce Membre, Modérateur
    avril 2013 modifié #6

    D'ailleurs, il existe une fonction CGRectIntegral() qui arrondit les coordonnées.


    Personnellement, j'ai mes propres fonctions pour faire les arrondis de CGRect, CGPoint et CGSize.


Connectez-vous ou Inscrivez-vous pour répondre.