IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Conseils de structure pour un shoot'em up


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut Conseils de structure pour un shoot'em up
    Bonjour,

    Je suis en train de développer un shoot'em up et je me pose une question existentielle

    Je voudrais créer un script qui représente le niveau dans lequel le joueur évolue et mon choix de structure balance entre deux solutions :
    - 1 la solution temporelle : Les ennemies apparaissent à un instant t. Cela est bien pratique si on souhaite caler l'arrivée des ennemies sur la musique. On a donc une ambiance bien sympa. Par contre je risque d'avoir des souci si certains ennemis doivent être positionnés à un endroit précis (genre sur le sol) car la position peux varier un peu.

    - 2 la solution espace : Les ennemies sont activés dès que l'écran à atteind un certain point dans l'espace. La position des ennemies est donc bonne mais là, je ne peux plus caler proprement l'arrivage de mes ennemies à la musique.

    - 3 : Bah la c'est une autre solution à laquelle je n'aurais pas penser et qu'un forumeur sympas me donnerais

    Merci d'avance !

  2. #2
    Membre régulier Avatar de Caroline76
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 94
    Points : 110
    Points
    110
    Par défaut
    J'ai déjà développé un shooter comme ca, j'avais utilisé quelque chose proche de ton 1)

    Dans mon fichier script, j'avais quelque chose comme ca:

    UFO_ID, DELAY, POSX, POSY, AI_TYPE

    par exemple:

    UFO_SpaceWorm, 60000, 800, 300, 4

    crée au bout d'une minute de jeu un space worm à droite de l'écran, ayant le comportement 4 (ondule sinusoidalement et tire sur le joueur toutes les 3 secondes).

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Je ne sais pas à quoi ressemblent tes scripts mais je ne vois pas pourquoi tu ne pourrais pas gérer les deux (ou même d'autres) conditions ?

    MAT.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Points : 429
    Points
    429
    Par défaut
    Citation Envoyé par Higestromm Voir le message
    Je suis en train de développer un shoot'em up
    Les grands esprits se rencontrent, je vais me lancer aussi.


    Comme l'a dit Mat007, tu devrais pouvoir gérer les points 1 et 2 (et même 3 quand tu auras une idée).
    Il faut faire quelque chose de souple, sinon tu vas te sentir limité dans tes "scénarios" par la suite.

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Est-ce qu'il ne vaudrait mieux pas utiliser le point 2 pour tout ce qui est ennemi usuel, et une autre solution pour les boss (qui peuvent avoir une musique à eux).

    Autre idée, ta musique est (plus ou moins) composée de boucles. Tu peux identifier les débuts et fin de boucle, et lorsque tu souhaites caler un ennemi particulier sur la musique, tu le cales en fait sur le début d'une boucle particulière. Si le joueur est en retard, tu répètes la boucle tant que la condition d'apparition de l'ennemi n'est pas vraie. Si il est en avance, tu le fais patienter en ralentissant l'écran le temps que la boucle commence.

    Tu peux approfondir le concept pour gérer les très grand retards ou les très grandes avances, en imbriquant des boucles. Un exemple:

    1) description de la musique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <track name="main_theme">
    <loop name="big_loop" begin="0" end="4000">
      <loop name="inner_1" begin="0" end="1000">
        <loop name="inner_1_1" begin="0" end="500" />
        <loop name="inner_1_2" begin="500" end="1000" />
      </loop>
      <loop name="inner_2" begin="1000" end="4000">
        <loop name="inner_2_1" begin="1000" end="1500" />
        <loop name="inner_2_2" begin="1500" end="2000" />
        <loop name="inner_2_3" begin="2000" end="2500" />
        <loop name="inner_2_4" begin="2500" end="3000" />
        <loop name="inner_2_5" begin="3000" end="3500" />
        <loop name="inner_2_6" begin="3500" end="4000" />
      </loop>
    </loop>
    </track>
    2) description des ennemis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <position_ennemy name="pawn" behavior="0" y="4800" />
    <music_ennemy name="big_boss" behavior="4" 
       y_min="8000" track="main_theme" loop="inner_2_6" />
    Lorsque le joueur atteint la position 4800, l'ennemi pawn apparait à l'écran. Lorsqu'il atteint la position 8000, 2 solutions:
    1) le joueur est en avance - 2 sous-solutions:
    -- la boucle inner_2_6 n'est pas encore commencée, mais la boucle précédente l'est (petite avance): on attends sagement le début de la boucle inner_2_6.
    -- attendre le début de la boucle inner_2_6 serait trop long (par exemple, la boucle précédent inner_2_6 n'est pas encore commencée, mais la boucle parent de inner_2_6 (donc inner_2) l'est; ou la boucle parent de inner_2_6 n'est même pas encore commencée): on termine de jouer la boucle en court, et on jump directement à inner_2_6.

    2) le joueur est en retard - les sous-solutions:
    -- il est n'est pas beaucoup en retard (il devrait faire le trajet qui le sépare de la position 8000 avant que la boucle inner_2_6 ne soit commencée) : on rejoue la boucle.
    -- il s'est arrêté pour boire un café avec ses potes: on calcule au mieux le temps qu'il lui faudrait pour rejoindre la dite position, et on essaie de voire quelle boucle serait la plus adaptée, histoire de se mettre dans le cas n°1 mais en évitant qu'il soit trop en avance quand même.

    Un exemple: supposons que le joueur a besoin de 1000 unité de temps avant d'atteindre la position 8000. Au niveau du gestionnaire de musique, la boucle inner_2_6 va commencer dans 100 unités de temps. Si on attends le joueur en rejouant la boucle courante (inner_2_5), on risque de la répéter 3 fois, ce qui ne sera pas sympa pour les oreilles de notre joueur. Pour l'attendre, on remonte donc au mieux dans notre arbre des boucles - dans ce cas, on va recommencer à jouer inner_2 (et donc inner_2_1, puis inner_2_2, ...). Mais puisque cela va nous faire retourner trop loin en arrière (il faudra 3500 unités de temps avant de retrouver inner_2_6), on ne jouera que inner_2_1 et inner_2_2. Au moment ou le joueur sera à la position 8000, il devrait rester 100 unités de temps avant la fin de la boucle inner_2_2 - on pourra donc sauter directement à inner_2_6.

  6. #6
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    si le déplacement de ta caméra est géré en fonction du temps écoulé normalement tu seras toujours au même endroit au même moment donc tu peux aussi calculer la distance à laquelle placer ton ennemi en fonction du temps écoulé.

    Ta caméra en début de niveau est à x = 0
    Ta musique commence au déplacement de ta caméra. Tu veux placer un ennemi à 35 sec. Tu multiplies 35 par la vitesse de ta caméra qui doit être en unité/secondes et t'obtiens ton x.

    En théorie ça fonctionne en pratique je pense aussi ^_^
    Edit : en fait la "synchro" entre threads n'est sans doute pas assez précise pour être sur à 100 % du résultat

  7. #7
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    d'autres solutions:
    utiliser un script en BulletML pour génerer pas que les tirs, mais aussi les ennemis.

    utiliser le format MIDI pour générer des ennemis à un instant précis

    je suppose que tu déplace ton epsace de jeu dans un monde. du moment qu'une cible se déplace pas, elle sera au bon endroit au moment où elle apparaît.

  8. #8
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bonjour,

    Tout dabord, merci pour toutes vos réponses Cela m'éclaire vraiment !
    Je pense que vais partir sur un script avec un spawn d'ennemi basé sur le temps ainsi qu'une position absolue par rapport au niveau.
    Comme ca, je ne serais jamais embêter par la position des ennemies et je pourrais tout bien caler par rapport à la musique.
    Pour mes ennemies, j'ai prévu 2 modes de fonctionnement :
    - Le mode con : les ennemis suivent un chemin que je vais surement faire de 3 types : Courbe de bézier, linéaire, sinusoidale. La cadence de tir sera définie par leurs équipement.
    - Le mode malin : l'ennemi est diriger par une petite IA. Plusieurs type d'IA sera disponible.

    Pour les Boss, j'avoue ne pas encore trop savoir quoi faire car j'aime bien les Gros Boss que l'on détruit au fur et a mesure et qui laissent aparaitre un point faible à un moment donné. Ce genre de comportement est trop différent d'un ennemi classique et je n'ai pas encore réfléchit à cela.

  9. #9
    Membre averti
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Points : 392
    Points
    392
    Par défaut
    si je peux me permettre une question: pourquoi des courbes de Bézier?
    Les courbes de Catmull-Rom sont bien plus faciles à mettre en place et tu sauras à coup sûr par quels points ta courbe passera. Ok, niveau structure, tu auras des points et des vecteurs tangents à la courbe (à la place des points de contrôle), mais je trouve ca rend l'utilisation de la courbe plus facile.

    mon blog n'est plus mis à jour ces derniers temps, mais tu y trouveras un algo et une expliquation des courbes: http://kirin-fx.net/blog/?p=44

  10. #10
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bah j'avais choisis les courbes de bézier car je ne conaissait que celles là

    Je vais regarder ce que tu m'a dit, ca à l'air bien intéressant

Discussions similaires

  1. [RegEx] Conseil structure pour bdd dictionnaire
    Par loopback dans le forum Langage
    Réponses: 1
    Dernier message: 27/12/2007, 19h50
  2. [conseil] client ssh pour windows
    Par bambou dans le forum Internet
    Réponses: 7
    Dernier message: 29/09/2005, 18h09
  3. [conseils]Que faire pour m'entraîner?
    Par nicolaskarp dans le forum Général Java
    Réponses: 8
    Dernier message: 20/07/2005, 23h36
  4. Conseil choix structure STL
    Par SteelBox dans le forum SL & STL
    Réponses: 3
    Dernier message: 15/03/2005, 02h13
  5. cherche conseil sur livre pour jbuilder
    Par med1 dans le forum JBuilder
    Réponses: 3
    Dernier message: 09/06/2004, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo