problème sur les sprites

problème sur les sprites - Java - Programmation

Marsh Posté le 18-09-2008 à 00:17:25    

Bonsoir.s'il vous plaît j'ai besoin d'aide.voici ci dessous un bout de code.En fait le bout de code présent comme vous
le constater gère le déplacement du sprite.Ce qui se passe c'est que les déplacements à gauche comme à droite sont trop
rapides.Il faut être très délicat avec la souris pour qu'à chaque click le sprite ne se déplace que d'un cercle sinon le
sprite se déplace de 2 voir 3 cercles.Je ne sais donc pas comment faire pour qu'à chaque fois qu'on appuie que ce soit  
à gauche ou à droite que le sprite se déplace d'un cercle à chaque fois.J'aimerais savoir ce qu'il faut que j'ajoute pour
que les déplacements soient ordonnés.
Merci de me répondre.Comment utiliser les timers?
   
public static final int keyDelay = 10;
 
private boolean[] isDown = {false, false, false, false};
 
private long[] keyTick = {0, 0, 0, 0};
 
private int[] keyValue = {GameCanvas.LEFT_PRESSED, GameCanvas.RIGHT_PRESSED, GameCanvas.FIRE_PRESSED, GameCanvas.UP_PRESSED};
 
private boolean isRunning = true;
 
 public void checkKeys(int iKey, long currTick) {
        long elapsedTick = 0;
        //loop through the keys        
        for (int i = 0; i < 4; i++) {
            // by default, key not pressed by user            
            isDown[i] = false;
            // is user pressing the key            
           if ((iKey & keyValue[i]) != 0) {
                elapsedTick = currTick - keyTick[i];
                //is it time to toggle key state?                
               if (elapsedTick >= keyDelay) {
                    // save the current time                    
                    keyTick[i] = currTick;
                    // toggle the state to down or pressed                    
                    isDown[i] = true;
                }
            }
        }
    }
 
  public void run(){
       c1= a+y;//a correspond à la position en x du sprite et y correspond au diamètre de chaque cercle
       int iKey = 0;
        long lCurrTick = 0;
        // current system time in milliseconds;              
        load();
        g = getGraphics();
        while (isRunning) {
            lCurrTick = System.currentTimeMillis();
            iKey = getKeyStates();
            checkKeys(iKey, lCurrTick);
          if (isDown[fireKey]) {
             isRunning = false;
            }
            // position actuelle du van  
            int cx = Van.getX();
            int cy = Van.getY();
 
 
            if (((iKey & GameCanvas.LEFT_PRESSED) != 0) & (cx >= c1)) {
                Van.setFrame(1);
                // déplacer le van vers la gauche                
                cx -= y;
            }
 
            if (((iKey & GameCanvas.RIGHT_PRESSED) != 0) & (cx < c1)) {
                Van.setFrame(1);
                //déplacer le van vers la droite
                cx += y;
            }
       }
 
Van.setPosition(cx, cy);

Reply

Marsh Posté le 18-09-2008 à 00:17:25   

Reply

Marsh Posté le 19-09-2008 à 00:34:58    

Salut,
Après avoir décrypté ton message...
C'est du code dans une classe dérivée de Thread ?
 
Si oui, première chose, c'est tout sauf conseillé je pense de contrôler un jeu en utilisant des threads.
Si toutefois tu veux conserver cette méthode, peut-être que placer un Thread.sleep() (ou un truc du genre) peut calmer les ardeurs de ton programme.
 
Question : Ton programme, utilise-t-il 100% de processeur ?
 
@+


---------------
Site de rencontre
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed