Casse brique

mafioso88mafioso88 Membre
17:32 modifié dans Vos applications #1
Bonjour à  tous.

Je développe actuellement un jeu sur iphone. Il s'agit d'un casse brique.

Après avoir mis en place ma balle, ma barre, gérer les déplacements, l'animation de ma balle, ainsi que les collisions. Je fais face à  un problème de taille, qui j'avoue ne m'aurait pas perturbé si je n'étais pas un débutant en objective-C.

Grossomodo mon problème est simple : après avoir gérer les collisions avec ma balle avec une ou deux briques mis aléatoirement sur ma map, par l'intermédiaire de l'interface builder, me vient la problématique suivante : comment pouvoir gérer les collisions avec ma balle et toutes les briques à  la fois sans avoir à  gérer au cas par cas chaque brique avec toutes les conditions qui lui sons propres.
L'idée dans un premier temps fut de créer une classe (ce qui parait logique pour tout programmeur objet), cependant lorsque l'on créé soit même une, il est impossible de l'utiliser dans l'interface builder (du moins c'est ce que j'ai pu constater).

J'espères avoir été clair en espérant que vous puissiez m'éclairer dans la création de mon projet.

Réponses

  • wiskywisky Membre
    mars 2010 modifié #2
    L'idée dans un premier temps fut de créer une classe (ce qui parait logique pour tout programmeur objet), cependant lorsque l'on créé soit même une, il est impossible de l'utiliser dans l'interface builder (du moins c'est ce que j'ai pu constater).

    Faux !
    1) vas dans IB puis menu File >> Read Class File
    2) choisi le dossier ou le fichier .h de ta class et valide
    3) sélectionne ton objet (ex. un NSView)
    4) dans l'inspecteur tappe le nom de ta class (voir pj)

    Pour les tests de collision, je te conseil la class NSBezierPath qui permet de savoir si il contient un point selon les coordonnées envoyées (containsPoint:(NSPoint)).
  • mafioso88mafioso88 Membre
    17:32 modifié #3
    Merci beaucoup.
    Je pense que ça va grandement m'aider.
    C"est fout comme quoi quelque chose d"accessible facilement peut t'empecher d'avancer pendant un moment.

  • wiskywisky Membre
    17:32 modifié #4
    dans 1267472529:

    Merci beaucoup.
    Je pense que ça va grandement m'aider.
    C"est fout comme quoi quelque chose d"accessible facilement peut t'empecher d'avancer pendant un moment.

    C'est clair ! J'ai mis au moins 6 mois à  comprendres les outlets/actions et encore plus les bindings... En auto-didact c'est pas facile !
  • mafioso88mafioso88 Membre
    17:32 modifié #5
    Maintenant que j'avance un peu j'ai de nouveau quelques problèmes.

    En fait maintenant j'ai bien réussit à  mettre les conditions de collisions de ma balle. Mais je n'arrive pas à  le détruire convenablement. Je vous explique en fait j'arrive à  enlever la brique mais la balle se cogne toujours à  l'endroit ou elle devrait être, chose quell ne faisait pas avant, lorsque j'avais tout dans la même classe.

    Le code que j'ulite pour détruire mon objet brique est le suivant :
    [self removeFromSuperView];
    self = NULL;

    Je sais pas si il y a un moyen plus efficace et plus propre pour détruire un objet.
  • DrakenDraken Membre
    17:32 modifié #6
    C'est plutôt release pour détruire un objet ! Et la destruction doit se faire en dehors du code de l'objet.
  • mafioso88mafioso88 Membre
    17:32 modifié #7
    Le Release est difficile à  utiliser je trouve, il provoque chez moi souvent des erreurs.
    Le problème c'est que je passe par l'interface Builder, est à  cause de ça je pense, je ne peux controller parfaitement la présence ou non de mes objets.
  • wiskywisky Membre
    17:32 modifié #8
    Oulà  tu me semble parti sur un mauvais pied !
    Comment gère-tu tes briques ?

    Dans ta vue personnalisée tu ajoute un NSMutableArray dans lequel tu met tous tes objets "brique". Ce qui te permet de :
    - tester si ta balle est sur une brique (parcours du tableau pour trouver la brique avec la fonction que je t'ai donné plus haut)
    - afficher instantanément les changements (surcharge de la fonction - (void)drawRect:(NSRect)rect de NSView)
    - supprimer proprement un objet brique lorsque la balle la touché (lors du test et quand une brique est trouvé, calcul du rebon et suppression de l'objet du tableau)
  • AliGatorAliGator Membre, Modérateur
    17:32 modifié #9
    dans 1267543048:

    Le Release est difficile à  utiliser je trouve, il provoque chez moi souvent des erreurs.
    Ouuulà à à à  !
    Arrête tout de suite le massacre alors :P
    La gestion de la mémoire est la base de chez base de la programmation Cocoa, et encore plus de la programmation iPhone.
    La bonne gestion des retain/release est primordiale, je te conseille fortement de lire et relire le Programming Guide et les divers articles sur le sujet.

    Si un envoi de release provoque une erreur chez toi, c'est que tu fais des release intempestifs ou malvenus ou mal utilisés. Et dans ces cas là , la solution n'est surtout pas "bon bah je fais pas de release" (et surtout, encore moins "self = nil", quelle hérésie :P), mais de comprendre si tu avais bien un release à  faire à  cet endroit, et si oui pourquoi ça crash ou provoque une erreur (sans doute à  cause d'un autre release fait précédemment mais trop tôt, ou d'un constructeur de commodité, ou d'un retain non fait au bon endroit, ...).

    A quoi ressemble ton MVC ? Si dans ta vue tu n'as plus la brique, mais que tu ne l'as pas enlevée de ton modèle, c'est logique que ta balle semble continuer de rebondir sur la brique. (Car tu as architecturé ton jeu avec le pattern MVC, pour séparer la logique de jeu et la représentation, n'est-ce pas, j'espère ?)


    Bref, reprend tout ça au calme, vérifie bien que tu maitrises les bases (gestion mémoire, MVC, ...) avant d'aller plus loin, sinon ton nombre de problèmes va aller en grandissant et tu iras droit dans le mur. Ca va p'tet prendre un peu de temps sans doute à  réviser tout ça et s'assurer que tu maitrises bien tous les concepts nécessaires, mais on ne se lance pas tête baissée dans le dev iPhone sans avoir les bases, et tout ira beaucoup mieux une fois que tu auras une archi propre et les principes de base respectés.
Connectez-vous ou Inscrivez-vous pour répondre.