jeremeclip
Messages postés30Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 janvier 2008
-
24 nov. 2007 à 16:18
jeremeclip
Messages postés30Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 janvier 2008
-
26 nov. 2007 à 20:29
bonjours voila j'ai un probleme dans une application que je cree une table de pingpong avec une interface autour donc au debut j'ai cree les raquette et la balle avec un Graphics tout va bien puis je commence a coder une partit pour faire bouger les raquette du joueur par rapport au coordonner la tout va bien aussi mais quand je crre le code pour faire bouger la balle pour la renvoyer de l'autre coter de la table la probleme l'application ne d'affiche plus
voila une partit du code oui je mes les evennement des raquettes et la balles
[....]
final JPanel pane2 = new JPanel(){
private int balle_X = BALLE_X_DEPART;
private int balle_Y = BALLE_Y_DEPART;
public void paint(Graphics g) {
super.paint(g);
//dessine la table verte
g.setColor(new Color(couleur1, couleur2,couleur3));
g.fillRect(DISTANCE_BORD_X_TABLE , DISTANCE_BORD_Y_TABLE, LARGEUR_TABLE,HAUTEUR_TABLE );
//dessine la profondeur de la table
g.setColor(new Color(couleur4,couleur5,couleur6));
g.fillRect(DISTANCE_BORD_Y_TABLE_FONCER, DISTANCE_BORD_X_TABLE_FONCER, LONGUEUR_FONCER, LARGEUR_FONCER);
g.fillRect(DISTANCE_BORD2_Y_TABLE, DISTANCE_BORD2_X_TABLE, LARGEUR_FONCER2, LONGUEUR_FONCER2);
public void quitter(){ if(quiterPartie1 true && quiterPartie true){
System.exit(0);
}else if (quiterPartie1 == false){}
}};
pane2.addMouseMotionListener(new MouseAdapter(){
public void mouseMoved(MouseEvent événement) {
if(nouvelle == false){
int souris_Y = événement.getY();
int souris_X = événement.getX();
Y = souris_Y;
X = souris_X;
//actionne la raquette principale du joueur
if(souris_Y < RAQUETTE_ENFANT_Y_DEPART +15 && RAQUETTE_ENFANT_Y_DEPART + blocageRaquette33 > HAUT_TABLE +15 ){
RAQUETTE_ENFANT_Y_DEPART -= 4;
pane2.repaint();
}else if (souris_Y > RAQUETTE_ENFANT_Y_DEPART
[.....coupure du code tros long....]
et j'ai appris lors de mon tuto que l'ordinateur ne pouviat pas effectuer deux tache en meme temps donc on ma dit de mettre ce code
public void actionPerformed(ActionEvent evt){
//cree un fil et execute le code "tuer le temps"
//sans bloquer la fenetre.
Thread travailleur = new Thread(this);
travailleur.start();//Ceci appelle la methode run()
}
public void run(){...}
donc je pense que ce code suffirait pour faire marcher les 2 taches en meme temps mais je voudrias savoir ou doje le placer pour qu il marche et est ce que le code c'est bine celui ou il ya t i ldes modification a faire sur celui ci??
meric d'avance
A voir également:
Pb pour effectuer plusieur evenement en meme temps !!
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 24 nov. 2007 à 17:53
Salut:
Il ne faut pas utiliser trop de Threads, toutes les animations dans le jeu peuvent être faites dans un seul thread (Game Loop).
jeremeclip
Messages postés30Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 janvier 2008 24 nov. 2007 à 18:19
ouai mais le code
public void actionPerformed(ActionEvent evt){
//cree un fil et execute le code "tuer le temps"
//sans bloquer la fenetre.
Thread travailleur = new Thread(this);
travailleur.start();//Ceci appelle la methode run()
}
public void run(){...}
il faut que je place ou?? dans mon code pour pouvoir mettre un public void run ou je mettrais tout mes animation ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 24 nov. 2007 à 20:43
Salut:
Si j'ai bien compris, le jeu de tu es en train de développer est un jeu de ping-pong opposant un joueur avec un ordinateur.
Si tu veux gérer le mouvements du ballon et du raquette adversaire tu peux procéder ainsi:
Il y a une technique inspirée du domain de l'éléctronique dite [Time Base]. En utilisant cette technique la boucle principale du jeu
[Game Loop] doit s'arrêter pendant une durée qui est égale au plus grand commun diviseur [PGCD] des temps de rafraîchissement que les acteurs du jeu nécessitent.
Suppons que la balle bouge une fois par seconde et que le raquette bouge 4 fois par seconde, ceci implique que ces acteurs (balle, raquette) aura son tour le 1 seconde, 0.25 seconde respectivement.
Ici le plus grand commun diviseur est 0.25 seconde, c'est le temps qu'on va choisir comme [Time Base] pour arrêter de temps en temps notre [Game Loop]. Les autres temps de rafraîchissement du jeu seront calculés en fonction de ce [Time Base].
Par exemple, pour la balle, on a: 1 seconde / 0.25 seconde = 4 ticks.
// Classe parent de tout les acteurs du jeu
public abstract class Actor {
protected int x;
protected int y;
// Nombre de ticks pour chaque acteur, ceci est calculé en utilisant le Time Base
protected int ticks;
// Getters & setters
// Animer l'acteur: mettre à jour ses coordonnées
public abstract void act(); }
// Classe Balle
public class Ball extends Actor {
public static final int BALL_TOTAL_TICKS = 4;
public void act() {
++ticks; if (ticks%BALL_TOTAL_TICKS = = 0) {
// Mettre à jour les coordonnées x et y de la balle
}
}
}
// Classe Raquette adversaire, PC
public class Raquette extends Actor {
public static final int RAQUETTE_TOTAL_TICKS = 1;
public void act() {
++ticks;
if (ticks%RAQUETTE_TOTAL_TICKS == 0) {
// Mettre à jour les coordonnées x et y de la raquette
}
}
}
// Classe principale public static final int TIME_BASE 250; // Exprimé en milliseconde 0.25 seconde
private Ball ball = ...;
private Raquette pc = ...;
jeremeclip
Messages postés30Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 janvier 2008 24 nov. 2007 à 20:57
donc tout cela je le positionne ou dans mon code ? je le mes avec les les public void run.... ou je les mais dans la partie ou il y a les recepteru des mouvement de souris et out le reste ??
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 24 nov. 2007 à 21:02
jeremeclip
Messages postés30Date d'inscriptionjeudi 2 août 2007StatutMembreDernière intervention19 janvier 2008 26 nov. 2007 à 20:29
bon j'ai essayerton code je n'arrive pas tro pa la faire marcher donc j'ai obter pour les Thread et sa marche impect j'utilise 1 Thread et sa marche merci beaucoup comme meme j'essaye de le faire marcher apres avec ton code