gpt4 book ai didi

javafx - 按键53次后声音停止工作

转载 作者:行者123 更新时间:2023-12-02 23:02:43 26 4
gpt4 key购买 nike

我正在用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);
}
}


最佳答案

对于您尝试做的事情,AudioClip类可能更适合作为功能强大的MediaPlayer。每当您收到事件时初始化一个新播放器可能也不是一个好主意。

关于javafx - 按键53次后声音停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com