Bonjour,
je fais un petit jeu (une sorte de mini-remake de Mario), je voudrais que lorsque mon personnage saute, un son s'enclanche. Seulement, on entends que le tout début du son (à peine audible)
Voilà la partie de ma classe principale qui gère les événements du jeu:
le thread du jeu (toujours dans la class principale):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 this.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent ke){ if(ke.getKeyCode()==ke.VK_RIGHT){moveX="right";} if(ke.getKeyCode()==ke.VK_LEFT){moveX="left";} if(ke.getKeyCode()==ke.VK_A && Mario.getJump()==false && canJump==true){Mario.jump(true); canJump=false;} } public void keyReleased(KeyEvent ke){ if(ke.getKeyCode()==ke.VK_RIGHT){moveX="stop";} if(ke.getKeyCode()==ke.VK_LEFT){moveX="stop";} if(ke.getKeyCode()==ke.VK_A){canJump=true; Mario.jump(false);} } });
et la partie de ma classe personnage qui gère les mouvements (dont le saut)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public void run(){ while(run!=null){ //controle si Mario marche et si on est à l'une des extremités du niveau ou non, puis dessine le fond. Si on est pas a l'extrémité, le fond se déplace, sinon il ne bouge plus if(moveX=="right" && Mario.getPosX()+Mario.getSizeX()>getSize().width-Mario.getMargeX() && positionBackground>-1200){positionBackground-=Mario.getSpeedWalk();} if(moveX=="left" && Mario.getPosX()-Mario.getSizeX()<Mario.getMargeX() && positionBackground<0){positionBackground+=Mario.getSpeedWalk();} one.show(positionBackground); //contrôle si mario est au milieu du niveau ou non. Si on est à l'extrémité du niveau, il doit pouvoir aller jusqu'au bout, sinon il est limité par une marge if(positionBackground<0){Mario.touchBoundL(false);}else{Mario.touchBoundL(true);} if(positionBackground>-1200){Mario.touchBoundR(false);}else{Mario.touchBoundR(true);} //contrôle si Mario tombe et agit en conscéquence if(Mario.getPosY()+Mario.getSizeY()<580){Mario.fall(true);}else{Mario.fall(false);} Mario.walk(moveX); joueur.show(); try{run.sleep(25);}catch(InterruptedException ie){System.out.println("problème avec le thread");} repaint(); } } }
Voilà, j'éspère que vous pourrez m'aider. J'ai penser à faire une class "son" qui implémenterait runnable et gérerait les sons dans un autre thread, mais je ne sais pas trop comment lui faire jouer plusieurs sons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public void walk(String direction){ //si le personnage tombe if(fall==true && jump==false){posY+=speedFall; if(current==bigWalkRight1 || current==bigWalkRight2 || current==bigWaitRight || current==bigJumpRight){current=bigWalkRight2;} else{current=bigWalkLeft2;} } //si le personnage saute if(jump==true && fall==false){ soundJump.play();//ici il doit jouer le son if(current==bigWalkRight1 || current==bigWalkRight2 || current==bigWaitRight || current==bigJumpRight){current=bigJumpRight;} else{current=bigJumpLeft;} if(posY>startPoint-high){posY-=speedJump;} else{jump=false;} } //si le peronnage va à gauche if(direction=="left"){ if(touchBoundL==false){if(posX>margeX){posX-=speedWalk;}} else{if(posX>0){posX-=speedWalk;}} if(fall==true && jump==false){current=bigWalkLeft2;} else if(jump==true && fall==false){current=bigJumpLeft;} else if(fall==false && jump==false){ if(wait>0 && wait<=temps/2){current=bigWalkLeft1;} if(wait>temps/2 && wait<=temps){current=bigWalkLeft2;} wait--; if(wait<=0){wait=temps;} } } //si le personnage va à droite else if(direction=="right"){ if(touchBoundR==false){if(posX+current.getWidth(IO)<width-margeX){posX+=speedWalk;}} else{if(posX+current.getWidth(IO)<600){posX+=speedWalk;}} if(fall==true && jump==false){current=bigWalkRight2;} if(jump==true && fall==false){current=bigJumpRight;} else if(fall==false && jump==false){ if(wait>0 && wait<=temps/2){current=bigWalkRight1;} if(wait>temps/2 && wait<=temps){current=bigWalkRight2;} wait--; if(wait<=0){wait=temps;} }//fin du if fall==false && jump==false }//end of direction=="right" //si le personnage ne bouge pas else{ if((current==bigWalkRight1 || current==bigWalkRight2) && fall==false && jump==false){current=bigWaitRight;} else if((current==bigWalkLeft1 || current==bigWalkLeft2) && fall==false && jump==false){current=bigWaitLeft;} } showPersonnage(); }
Merci d'avance
Partager