begin process at 2012 02 15 10:52:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Multimédia

 > 

Java2D

 > 

pb pour effectuer plusieur evenement en meme temps !!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb pour effectuer plusieur evenement en meme temps !!

samedi 24 novembre 2007 à 16:18:34 | pb pour effectuer plusieur evenement en meme temps !!

jeremeclip


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

[QUOTE]

[....]
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);
                

                                  [...coupeure trop long.........]
        
                
                //Dessine le filet
                g.setColor(new Color(couleur16, couleur17, couleur18));
                g.drawLine(POINT_LIGNE_HAUT, LIGNE_COMMENCE, POINT_LIGNE_BAS, LONGUEUR_LIGNE);
                g.drawLine(POINT_LIGNE_HAUT2, LIGNE_COMMENCE, POINT_LIGNE_BAS2, LONGUEUR_LIGNE);
                g.drawLine(POINT_LIGNE_HAUT3, LIGNE_COMMENCE, POINT_LIGNE_BAS3, LONGUEUR_LIGNE);
                
                //dessine l'ombre du filet
                g.setColor(new Color(couleur19, couleur20, couleur21));
                g.drawLine(POINT_LIGNE_HAUT4, LIGNE_COMMENCE, POINT_LIGNE_BAS4, LONGUEUR_LIGNE);
                
                //dessine la balle de ping pong
                g.setColor(new Color(couleur22,couleur23 , couleur24 ));
                g.fillOval(balle_X, balle_Y, 10, 10);
                
//                indique les coordoner de la souris  a effacer par la suite
                g.drawString("Y: "+Y+" X: "+X+" i:"+i, 30, 10);
                    
                run1();
                if(nouvelle2 == true){
                    Graphics2D surface = (Graphics2D) g;
                    surface.setPaint(new Color(0, 0, 255, 64));
                      surface.setFont(new Font("SansSerif", Font.ITALIC+Font.BOLD, 30));
                      surface.drawString("Nouvelle Partie", 30, 110);
                      surface.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                   
                }
                
                if(pointJoueur >= 21 && texteGagant2 == true){
                    texteGagant = true;
                }else if (texteGagant2 == false){
                    texteGagant = false;
                }
                if(texteGagant == true && pointJoueur > pointOrdi && pointJoueur-2 >= pointOrdi ){
                    Graphics2D surface = (Graphics2D) g;
//                      // tracé du texte en transparence sur l'image
                      surface.setPaint(new Color(0, 0, 255, 64));
                      surface.setFont(new Font("SansSerif", Font.ITALIC+Font.BOLD, 30));
                      surface.drawString("Vous avez gagné", 30, 110);
                      surface.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
                      quiterPartie = true;
                     
                    repaint();
                }else if (texteGagant == false){
                    repaint();
                }
                quitter();
                serviceEnfant();
                run();
            }
            
            public void run(){
                while(true){
                    if(balleService){//si la balle est en mouvement
                        //Etape1. La balle se deplace t'elle vers la gauche?
                        if(déplacementGauche  && balle_X > BALLE_X_MIN){
                            rebondPossible = (balle_Y >= departRaquetteOrdi
                                    && balle_Y < (departRaquetteOrdi +
                                    departRaquetteOrdi) ? true : false);
                            balle_Y -= deplacmentVertical;
                            balle_X -= INCREMENTATION_BALLE;
                        }
                    
                        
                    }
                }
            }    
            

            public void run1(){
                if(nouvelle == true){
                    nouvelle2 = true;
                i++;
                RAQUETTE_ENFANT_Y_DEPART = 95;
                RAQUETTE_ENFANT_Y2 = 226;
                RAQUETTE_ENFANT_Y3 = 226;
                
                if(i == 200){
                        nouvelle = false;
                    }
            
                }else if(nouvelle == false){
                    nouvelle2 = false;
                    i = 0;
                }
            }
            
            private void serviceEnfant(){
                int raquetteJoueur = RAQUETTE_ENFANT_Y_DEPART;
                balleService = true;
                balle_X = RAQUETTE_ENFANT_X -5;
                balle_Y = raquetteJoueur +10;
                
                if(service == false && balle_Y > HAUTEUR_TABLE / 2){
                    deplacmentVertical = -1;
                }else{
                    deplacmentVertical = 1;
                }
                
            }
            
            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....]


                        pane2.repaint();
                    }else if(souris_X > RAQUETTE_ENFANT_Y3 +15 && RAQUETTE_ENFANT_Y3 + blocageRaquette44 < LARGEUR_TABLE -6 && souris_Y < LIGNE2_COMMENCE){
                        RAQUETTE_ENFANT_Y3 += 3;
                        pane2.repaint();
                    }}}});

