[Projet] Casse briques

mylonmylon Membre
06:11 modifié dans Vos applications #1
Bonjour à  tous,

J'ai comme projet la création d'une application de Casse briques sur iPhone. Les rebondissements de la balle ainsi que la gestion de la raquette sont terminés. Là  ou je rencontre un problème c'est pour création des différentes briques. En effet, il va falloir créer n briques (n étant variable en fonction du niveau) a partir du code. Cependant il faut tout de même que je garde un pointeur vers ces objets pour pouvoir les supprimer lorsque la balle va les toucher. Savez-vous comment créer n objets  (objet1, objet2, ..., objetn) ? Je penses stocker les pointeurs vers ces objets dans un NSArray.

Si vous avez une petite idée merci de bien vouloir m'aider.

PS : Je suis nouveau sur PommeDev, j'espère avoir respecté toutes les règles.

Réponses

  • 06:11 modifié #2
    Oui la NSArray semble parfaitement convenir. (NSMutableArray plutôt)
  • DrakenDraken Membre
    06:11 modifié #3
    Une simple boucle suffit pour créer n objets. Le seul problème c'est le calcul de leurs positions respectives. Où doivent se trouver les briques n, n+1, n+2, etc ? Stocke plutôt les références de tes briques dans un NSMutableArray.

    Il est d'usage pour un nouveau venu de se présenter dans cette section : http://pommedev.mediabox.fr/presentation-des-membres/. Et de proclamer son allégeance à  l'ordre ancestrale du Perrier Citron.

  • mylonmylon Membre
    06:11 modifié #4
    Merci pour vos conseils. Effectivement le NSMutableArray semble mieux convenir. :)

    En ce qui concerne la position des briques je penses les stocker dans un .plist, ce sera plus simple pour ajouter d'autres niveaux et pour améliorer le jeux dans les versions suivantes.
  • DrakenDraken Membre
    06:11 modifié #5
    Pas béte le .plist ! Tu peux aussi en profiter pour créer différents types de briques, en changeant les couleurs ou les images.

  • mylonmylon Membre
    06:11 modifié #6
    Oui c'est une amélioration que j'aimerais apporter plus tard. Pour le moment mon objectif est de faire marcher cette appli de la manière la plus simple. J'ai encore des doutes sur les ressources que ça pourrait consommer. Je vous tiens au courant ;)
  • DrakenDraken Membre
    06:11 modifié #7
    Les ressources pour afficher quelques dizaines de briques et gérer les interactions briques/balle ? Carrément dérisoires ! Même si tu utilises des images bitmap pour les briques.

  • mylonmylon Membre
    06:11 modifié #8
    Ca fait pas mal de calcul pour tester toutes les collisions de la balle. Je me disais qu'en appelant 100 fois par seconde une fonction qui fait tout ces calculs ça pourrait vite devenir ingérable pour l'iPhone. Enfin peut être que je le sous estime :)
  • Eddy58Eddy58 Membre
    mai 2011 modifié #9
    Ce n'est qu'une affaire d'optimisation, il ne faut tester que les collisions possibles avec les briques près de la balle.

    Ensuite un array c'est vite parcouru, et puis ne t'inquiète pas l'iPhone sait gérer avec fluidité des logiciels très gourmands en calcul. Regarde les jeux 3D.
  • mylonmylon Membre
    06:11 modifié #10
    C'est bon, les briques sont maintenant créées. Je commençais à  créer mon fichier .plist et je me disais que finalement ça serait bien plus simple à  faire en XML, et beaucoup plus pratique à  utiliser. Savez-vous quelle est la différence entre plist et XML ?
  • AliGatorAliGator Membre, Modérateur
    mai 2011 modifié #11
    dans 1306079178:

    C'est bon, les briques sont maintenant créées. Je commençais à  créer mon fichier .plist et je me disais que finalement ça serait bien plus simple à  faire en XML, et beaucoup plus pratique à  utiliser.
    Clairement pas.
    dans 1306079178:
    Savez-vous quelle est la différence entre plist et XML ?
    Les fichiers PLIST existent en plusieurs formats, dont ASCII, XML et Binaire. Le format le plus répandu est le XML.
    Donc en pratique bien souvent les PLIST ne sont que des fichiers XML (qui respectent une DTD bien précise, comme tous les formats basés sur XML)
    Sauf que pour les fichiers PLIST tu as des méthodes en Cocoa permettant de sérialiser et désérialiser un PLIST très simplement. Un peu comme une NSArchive. En une ligne de code, tu transformes par exemple un NSArray de NSDictionary plein de données en un fichier PLIST, et vice-versa.
    Alors qu'avec le XML, tu n'as avec les classes Cocoa que du parsing SAX (donc événementiel) de disponible. Et en plus tu devras implémenter tout ce qu'il faut pour faire la transformation de tes noeuds XML en tes objets modèles.
  • DrakenDraken Membre
    06:11 modifié #12
    dans 1306069330:

    Ca fait pas mal de calcul pour tester toutes les collisions de la balle. Je me disais qu'en appelant 100 fois par seconde une fonction qui fait tout ces calculs ça pourrait vite devenir ingérable pour l'iPhone. Enfin peut être que je le sous estime :)


    Pas la peine de tester l'état de la balle 100 fois par seconde. La fréquence de rafraichissement de l'écran iPhone est de 60 Hz. Et on obtient une belle animation fluide avec seulement 30 images/s.

  • mylonmylon Membre
    06:11 modifié #13
    Salut,

    Me revoilà  avec mon casse briques. J'ai pas mal avancé au niveau de l'interface, je vais maintenant m'attaquer plus précisément au jeu en lui même. Je voulais vous poser une question. J'ai créé une classe Brique qui me permet de stocker toutes les infos et les actions concernant une brique. J'aimerais savoir si dans un fichier .plist, je peux stocker un Array de Briques ou est-ce qu'on ne peut stocker que les types prédéfinis (String, Int...).
  • Eddy58Eddy58 Membre
    06:11 modifié #14
    Normalement pas de problèmes, tu peux directement enregistrer ton Array avec la méthode - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
  • AliGatorAliGator Membre, Modérateur
    06:11 modifié #15
    Non ce n'est pas possible.
    Dans un PLIST, on ne peut mettre que des PLIST-Objects (NSArray, NSDictionary, NSDate, NSData, NSString, NSNumber, je crois pas en oublier mais tout est écrit dans la doc en cas de doute).
    Si tu veux stocker d'autres types de données, le mieux est plutôt de faire une NSArchive.

    Documentation Apple sur les archives et la sérialisation de données dans des fichiers
  • Eddy58Eddy58 Membre
    06:11 modifié #16
    dans 1307465496:

    Non ce n'est pas possible.
    Dans un PLIST, on ne peut mettre que des PLIST-Objects (NSArray, NSDictionary, NSDate, NSData, NSString, NSNumber, je crois pas en oublier mais tout est écrit dans la doc en cas de doute).
    Si tu veux stocker d'autres types de données, le mieux est plutôt de faire une NSArchive.


    A noter que NSData permet justement de prendre en compte des objets d'autres natures, l'exemple classique étant celui de NSColor que l'on enregistre dans un fichier préférences. Mais on en revient effectivement à  utiliser NSArchiver.

    <br />NSMutableArray *briquesArray = [[NSMutableArray alloc] init];<br /><br />NSData *briqueData=[NSArchiver archivedDataWithRootObject:maBrique];<br /><br />[briquesArray addObject:briqueData];<br /><br />etc.....<br />[briquesArray writeToFile:@&quot;BriquesFichier&quot; atomically:NO];<br /> <br />
    


    Mais je te rejoins sur le faite que quand on a une classe modèle autant implémenter NSArchiver dedans pour faire les choses proprement.
  • mylonmylon Membre
    06:11 modifié #17
    Merci à  tous pour vos réponses qui m'ont bien aidées.

    Me voici devant un nouveau problème. Savez-vous, si cela est possible, comment passer des paramètres entre deux ViewControllers ?

    J'arriver a changer de ViewController sans problème, mais pour passer des information au nouveau ViewController c'est autre chose...

    &nbsp; &nbsp; Casse_BriqueViewController *viewController2 = [[Casse_BriqueViewController alloc] init];<br />&nbsp; &nbsp; [self presentModalViewController:viewController2 animated:NO];
    
  • iSofTomiSofTom Membre
    06:11 modifié #18
    Un certain Aligator en a fait un tutoriel que tu pourras trouver dans la partie tutoriels de ce forum.

    Allez, je suis sympa je te mets le lien!
  • mylonmylon Membre
    06:11 modifié #19
    Super merci beaucoup ;)
  • mylonmylon Membre
    06:11 modifié #20
    Salut,

    Toujours dans mon projet d'application qui avance tout doucement, je cherches à  modifier l'image d'un UIButton. En fait j'ai un bouton par niveau et chaque bouton affiche 0, 1, 2 ou 3 étoiles en fonctions de l'avancement (un peu à  la manière d'angry birds). Le problème est que je n'arrive pas à  changer cette image (même en faisant des test très simple)...

    exemple : [niveau1 setImage:[UIImage imageNamed:@niveau_2.png] forState:UIControlStateNormal];
    ceci ne fonctionne pas.

    Cela peut paraitre tout simple mais en cherchant sur le net j'ai l'impressions que pas mal de gens ont ce problème.
Connectez-vous ou Inscrivez-vous pour répondre.