Javafx

Fermé
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020 - 27 févr. 2019 à 22:15
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 - 14 mars 2019 à 20:28
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.



Configuration: Windows / Chrome 72.0.3626.119

7 réponses

Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
27 févr. 2019 à 22:19
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).
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
28 févr. 2019 à 12:32
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();
});

0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
28 févr. 2019 à 14:38
Utilise les balises Java pour insérer du code Java.

Je ne vois pas de code pour la gestion des collisions. Tu as essayé quoi exactement ?
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
1 mars 2019 à 15:32
J'ai crée une shape :
Shape s = Shape.intersect(r,r3);
			 
			boolean collision = s.getBoundsInLocal().isEmpty();


puis apres je ne sais pas comment faire.
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
1 mars 2019 à 15:33
r3 est un rectangle pour tester la collision
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171 > ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
1 mars 2019 à 19:31
Il faut utiliser ce boolean collision au moment où tu vas déplacer un élément. S'il y a collision alors le mobile s'arrête.
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
1 mars 2019 à 21:05
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?
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
2 mars 2019 à 13:06
Pouvez vous m'aider svp, c'est une des dernières étapes de la création de mon jeux 2D, merci.
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
2 mars 2019 à 21:11
Ah ok je viens de comprendre, je n'avais pas vu, merci je vais essayer
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
2 mars 2019 à 21:46
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
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
2 mars 2019 à 23:58
Pardon, je me suis trompé, c'est
if(!collision)
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
3 mars 2019 à 10:37
Bonjour, merci de m'avoir répondu, j'ai compris le principe , c'est très intelligent, merci bcp
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
3 mars 2019 à 10:55
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();
});
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
3 mars 2019 à 13:05
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;

}
}
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
3 mars 2019 à 13:09
Il faudrait mettre le code où du coup ?
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
3 mars 2019 à 16:49
Pouvez vous m'aider svp
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
4 mars 2019 à 11:22
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) {
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
4 mars 2019 à 16:19
Ok merci c bon j'ai réussi.
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
4 mars 2019 à 17:13
Bonjour, comment faire pour quand il y a collision entre le cercle c et la line lr3, cela écrit dans la console "Coucou"???
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
4 mars 2019 à 17:14
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");
							  
							}
					
						}
						
						
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
4 mars 2019 à 23:12
Qu'est-ce qui ne marche pas ? Code d'erreur ou fonctionnalité ?
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
5 mars 2019 à 07:18
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
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
Modifié le 5 mars 2019 à 10:32
if(!collision ) { // collision = True veut dire qu'il y a une collision
        
    System.out.println("COucou");
         
}
0
ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
5 mars 2019 à 15:29
Mais si je veux créé cette condition qui s'applique tout le temps et non pas quand le jeux démarre , je la met donc où?
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171 > ikky33 Messages postés 43 Date d'inscription samedi 21 juillet 2018 Statut Membre Dernière intervention 7 janvier 2020
5 mars 2019 à 19:57
Quand tu appuies sur ECHAP ? Si oui, tu peux faire :
if(!collision && !r.isVisible()){
   System.out.println("Coucou");
}
r.setVisible(true);
// ...
0