Vagues ennemies...

Pour tout ce qui est fan arts, homebrew, shooters codés à la main, rip de sprites, doujins et toute autre productions artistiques ou logicielles faites maison.
Répondre
G43L
Mou-Stick
Messages : 10
Inscription : 26 févr. 2011, 06:20

Bonjour,

Je développe actuellement un shoot simple en C++ avec OpenGL. Les sprites sont en 3D et j'utilise une bibliothèque assez connue pour les collisions: Newton Game Dynamics. Mon prototype fonctionne.
Mais je réfléchis encore à la manière de programmer/scripter les attaques ennemies qui seront nombreuses et variées. Si quelqu'un s'est déjà penché sur la question, je serais content d'avoir du feedback.

Merci pour toute info,
G43L
//
// The code is the thing...
//
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Bonjour !

Des sprites en 3D ? Pourquoi pas... Mais ca ne s'appelle plus des sprites ;)

Quand à ce que tu veux... C'est tellement vague que je ne comprend pas trop où tu veux aller pour te donner une piste...

On dirait que t'es parti à l'arrache... Aucun plan de développement, pas d'étape de réflexion... C'est pas bien ca :) Meme moi qui ne fait pas ( plus ) de C++, j'ai toujours mon tit cahier pour poser par écris les problèmes, les solutions et y réfléchir.

viewtopic.php?f=29&t=13721

Toute la première partie te sera utile, et le début de la seconde partie aussi. Un sujet qui n'est que très peu abordé de front si tu as appris part le net. ( à l'école, je pense que l'on apprend ca mais j'y suis pas allé )
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
G43L
Mou-Stick
Messages : 10
Inscription : 26 févr. 2011, 06:20

Salut Gunny,

Ce n'est qu'un prototype pour l'instant, ce n'est en rien le projet final... J'ai deux grands points d'interrogation: les collisions et l'animation des objets du jeu. Ma question était relative à la manière de programmer les attaques ennemies (et surtout à partir du C/C++). Je cherche quelqu'un qui aurait déjà abordé ce point - justement dans le but de me documenter...

Merci pour ton lien, je l'ai déjà parcouru et je vais m'intéresser à la manière dont Gamemaker fonctionne. C'est déjà une piste :)
//
// The code is the thing...
//
Gunny
Empereur Bydo
Messages : 3404
Inscription : 15 mai 2006, 15:26
Localisation : Rayon chaussettes du Kiabi du coin
Contact :

Une collision apparait quand 2 objets entrent en contact ou se superposent.
La détection est un peu plus délicate quant à elle car tu dois vérifier si la géométrie de tes objets entre en contact ou se superposent ( en gros, si une partie d'un objet se trouve dans l'autre. ).

Pour l'animation d'un objet 3D, ca dépend ce que tu veux faire ^^
Si tu pars d'un objet avec des parties mobiles, ou si tu veut juste déplacer un objet.

Je n'ai pas une grosse connaissance sur ces deux sujets. Juste de la documentation assez difficile à comprendre surtout concernant les collisions. C'est déjà pas facile en 2D quand on joue avec des formes complexes... Alors avec un objet 3D complexe...
Si t'as un truc électronique cassé, ça se passe par là https://www.atelier-electrodd.fr/

-Je comprend rien à ce que tu dis...
-Pas grave... C'est pas en vivant plus longtemps qu'on deviens moins con.
G43L
Mou-Stick
Messages : 10
Inscription : 26 févr. 2011, 06:20

Merci Gunny pour tes infos.

J'ai réussi à utiliser la fonction http://www.newtondynamics.com/wiki/inde ... ionCollide - les collisions laser/ennemi ennemi/vaisseau fonctionnent..

Pour l'animation, j'ai pensé à définir les mouvements selon des types de courbes et de droites
ayant des points de départ et d'arrivée, etc... J'utiliserai diverses formules d'interpolation pour calculer les trajectoires. Ces mouvements doivent pouvoir être combinés en séquences et avoir une fin (quand la vague ennemie est entièrement détruite ou a quitté l'écran par exemple).

