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

JavaFX Discussion :

Objet balle(d'arme) fin de vie


Sujet :

JavaFX

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Objet balle(d'arme) fin de vie
    Bonjour,
    Je réalise un FPS en 3D en JavaFX, j'en suis actuellement à coder les balles qui sortent du canon
    J'ai un AnimationTimer et des écouteurs sur ma souris donc quand je "tire" mon arme fait des rafales, tout marche bien ici et j'ai donc la ligne "new Balle(coordonnées du joueur);" qui s’exécute de nombreuses fois
    Mon problème c'est la RAM, les objets balles ne se ferment visiblement jamais et à la longue la mémoire est vite consommée

    Voici le code, il est provisoire, c'est juste une balle (modélisée par une Box mais à la fin elle ne sera pas visible, la boite c'est juste pour déboguer) qui part dans la direction X depuis la tete du joueur. La balle disparait quand elle touche un mur ou les bords de la map:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    import javafx.animation.AnimationTimer;
    import javafx.scene.shape.Box;
    import javafx.scene.transform.Translate;
     
    public class Balle {
     
    	private static int[][][] maille = Monde.getMaille();
     
    	public Balle(double x, double y, double z){
    		Box balle = new Box(10,10,10);
    		Translate t = new Translate(x,-y,-z);
    		balle.getTransforms().addAll(t);
    		Main.getRoot().getChildren().add(balle);
     
    		AnimationTimer updater = new AnimationTimer(){
            	public void handle(long now){
     
            		t.setX(t.getX()+5);
     
                	if(maille[(int)Math.round((t.getX()+5000)/10)][(int)Math.round((t.getZ()+5000)/10)][(int)Math.round(t.getY()/10)] != 0 ){
                		Main.getRoot().getChildren().remove(balle);
                		this.stop();
                	}
            	}
            };
            updater.start();
     
    	}
    }
    Voilà comment faire pour que la JVM ferme mes objets Balle quand elles se sont mangé le mur. Merci d'avance.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    Euh, es-tu sur qu'avoir un AnimationTimer par balle plutôt qu'un timer global pour le "monde" du jeu soit la bonne approche ?
    -> JavaFX 2 GameTutorial Part 2 par Carl Dea, même si c'est pour un jeu 2D le principe devrait rester le même (note il utilise une TimeLine pour le main loop).
    -> Using the JavaFX AnimationTimer par Michael
    -> Comprendre la programmation d'un jeu vidéo - La boucle de jeu par Alexandre Laurent

    EDIT - autre exemple, ce générateur de particules :
    c'est le main loop qui gère la vie des particules et détruit celles devenues inutiles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // life span of particle
    allParticles.stream().parallel().forEach(Sprite::decreaseLifeSpan);
     
    // remove all particles that aren't visible anymore
    removeDeadParticles();
    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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Ok merci je regarderais tout ça.
    Je préfère mettre plusieurs animations timer pour éviter les problèmes de lag quand on tire beaucoup de balle, puisque lorsque je met par exemple un timer dans l'animationtimer du déplacement du joueur, ça le ralentit.
    Par contre il semble quand même que le garbage collector fasse son travail puisque j'ai énormément de mal à dépasser les 2Go de RAM (en partant de1.1Go), vient un moment où java semble faire de la place dans la mémoire.

Discussions similaires

  1. fin de vie d'un thread
    Par natoine dans le forum Général Java
    Réponses: 3
    Dernier message: 20/04/2009, 10h16
  2. Avec quoi realise t'on un objet (ex: une arme) en 3D
    Par SofEvans dans le forum OpenGL
    Réponses: 7
    Dernier message: 24/03/2009, 09h25
  3. Roadmap Eclipse et fin de vie ?
    Par Hikage dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/01/2009, 19h17
  4. [Scrum] instaurer en fin de vie d'un projet?
    Par hansaplast dans le forum Méthodes Agiles
    Réponses: 4
    Dernier message: 15/11/2008, 02h50
  5. Objet SQLManager, celui qui change votre vie !
    Par meliandah dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 15
    Dernier message: 18/05/2007, 20h21

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