Grüße mal wieder muss Ich euch belästigen, dieses mal geht es um den Sound.
Ich habe in mein Pong Spiel jetzt einen einfachen Audio Clip eingebaut, der mir einiges an Ärger macht.
Hier eine Liste der Probleme:
1.Die Audiodatei muss jedes mal neu geladen werden.
2.Wen ich den Clip nicht stoppe sinken meine FPS um 15.
3.Die einzige Möglichkeit die ich gefunden habe den Clip zu stoppen pausiert das ganze Spiel weil while.
Hier meine GameLoop die relevanten Zeilen sind 3, 22, und 70.
Und hier meine Sound Klasse.
Ich habe in mein Pong Spiel jetzt einen einfachen Audio Clip eingebaut, der mir einiges an Ärger macht.
Hier eine Liste der Probleme:
1.Die Audiodatei muss jedes mal neu geladen werden.
2.Wen ich den Clip nicht stoppe sinken meine FPS um 15.
3.Die einzige Möglichkeit die ich gefunden habe den Clip zu stoppen pausiert das ganze Spiel weil while.
Code:
while(clip.getMicrosecondLength() != clip.getMicrosecondPosition()){}
clip.stop();
Hier meine GameLoop die relevanten Zeilen sind 3, 22, und 70.
Code:
public class GameLoop {
private Sound sound = new Sound();
private Window window = new Window();
private Menu menu = new Menu();
private Ball ball = new Ball();
private Block [] block = new Block[2];
private byte fps = 0;
public void mainLoop(){
final byte TARGET_FPS = 60;
final long OPTIMAL_TIME = 1000000000 / TARGET_FPS;
float delta = 0;
long lastLoopTime = System.nanoTime();
long lastFPStime = 0;
byte fps = 0;
window.loadFiles();
sound.loadFiles();
menu.init(window.menu,window.screenBounds);
block[0] =new Block();
block[1] =new Block();
ball.init(window.screenBounds, window.background, window.ball);
block[0].init(false, window.screenBounds, window.block, window.background);
block[1].init(true, window.screenBounds, window.block, window.background);
while(true){
long now = System.nanoTime();
long updateLength = now - lastLoopTime;
lastLoopTime = now;
//---------FPS COUNTER-------
lastFPStime += updateLength;
fps++;
if(lastFPStime >= 1000000000){
System.out.println(fps);
this.fps = fps;
fps = 0;
lastFPStime = 0;
}
//------Update the Game------
delta = (float) (updateLength / ((double)OPTIMAL_TIME));
gameMath(delta);
render();
//-----------Sleep-----------
if((lastLoopTime-System.nanoTime() + OPTIMAL_TIME)/1000000 >= 1){
try {
Thread.sleep((lastLoopTime-System.nanoTime() + OPTIMAL_TIME)/1000000);
} catch (InterruptedException e){e.printStackTrace();}
}
}
}
private void gameMath(float delta){
ball.move(delta,block);
if(ball.colide){
// sound.loadFiles();
sound.playSound();
block[0].getComputerTarget(delta, ball.size, ball.angle, ball.position);
ball.colide = false;
}
block[0].moveComputer(delta,ball.position);
block[1].movePlayer(delta, window.WSAD);
}
private void render(){
window.draw(ball, block, fps, menu);
}
}
Und hier meine Sound Klasse.
Code:
public class Sound {
private AudioInputStream testsound ;
public void loadFiles(){
try {
testsound = AudioSystem.getAudioInputStream(getClass().getClassLoader().getResourceAsStream("SOUND/altemark__pong.wav"));
} catch (UnsupportedAudioFileException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
public void playSound(){
try {
Clip clip = AudioSystem.getClip();
clip.open(testsound);
clip.start();
// while(clip.getMicrosecondLength() != clip.getMicrosecondPosition()){}
// clip.stop();
} catch (LineUnavailableException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
}