Maintenant, comment implémenter tout cela :)
//
// The code is the thing...
//
Avatar de l’utilisateur
Alec
King Fossile
Messages : 15783
Inscription : 12 juil. 2004, 18:04
Localisation : nstc-j

des vagues ennemies, moi je vois ça comme une partition qui donnera du rythme à un jeu quel qu'il soit !
Après c'est au game designer de décider quelle pression il met sur le joueur sur un niveau:
-début calme
-pics vers le milieu
-fin en déluge

Mais je crois pas qu'il y ai de règles précises, il y a juste des façons de rendre un jeu chiant et des manières de le rendre fun..enfin je crois .
ImageImageImage
Avatar de l’utilisateur
Radigo
Counter Stop
Messages : 7574
Inscription : 22 mai 2003, 17:31
Localisation : Paris
Contact :

J'avais posé la même question au dev de Drill et j'ai moi même expérimenté le truc plus tard, la bonne solution est une sorte de "partition" que le moteur va jouer.

Concrètement ça peut être un fichier où chaque ligne doit s’exécuter à un instant précis (un numéro de frame par exemple) et qui décrit quel ennemi arrive et son id de comportement (à toi de trouver le format de description que tu veux parser).

Tu peux envoyer une vague à la place d'un ennemi simple pour factoriser un peu, dans ce cas la vague aura un timer qui balancera des ennemis toutes les N frames par exemple. Mais la description de la vague risque de changer et il faudra que ton parseur s'adapte à plein de cas différents.

La méthode 1 ennemi / 1 ligne est la plus simple à mettre en place mais il faudra que tu te fasse un outil pour remplir ton niveau sinon c'est hyper galère (l'impression de coder dans la matrice...). Avec Excell tu peux déjà faire des trucs bien pour générer ton fichier texte...
"HYPER GAGE : 500%"
Image
G43L
Mou-Stick
Messages : 10
Inscription : 26 févr. 2011, 06:20

Merci pour vos réponses. Je retiens l'idée de partition.

- Radigo: je travaille avec le temps entre chaque frame, pas le nombre de frames. Cela permet de s'adapter à un frame rate différent tout en conservant la même vitesse de jeu. Si je te suis bien, je dois utiliser ce temps accumulé comme critère de base pour le déclenchement des événements du jeu décrits dans la "partition".

- On m'a parlé de LUA pour scripter le comportement des objets. Quelqu'un connaît-il ce langage? L'avez-vous utilisé dans le cas d'un shoot'em up?

Toute info est la bienvenue...
//
// The code is the thing...
//
Avatar de l’utilisateur
Radigo
Counter Stop
Messages : 7574
Inscription : 22 mai 2003, 17:31
Localisation : Paris
Contact :

G43L a écrit :je travaille avec le temps entre chaque frame, pas le nombre de frames. Cela permet de s'adapter à un frame rate différent tout en conservant la même vitesse de jeu.
Aïe. Ca veut dire qu'en cas de gros bourrage de sprites le jeu ne va pas ralentir mais comme l'affichage sera à la ramasse les frames seront affichées "de temps en temps". Imagine un jeu aussi exigent qu'un shmup où quand c'est rempli de boulettes tu vois la moitié des frames... moi j'y crois pas. Même si ça ralenti, la bonne solution pour les jeux exigents comme les shmups c'est d'afficher chaque frame en entier quel que soit le temps que ça prends.

Sérieux, fixe un frame rate 50 ou 60 fps pour un rendu télé, et sur PC je dirais 50, 75 ou 100 selon tes objectifs et pour rester compatible avec un max d'écrans.
"HYPER GAGE : 500%"
Image
G43L
Mou-Stick
Messages : 10
Inscription : 26 févr. 2011, 06:20

Radigo a écrit : Sérieux, fixe un frame rate 50 ou 60 fps pour un rendu télé, et sur PC je dirais 50, 75 ou 100 selon tes objectifs et pour rester compatible avec un max d'écrans.
OK, j'ai fixé un frame rate de 60 fps.

Voici une capture d'écran du jeu en question :)

Image
//
// The code is the thing...
//
Répondre