【发布时间】:2019-08-04 20:23:02
【问题描述】:
我正在使用 JavaFX(类似于 Space Invaders)创建一个游戏,但我遇到了射击声音的问题,特别是当我多次按下一个键时,不仅声音停止播放,而且其他声音也停止播放工作。
我做了一些小研究,似乎这种问题相当流行,它涉及释放 MediaPlayer 对象/实例,但我不能调用该方法(?)。
我尝试过使用 dispose() 方法,但它完全禁用了拍摄声音。
我有两个类,GameApp:
primaryStage.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.SPACE && playable) {
Audio.playPlayerShotSound();
}
}
});
和音频:
public class Audio {
private static Media shot = new Media(new File("resources/playerShot.wav").toURI().toString());
public static void playPlayerShotSound() {
MediaPlayer shotSound = new MediaPlayer(shot);
shotSound.setVolume(0.2);
shotSound.play();
}
我使用 JavaFX 创建了另一个类,按 Space 64 次后声音停止。
package examples;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import javafx.scene.layout.Pane;
import java.io.File;
public class GameInst extends Application {
Pane root;
private AnimationTimer timer;
private static Media shot = new Media(new File("resources/playerShot.wav").toURI().toString());
int count = 0;
private Parent createContent() {
root = new Pane();
root.setPrefSize(500, 500);
timer = new AnimationTimer() {
@Override
public void handle(long now) {
onUpdate();
}
};
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
onUpdate();
}
};
timer.start();
return root;
}
private void onUpdate() {
}
@Override
public void start(Stage primaryStage) throws Exception {
root = new Pane();
primaryStage.setTitle("Space Invaders");
primaryStage.setScene(new Scene(createContent()));
primaryStage.getScene().setOnKeyPressed(event -> {
switch (event.getCode()) {
case SPACE:
MediaPlayer shotSound = new MediaPlayer(shot);
shotSound.setVolume(0.1);
shotSound.play();
count++;
System.out.println(count);
}
});
primaryStage.show();
}
public static void main (String[] args){
launch(args);
}
}
【问题讨论】:
-
@kleopatra 嘿,我编辑了我的帖子,添加了另一个简单的类。我不知道这是否是你所问的,但它几乎复制了我的问题。
-
酷,谢谢 :) 下次我在真正的计算机上(现在在移动设备上)时会尝试一下。..计时器与您想要做什么有什么关系?为什么有两个,只从最后一个开始?
-
@kleopatra 实际上它们可能根本不相关 :D 事实上,我是一个新手,所以我记得复制了代码的那一部分,然后没有真正考虑它。感谢您提出这个问题!