Java 2D & Threads

Résolu
HyperDrive Messages postés 2 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 6 avril 2007 - 5 avril 2007 à 18:32
HyperDrive Messages postés 2 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 6 avril 2007 - 6 avril 2007 à 16:58
Bonjour à tous,


Je voudrais créer un jeu de strategie ou l'on gère plusieurs vaisseaux
spatiaux que l'on peut déplacer en même temps etc. Sachant qu'il peut
avoir beaucoup de vaisseaux, je voudrais si c'est la bonne solution de
faire un thread par vaisseau qui gere l'affichage, les deplacement etc.
Si non, quelqu'un a t il une solution plus optimisée en terme de
ressource et de fluidité d'affichage?


Merci.

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 avril 2007 à 19:17
un seul thread pour l'affichage devrait amplement suffire : le thread tourne en permanence (boucle d'attente passive avec un sleep) qui ne fait que raffraichir l'affichage selon les positions des vaisseaux, thread séparé de celui de gestion du jeu en lui même bien évidement !

L'utilisation de threads ne permettent d'accèlérer un programme que si le nombre de threads est inférieur ou égal au nombre d'unité de calcul du PC (CPU ou cores) => ca ne sert à rien de faire 1000 threads, ca va ralentir énormément ton PC (synchronisation des threads par le système, changement de contextes sans arrêts, etc.) au lieu de rendre les choses plus fluides !
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
5 avril 2007 à 19:26
Salut:

Pas besoin de faire les choses comme tu l'avais décrit, car de cette façon on complique les choses tantqu'on peut la faire autrement mais avec la moindre de complexité.

Dans les jeux en général, il y a ce qu'on appelle [game loop] c'est le coeur du jeu dont laquelle :

1. On affiche les acteurs du jeu
2. On met à jour les positions des acteurs
3. On fait le rafraîchissement de l'écran et on revient au point 1.

Pour les vaisseaux, il suffit d'utiliser un peut d'intelligence artificielle pour leurs donner un comportement bien determiné.

bool gameOver = false;
while (!gameOver) {
    // dessiner les actors
    // mettre à jour la scène (Intelligence artificielle,
    // détection des collisions, gérer clavier, joystick, souris, ...)
    // effacer le fond

    try {
       Thread.sleep (DELAY);
    }
    catch (InterruptedException e) {}
}

C'est une petite goutte du grand océan de la création des jeux.


________________________________________________________________________________
A.B. : 
"Dieu nous donne des mains, mais il ne bâtit pas les ponts"
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
5 avril 2007 à 19:50
Salut,

regarde cett source (ICI) elle montre comment faire un début de jeu.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
HyperDrive Messages postés 2 Date d'inscription mardi 19 août 2003 Statut Membre Dernière intervention 6 avril 2007
6 avril 2007 à 16:58
Merci pour vos réponses (extrêmement rapides qui plus est), c'est
exactement ce dont j'avais besoin pour avancer. Je vais effectuer
quelques test et je vous tiens au courant si quelque chose de nouveau
se présente.


Merci encore!
0
Rejoignez-nous