[...]
[/QUOTE]



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

[QUOTE]

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(){...}

[/QUOTE]

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

samedi 24 novembre 2007 à 17:53:37 | Re : pb pour effectuer plusieur evenement en meme temps !!

Ombitious_Developper

Réponse acceptée !
Salut:

Il ne faut pas utiliser trop de Threads, toutes les animations dans le jeu peuvent être faites dans un seul thread (Game Loop).
samedi 24 novembre 2007 à 18:19:23 | Re : pb pour effectuer plusieur evenement en meme temps !!

jeremeclip

Réponse acceptée !
ouai mais le code

[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(){...}

[/CODE]

il faut que je place ou??  dans mon code pour pouvoir mettre un public void run ou je mettrais tout mes animation ?
samedi 24 novembre 2007 à 20:43:37 | Re : pb pour effectuer plusieur evenement en meme temps !!

Ombitious_Developper

Réponse acceptée !
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 = ...;

public void gameLoop() {
    while(true) {
    
       // Actionner les acteurs
       pc.act();
       ball.act();

       // Pause
       try {
          Thread.sleep(TIME_BASE);
        } catch (InterruptedException ie) {}
    }
}

Bye.
samedi 24 novembre 2007 à 20:57:58 | Re : pb pour effectuer plusieur evenement en meme temps !!

jeremeclip

Réponse acceptée !
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 ??


samedi 24 novembre 2007 à 21:02:55 | Re : pb pour effectuer plusieur evenement en meme temps !!

Ombitious_Developper

Réponse acceptée !
Salut:

Tout dépendera de ta conception.

Bye.
samedi 24 novembre 2007 à 23:59:42 | Re : pb pour effectuer plusieur evenement en meme temps !!

jeremeclip

Réponse acceptée !
bon je viasessayer cela , je te tine au courant
lundi 26 novembre 2007 à 20:29:16 | Re : pb pour effectuer plusieur evenement en meme temps !!

jeremeclip

Réponse acceptée !
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

jerem721


Cette discussion est classée dans : ligne, table, raquette, balle, if


Répondre à ce message

Sujets en rapport avec ce message

JTable, problème d'affichage [ par Kanouch ] Bonjour,j'essaie de créer une JTable à deux colonnes dans laquelle j'ajoute des éléments ligne par ligne. Je tape dans deux zones de texte et je stock Deplacement [ par jeremeclip ] bonjours a tous  voila j'ai un petit probleme sur mon code qui fait 1200 lignes ^^ voila le probleme je cree une application pour jouer au ping pong d Requête SQL [ par puman ] Bonjour tout le monde,g une petite kestion, je vais essayer d'être le plus clair possible.Voilà je souhaiterais insérer une ligne dans une table d'une JDBC ne supprime pas les ligne des table, pk??!! [ par iscalibar ] try{Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);int res=st.executeUpdate("DELETE FROM PATIENT WHERE P un CheckBox a chaque ligne d'une table [ par hlimaiem ] Limaiem heykelComment inserrer un CheckBox dans chaque ligne d'un JTable (la syntaxe exacte) puisque ce checkbox designera si l'element sera supprimer JTable et requête sql [ par toukourou ] Bonjour à tous! Je souhaiterais insérer dans une table sql les données d'un JTable remplit par un fichier Excel. En effet, je ne vois pas comment fa Colorier Ligne JTable [ par dammex ] Bonjour, je souhaite afficher d'une couleur rouge tout une ligne d'un Jtable. Pour cela j'ai dans une classe écrit la méthode suivante: public stati selectionne une ligne depui une table en java [ par benabdessamed ] bonjour, je veut sélectionné une ligne depuis une table puis l'affiché le contenu de cette ligne dans des jtextfield avec java qq peut m'aide merc netbeans table [ par bossmed ] [i][size=300]je suis au cours de faire une intefrace sur le netbeans qui affiche une liste d'employé dans un tableaux qui contient non, prénom,cin je couleur de cellule dans une JTable [ par javateux ] bonjour, voila mn probleme:j veu colorer des cellules selectionnées dans une table et les garder en couleur, existe-t-il des proprietés pour la table


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales