[Résolu] objective-c et/ou C ?

Paul_pPaul_p Membre
juillet 2011 modifié dans Coin canapé & détente #1
Salut,

j'aurais aimé savoir si vous êtes amené à  utiliser du C en faisant des appli iphone/ipod/ipad?
est-ce que le C est "presque" indispensable pour réaliser ce qu'on veut avec l'iphone, ou bien l' "objective-c" est suffisant?
par exemple, faire un jeu sur iphone, pour créer les graphismes, la 3d par exemple ou la simulation de 3, imaginons que je veuille faire une appli où on peut suivre un personnage ne train de "voler" dans les airs, pouvez-vous me dire comment réaliser ce genre de jeu?

Merci de vos réponses  8--)

Réponses

  • DrakenDraken Membre
    11:40 modifié #2
    Faire un jeu 3D sur iPhone ! tu es ambitieux. Il est beaucoup plus simple de faire un jeu 2D.

    Le secret de la 3D sur iDevice c'est OpenGL SE. Si tu veux plonger les mains dans le cambouis, procure-toi l'ouvrage "OpenGL 2.0 - Guide Officiel". C'est un gros pavé de 700 pages très didactique, aussi bien pour les débutants que les "pro".

  • AliGatorAliGator Membre, Modérateur
    11:40 modifié #3
    Si tu commences à  utiliser OpenGL ES, tu vas être obligé de te pallucher du C oui.
  • Paul_pPaul_p Membre
    11:40 modifié #4
    oui 2D je voulais dire  xd

    j'ai vu aussi qu'il existait cocoa2D, je vais me renseigner sur open GL

    sinon une fois qu'on est à  l'aise avec l'obj-c, c'est à  peu près abordable le C? (pour créer des jeux...)
  • AliGatorAliGator Membre, Modérateur
    11:40 modifié #5
    Bof.

    Le C est un langage bas niveau. C'est quand même pas de l'assembleur, c'est structuré et tu retrouves des éléments de syntaxe du C quand tu écris de l'Objective-C comme les boucles for par exemple... mais ça reste plus bas niveau que l'Objective-C.
    En particulier par exemple c'est à  toi de gérer la mémoire, puisque tu n'as pas de mécanisme de retain-count. Tu ne peux pas créer des objets, puisque le C n'est pas un langage objet mais un langage procédural. Au lieu de cela tu alloue de la mémoire (malloc), la libère une fois fini (free), mais tu dois savoir la taille de la mémoire que tu veux allouer (sizeof...) , puis remplir cette mémoire (strcpy...).

    D'un autre côté quand tu mix du C et de l'Objective-C tu peux avoir le meilleur des deux mondes, manipuler des objets Cocoa donc en Objective-C, gérer la mémoire avec les classiques retain/release & co, et récupérer de ces objets Cocoa des objets C (genre 'bytes' à  partir de NSData ou autre), ou ne manipuler au niveau de l'API C que des types primitifs.
    Mais ça ne reste pas trivial si tu n'as jamais fait de pur C
  • DrakenDraken Membre
    11:40 modifié #6
    Mais pourquoi vouloir faire des jeux en C ? L'Objective-C convient très bien. Il n'y a même pas besoin d'OpenGL ni d'une bibliothèque comme Coco2D. On peut réaliser des jeux 2D très sympathique avec les fonctions graphiques de base du SDK. Cerise sur le gâteau, iOS 5.0 intègre l'API Core Image permettant de réaliser facilement des effets graphiques en temps réels.

  • AliGatorAliGator Membre, Modérateur
    11:40 modifié #7
    Mouais Draken je pense que ça dépend complètement de ce que l'on veut comme type de jeu.
    - Jeu 2D type plateau, avec animations relativement simples et peu nombreuses : Objective-C suffit amplement
    - Jeu 2D un peu plus complexe : Cocos2D peut sans doute aider (je sais pas je l'ai jamais utilisé personnellement)
    - Jeu 2D à  forte dynamique RT, genre un TowerDefense ou autre où tu as des tirs qui fusent dans tous les sens et 150 sprites qui bougent dans ton viewport : vaut le coup de se pencher sur le dessin direct du jeu à  l'écran (et éviter d'utiliser une UIView par sprite à  animer, surtout !!! même si ça c'est conseillé d'éviter rapidement pour des fortes composantes de dessin RT). L'utilisation d'OpenGL ES peut être intéressante à  ce niveau aussi.
    - Jeu 3D : OpenGL ES

    Dans tous les cas, pour un jeu de plateau ou un truc relativement statique, où il peut y avoir des animations certes mais qui ne consomme pas non plus un max, Objective-C et Cocoa peuvent suffire. Considérer éventuellement d'optimiser le dessin en personnalisant ses draw plutôt que de surcharger sa vue de subviews (car trop surcharger de views peut consommer des ressources... sauf qu'optimiser le dessin implique de passer par CoreGraphics pour dessiner, qui est du C...). Mais pour un jeu un peu plus consommateur de ressources ou d'une plus grande ampleur avec une forte composante graphique dynamique et temps réel (au sens technique du terme, donc avec une timeframe restrictive), OpenGL ES devient vite intéressant. Et pour de la 3D vite incontournable.
  • zoczoc Membre
    11:40 modifié #8
    Pour info, cocos2d utilise OpenGL ES.

  • Paul_pPaul_p Membre
    11:40 modifié #9
    ok intéressant, le C est utilisé pour quoi au niveau web/mobile? la création de logiciel?

    merci de toutes ces précisions en tout cas
  • DrakenDraken Membre
    11:40 modifié #10
    Je n'ai jamais dis le contraire, Ali. Les UIView ont beaucoup de limites, mais permettent aux débutants de se plonger facilement dans la création de petits jeux, sans avoir à  se farcir des API complexes. C'est comme apprendre à  faire du vélo, alors que OpenGL ES c'est passer un brevet de pilotage d'hélicoptère.

    Casse-brique, Space Invader, pac-man, pong, jeux de refléxes, tétris, columns, jeux de tir, jeux de mémoire, jeux de cartes, jeux musicaux, jeux de stratégie, etc. Tout cela est réalisable avec des UIView. On peut faire énormément de choses avec "seulement" quelques dizaines de sprites. "Faire un jeu" ce n'est pas juste afficher des sprites, mais imaginer quelque chose d'amusant. La technique est moins importante que le plaisir de jouer.

    Ensuite, comme tu le disais toi-même dans un autre post, on peut employer les CALayer et les CGLayer pour améliorer l'efficacité de l'affichage. C'est plus complexe à  faire, mais toujours plus facile que OpenGL ES.

    Et maintenant, il y a iOS 5 avec de nouvelles API graphiques, comme les Core Images et la bibliothèque GLKit pour faciliter l'emploi d'OpenGL. Il semble même que l'on puisse dessiner des Core Images directement dans des surfaces OpenGL ! De quoi réaliser des affichages hybrides. Une possibilité fascinante !

  • FKDEVFKDEV Membre
    11:40 modifié #11
    Existe-t-il des frameworks de jeux similaires cocos2d à  base UIKit et CoreGraphics seulement ?
  • AliGatorAliGator Membre, Modérateur
    11:40 modifié #12
    dans 1310468439:

    Je n'ai jamais dis le contraire, Ali. Les UIView ont beaucoup de limites, mais permettent aux débutants de se plonger facilement dans la création de petits jeux, sans avoir à  se farcir des API complexes. C'est comme apprendre à  faire du vélo, alors que OpenGL ES c'est passer un brevet de pilotage d'hélicoptère.

    Casse-brique, Space Invader, pac-man, pong, jeux de refléxes, tétris, columns, jeux de tir, jeux de mémoire, jeux de cartes, jeux musicaux, jeux de stratégie, etc. Tout cela est réalisable avec des UIView. On peut faire énormément de choses avec "seulement" quelques dizaines de sprites. "Faire un jeu" ce n'est pas juste afficher des sprites, mais imaginer quelque chose d'amusant. La technique est moins importante que le plaisir de jouer.
    On est tout à  fait d'accord Draken !

    C'est pour cela que ça dépend énormément du type de jeu que l'on souhaite réaliser. La question n'est pas tant de savoir si c'est un jeu (après tout certains jeux sont très complexes, d'autres peuvent être très simples et certaines applications juste "utilitaires" plus complexes que certains jeux... bref "jeu" ça veut rien dire pour qualifier la complexité de réalisation d'une appli)
  • CéroceCéroce Membre, Modérateur
    11:40 modifié #13
    Le C a au moins un gros avantage sur Objective-C: il est portable.
    Pour un jeu, j'aurais tendance à  vouloir le porter sur plusieurs plateformes, et là , c'est C ou C++ et OpenGL.
Connectez-vous ou Inscrivez-vous pour répondre.