Cela fait un moment maintenant que j’essai de développer un shoot avec game develop. Un peu par ci un peu par là.
J’arrive en générale à palier à tous les problèmes sauf un… et de taille…
dès qu’il y a deux ennemis identique avec un code un peu complexe, c’est le bordel. par exemple:
un vaisseau arrive, s’ouvre, s’en suis une animation. Lorsque l’anim se termine un rayon laser sort du canon du vaisseau… lorsqu’il est tous seul… tout va bien… lorsqu’ils sont deux… les deux vaisseaux arrivent (les deux les mêmes). les deux vaisseaux on chacun leur animation (la même) et lorsque les lasers apparaissent, il apparaissent tous les deux sur le même vaisseau…(???) pendant que l’autre se retrouve en bout d’anim mais ne fais rien…
pareil… des canons sont sensés tirer de façon régulière… lorsqu’il y a trois canons en jeux, il n’y en a qu’un seul qui tir…
En fin, un vaisseau arrive, tir et s’en va… Et bien lorsqu’il sont plusieurs, le premier arrive et tir. En suite il s’en va… et bien tous ses confrères s’en vont avec lui alors qu’ils n’ont pas tiré…
Mes ennemis empiètent les un sur les autres et je n’arrive pas à gérer ce sérieux problème… c’est dommage ça met tout mon jeux à l’eau…
J’ai vue que dans la démo shoot them up plusieurs vaisseaux sont la et tir plusieurs fois chacun alors qu’ils sont plusieurs à l’écran, et il n’y a aucun soucis.
Association d’objet
Associe un tir à un vaisseau, et utilise la condition correspondante pour agir sur ce tir spécifique
Pour chaque objet
Utilise un évènement “Pour chaque objet” afin que GD passe en revue tous les objets concernés.
Tu peux aussi revenir à l’ancien système, donner à un vaisseau un numero id (variable initiale) identique à celui du tir
Ensuite “si vaisseau.numeroID == tir.numeroID alors …”
Dans ce genre de situation, il faut en effet traiter les ennemis un par un en utilisant “Pour chaque objet”.
La plupart du temps, il n’y a pas besoin d’utiliser cette évènement spécial car les actions agissent déjà sur tous les objets. Cependant, l’action “Créer un objet” ( notamment ) ne va pas pouvoir deviner quelle devrait se répéter pour chaque ennemi présent sur la scène ( et pour cause, c’est une action qui n’a rien à voir avec un quelconque objet, à part celui qu’elle créé ).
Imagine que tu veuille créer un objet “tir” pour chacun des ennemis de façon régulière : Si tu utilise “naivement” l’action, l’action ne sera faite qu’une fois et donc un seul tir sera créé.
Tu peux t’en sortir en t’assurant de déclencher cette action plus souvent ( genre tu déclenche l’action dès qu’une variable spécifique aux objets ennemis atteint un certain seuil, et tu augmente également cette variable progressivement mais aléatoirement pour chaque ennemi ( par exemple, tu ajoute toutes les 0.5 secondes un nombre compris entre 2 et 5 à cette variable ) ) mais ça ne résout pas le soucis car si le “seuil” est franchi pour deux ennemis ou plus en même temps, alors un seul tir sera créé. )
Non, la vrai solution est donc d’utiliser l’évènement “Pour chaque objet”. Cette évènement va considérer un par un les ennemis et va répéter ses conditions et actions pour chacun des objets que tu a choisi.
Pour faire court, il faut la plupart du temps utiliser l’évènement “Pour chaque objet X” quand tu va vouloir répéter une action qui n’est pas liée à ces objets X en particulier.
( Je sais pas si j’arrive à me faire comprendre, redemande moi au besoin )
Il faut activer l’extension Association d’objet pour avoir accès à l’association d’objets. Sinon, pour “Pour chaque objet”, c’est un événement spécial qui peut être trouvé dans “Autre…” (à côté de “Insérer un sous-événement”.
Voila un petit exemple d’évènement qui ne fonctionne pas… après réflexion je me dit que ça vient peut être du chronomètre…
Mais je ne sais pas comment tester
Ou j’utiliserai un évènement à retardement, qui s’enclenche x secondes après la création du vaisseau.
Tu peux aussi déclencher le tir lorsque la distance entre le joueur et le vaisseau est inférieur à 300 pixels (pour un 800x600).
Ce qui serait à mon avis plus simple … et plus réaliste dans un sens (les ennemis tireront si le joueur est assez près d’eux, iront ailleurs s’il reste trop loin).
par-contre il en reste encore un que je n’ai pas réussi à régler… C’est celui de mes lasers.
Alors ce sont des lasers continus, un sprite immobile, enfin immobile non… Il est sensé bouger avec sa base… (le vaisseau qui le tir…) et la je n’arrive pas à faire en sorte qu’un laser reste avec son vaisseau. ils vont toujours se coller au premier. Je n’ai pas réussit a utiliser l’association d’objet… Je l’ai activée mais je ne sais pas comment l’utilisée…
En tout cas merci beaucoup pour le tuyau concernant le chrono… Je me doutais qu’il y avait un problème avec ça mais je n’arrivais pas à le résoudre…
Si non, un évènement à retardement, qui s’enclenche x secondes après la création du vaisseau, c’est intéressant… Mais c’est ce que j’essai de créer depuis le début et je galère… Un chronomètre par vaisseau c’est bien mais pareil… Comment faire pour que le vaisseau se réfère au bon chronomètre? (Il doit y avoir des trucs que je ne sais pas du tout utiliser…)
Par-contre le tir lorsque le joueur est plus près d’eux c’est certes plus réaliste et au niveau du jeu en lui même c’est sympa mais pas tout le temps… parfoi le niveau fait plu d’in millier de pixel de haut et c’est bien que même les vaisseaux des extrémités canardent, ça fait plus de tir à éviter…