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:
Voilà comment faire pour que la JVM ferme mes objets Balle quand elles se sont mangé le mur. Merci d'avance.
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(); } }
Partager