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

Langage Java Discussion :

[Probleme Changé]Optimisation de l'affichage de jeu


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut [Probleme Changé]Optimisation de l'affichage de jeu
    [Edit] Le lag que j'ai rencontré n'es pas du a mon probleme de recherche de colision mais plutot a l'affichage lui meme, voir plus bas pour détails[/Edit]

    Salut à tous et merci de votre attention !

    Voilà je suis en train de coder un petit jeu 2D du style space invaders et j'aimerais ameliorer mon algo de detection de colision entre les "Tirs" de mon vaisseau et les differents "Hostiles" se balandant dans l'espace.

    Le probleme est que lorsque j'ai 60 Tirs et 20 Hostiles le jeu lag enormement...
    Quelqu'un sait comment alleger tout ca ?

    De plus avec ma methode je ne test, que si le centre de l'hostile est dans le rectangle correspondant a l'image du tirs, je preffererais savoir si les deux rectangles sont en colision.

    Pour chaque Objet, que ce soit un "Tir" ou un "Hostile" je peux récuperer :
    vx - vitesse en x
    vy - vitesse en y
    width - largeur en x de l'image represantant l'objet
    height - largeur en y de l'image represantant l'objet
    p - le point des coordonnée centrées de l'objet (en effet le centre de l'image correspond a ce point donc pour la dessiné ca donne drawImage(image, p.getX()-width/2, p.getY()-height-2,null)

    Voilà a peu près le code (en simplifié mais la structure est la même)
    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
    17
    18
    19
    20
    21
    	private void checkTirWithHostiles () {
     
    		Tir t;
    		Hostile m;
     
    		for (int i = 0; i<this.hostiles.size(); i++) {
     
    			m = (Hostile) this.hostiles.get(i);
     
    			for (int j = 0; j<this.tirs.size(); j++) {
     
    				t = (Tir) this.tirs.get(j);
    				if (m.getPoint().getX()>t.getMinX() && m.getPoint().getX()<t.getMaxX()+t.getVx() && m.getPoint().getY()>t.getMinY() && m.getPoint().getY()<t.getMaxY()+t.getVy()) {
     
                                     //Je fais ce qu'il y a a faire en cas de collision
    				}
     
    			}
     
    		}		
    	}

    Edit : je viens d'avoir l'idée d'utiliser la classe Rectangle et la methode contains pour voir si le point est dedans... on vera. Mais n'hsitez pas a poster vos conseils ! Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Une petite discussion similaire recente (sur des collisions de Shape) : http://www.developpez.net/forums/sho...d.php?t=158097

    Tu devrais egalement pouvoir trouver des indications dans cet article : http://www.planetalia.com/cursos/index.jsp voir le chapitre 20, la version anglaise est sur la droite de la page.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Je regarde ca tout de suite.

    Merci

  4. #4
    Membre confirmé Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Le deuxieme lien est vraiment pas mal et très proche de mon petit jeu... le code de collision et de chargement est le meme d'ailleur...

    Bon ben je pense aps pouvoir mieux faire.

    Merci

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Note que le test de la boite englobante est un premier pas uniquement ; c'est une approximation permettant d'eliminer rapidement les non-contacts. En cas de recouvrement des boites tu dois faire des tests plus approfondis pour savoir si tes sprites (j'imagine que tu utilises des sprites bitmaps) se touchent correctement. Sinon dans un jeu final ca peut laisser au joueur une impression bizarre : le fait de se faire tuer sans avoir ete rellement touche par l'ennemi... ou au contraire d'etre super-puissant en zigouillant les streumeux sans vraiment bien viser...

    - tu peux parcourir les pixels de la zone de recouvrement et voir si des pixels non-opaque des images des deux sprites sont supperposes.

    - dans le cas ou ton sprites peut avoir des zones + ou - transparentes mieux vaut lui associer un bitmask (image binaire/monochrome 0-1) indiquant quelles zones sont solides ou "vides".



    - sinon tu peux egalement lui associer une Shape vectorielle mais dont le contour est une approximation de la zone occupee par les pixels.



    Les deux derniers cas demandent un peu plus de travail prealable (dans un editeur de sprites par exemple) mais peuvent aider le jeu car le traitement des collisions s'en trouve accellere. En plus ca permet de decider des zones actives qu'on doit toucher lorsqu'on vise un boss par exemple (qu'on doit toucher aux yeux, coeur, zone sensible, etc...). On peut dans ce cas utiliser des bitmaks/masques avec plusieurs couleurs pour distinguer les zones solides des zones actives, etc...



    ou plusieurs formes definies dans un fichier texte accompagnant le sprite.

    Bien sur tu peux aussi prendre en compte une certaine marge d'erreur (zone d'effet) histoire d'accelerer un tant soit peu les calculs.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre confirmé Avatar de RadicalBob
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 66
    Par défaut
    Oui non mais la je cherche meme pas a verifier qu'ils se touche en zone transparentes...

    Je verifie juste pours les rectangles. de toutes facon mes images sont assez carrées ou petites donc bon...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [css] Problemes de positionnement et d'affichage
    Par Arnard dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 22/06/2006, 14h46
  2. Réponses: 8
    Dernier message: 08/06/2006, 15h48
  3. [VBA-E]Probleme d'optimisation
    Par sk8bcn dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 30/05/2006, 20h14
  4. [JTable] probleme de constructeur et d'affichage
    Par hby dans le forum Composants
    Réponses: 3
    Dernier message: 01/05/2006, 16h43
  5. [VB]Probleme lecture fichier text et affichage
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/03/2006, 08h46

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