Javafx
ikky33
Messages postés
43
Date d'inscription
Statut
Membre
Dernière intervention
-
Jithel Messages postés 843 Date d'inscription Statut Membre Dernière intervention -
Jithel Messages postés 843 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bonjour,
J'aimerais savoir comment faire pour créer une collision(prenons pour exemple un cercle c et un rectangle r), r peut se déplacer à l'aide de l'animation du clavier aT, j'aimerais, quand je déplace le cercle, que ce dernier ne puisse pas traverser le rectangle r (dans mon cas r est un mur car je fais un jeux 2D) merci de bien vouloir m'aider.
Bonjour,
J'aimerais savoir comment faire pour créer une collision(prenons pour exemple un cercle c et un rectangle r), r peut se déplacer à l'aide de l'animation du clavier aT, j'aimerais, quand je déplace le cercle, que ce dernier ne puisse pas traverser le rectangle r (dans mon cas r est un mur car je fais un jeux 2D) merci de bien vouloir m'aider.
Configuration: Windows / Chrome 72.0.3626.119
7 réponses
Dans la fonction qui permet de gérer les événements claviers, il faut créer un filtre pour ce qui est de déplacer le cercle par rapport aux coordonnées futures de ce cercle. Si ces coordonnées rentrent en collision avec un rectangle alors ne rien faire (ou plutôt : si ces coordonnées ne rentrent pas en collision avec un rectangle, le déplacer).
Sans code, demande vague et donc réponse vague.
Poste du code Java dans les balises Java du forum (bouton <> dans le menu d'édition puis colle dans ton code dans les balises).
Sans code, demande vague et donc réponse vague.
Poste du code Java dans les balises Java du forum (bouton <> dans le menu d'édition puis colle dans ton code dans les balises).
Bonjour, merci de m'avoir répondu, j'avais déjà crée une animation de clavier aT, j'avais prévue de mettre dans la condition de collisions aT.stop();, mais cela ne marche pas, avez vous une solution? voici mon code de l'événement :
//Création animation clavier pour pouvoir déplacer le cercle c :
HashSet<KeyCode> tab = new HashSet<KeyCode>();
AnimationTimer aT = new AnimationTimer() {
public void handle(long l) {
for(KeyCode t: tab) {
if (c.getLayoutX() > 487){
c.setLayoutX(487);
}
if (c.getLayoutY() > 287){
c.setLayoutY(287);
}
if (c.getLayoutY() < -283){
c.setLayoutY(-283);
}
if (c.getLayoutX() < -483){
c.setLayoutX(- 483);
}
switch(t){
case Z :
c.setLayoutY(c.getLayoutY()-10);
break;
case S:
c.setLayoutY(c.getLayoutY()+10);
break;
case D:
c.setLayoutX(c.getLayoutX()+10);
break;
case Q:
c.setLayoutX(c.getLayoutX()-10);
break;
case ESCAPE:
r.setVisible(true);
exit.setVisible(true);
re.setVisible(true);
}
}
};
};
scene.setOnKeyPressed(e ->{
boolean wasEmpty = tab.isEmpty();
if(tab.add(e.getCode()) && wasEmpty)
aT.start();
});
scene.setOnKeyReleased(e ->{
if(tab.remove(e.getCode()) && tab.isEmpty())
aT.stop();
});
D'accord, merci de m'avoir répondu, pouvais vous me dire où faut-il mettre ce boolean exactement et comment faut-il faire svp car je suis entrain de faire un jeux en 2d et je débute en javafx.merci(je viens de penser, vu que je vais mettre beaucoup de composants qui font aufis de mur dans mon jeux , j'avais penser de mettre tous ces composants dans un tableau, est une bonne idée?
J'ai essayé mais cela ne marche pas, dans la condition, on accélère la vitesse et ce n'est pas cela que je recherche, je voudrais, que le cercle c ne puisse pas traverser le rectangle r3, j'ai déjà crée avant le code qui permet de déplacer le cercle c, j'ai penser, que, quand il y a collision, l'animation aT qui permet de déplacer le cercle s’arrête, mais le joueur ne pourra plus déplacer le cercle pour pouvoir se déplacer ailleurs, avez vous une idée?merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
La collision ne marche pas, le cercle traverse encore le rectangle, voici mon code, pouvez vous m'aider svp :
//Collisions :
Shape s = Shape.intersect(c,r3);
boolean collision = s.getBoundsInLocal().isEmpty();
//Création animation clavier pour pouvoir déplacer le cercle c :
HashSet<KeyCode> tab = new HashSet<KeyCode>();
AnimationTimer aT = new AnimationTimer() {
public void handle(long l) {
for(KeyCode t: tab) {
switch(t){
case Z :
c.setLayoutY(c.getLayoutY()-10);
break;
case S:
c.setLayoutY(c.getLayoutY()+10);
break;
case D:
c.setLayoutX(c.getLayoutX()+10);
break;
case Q:
c.setLayoutX(c.getLayoutX()-10);
break;
case ESCAPE:
r.setVisible(true);
exit.setVisible(true);
re.setVisible(true);
}
if(!collision) {
switch(t){
case Z :
c.setLayoutY(c.getLayoutY()-10);
break;
case S:
c.setLayoutY(c.getLayoutY()+10);
break;
case D:
c.setLayoutX(c.getLayoutX()+10);
break;
case Q:
c.setLayoutX(c.getLayoutX()-10);
break;
}
}
if (c.getLayoutX() > 496){
c.setLayoutX(496);
}
if (c.getLayoutY() > 295){
c.setLayoutY(295);
}
if (c.getLayoutY() < -292){
c.setLayoutY(-292);
}
if (c.getLayoutX() < -493){
c.setLayoutX(- 493);
}
};
};
};
scene.setOnKeyPressed(e ->{
boolean wasEmpty = tab.isEmpty();
if(tab.add(e.getCode()) && wasEmpty)
aT.start();
});
scene.setOnKeyReleased(e ->{
if(tab.remove(e.getCode()) && tab.isEmpty())
aT.stop();
});
Utilise les balises java stp pour insérer ton code.
if(!collision) { // cette ligne a été déplacée switch(t){ case Z : c.setLayoutY(c.getLayoutY()-10); break; case S: c.setLayoutY(c.getLayoutY()+10); break; case D: c.setLayoutX(c.getLayoutX()+10); break; case Q: c.setLayoutX(c.getLayoutX()-10); break; case ESCAPE: r.setVisible(true); exit.setVisible(true); re.setVisible(true); } switch(t){ case Z : c.setLayoutY(c.getLayoutY()-10); break; case S: c.setLayoutY(c.getLayoutY()+10); break; case D: c.setLayoutX(c.getLayoutX()+10); break; case Q: c.setLayoutX(c.getLayoutX()-10); break; } }
Ce code tu le mets après :
Shape s = Shape.intersect(c,r3); boolean collision = s.getBoundsInLocal().isEmpty(); //Création animation clavier pour pouvoir déplacer le cercle c : HashSet<KeyCode> tab = new HashSet<KeyCode>(); AnimationTimer aT = new AnimationTimer() { public void handle(long l) { for(KeyCode t: tab) {
Bonjour, comment faire pour quand il y a collision entre le cercle c et la line lr3, cela écrit dans la console "Coucou"???
Voici mon code, mais il ne marche pas , pouvez vous m'aider svp :
//Création animation clavier pour pouvoir déplacer le cercle c : HashSet<KeyCode> tab = new HashSet<KeyCode>(); AnimationTimer aT = new AnimationTimer() { Shape s = Shape.intersect(c,lr3); boolean collision = s.getBoundsInLocal().isEmpty(); public void handle(long l) { for(KeyCode t: tab) { switch(t){ case Z : c.setLayoutY(c.getLayoutY()-10); break; case S: c.setLayoutY(c.getLayoutY()+10); break; case D: c.setLayoutX(c.getLayoutX()+10); break; case Q: c.setLayoutX(c.getLayoutX()-10); break; case ESCAPE: r.setVisible(true); exit.setVisible(true); re.setVisible(true); if(collision ) { System.out.println("COucou"); } }
J'ai juste oublier de mettre case ... Et un break a la fin , mais le problème est que je suis obligé de mettre le case et après un lettre, si je met case P, et que si j'appuis sur p et qu'il y a collision, il y aura écrit coucou dans la console, mais ce n'est pas cela que je cherche, j'ai écrit un code qui permet de déplacer le cercle , j'ai créé un rectangle r3 qui est un mur dans mon jeux, j'aimerais tout simplement que le joueur qui incarne le cercle ne puisse pas traverser la cercle , et que si il est rentré en collisions avec le rectangle , qu'il puisse aller ailleurs et qu'il ne reste pas bloqué.pouver vous m'aider svp car c'est presque la fin de mon jeux et j'aimerais bien le finir.merci