我当前在这里有eventhandler:
theScene.setOnMouseClicked(
new EventHandler<MouseEvent>() {
public void handle(MouseEvent e) {
if (targetData.containsPoint(e.getX(), e.getY())) {
double x = 50 + 400 * Math.random();
double y = 50 + 400 * Math.random();
targetData.setCenter(x, y);
mediaPlayer.play(); //play hitsound
points.value++; //add points
} else {
points.value = 0; //miss
}
}
});
我也有像这样的音频设置:
String hitNormal = ("hit.mp3");
Media sound = new Media(new File(hitNormal).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(sound);
当我运行程序时,只有第一个单击的圆圈播放hitsound,但是以下所有圆圈都不会播放声音。我认为我上面拥有的应该有效,因为每次点击其他圆圈时,它总是会增加得分。因为我有MediaPlayer.play((;在语句与增加分数的行完全相同的情况下,我期望声音也会播放。每次点击圆圈时,我该如何使我的跳动播放?
编辑:我添加了MediaPlayer.stop((;在points.value 下,似乎偶尔会播放hitsound,但并非总是如此。
在您提到的问题注释中,音频仅长一秒钟。如果是这样使用AudioClip
的情况,则可能比Media
/MediaPlayer
更适合您的需求。
与MediaPlayer
不同,AudioClip
可以并行多次播放(允许多次快速命中一次(。它也可以随心所欲地玩多次。
如果您坚持使用MediaPlayer
JAMES_D,而Tomn似乎在正确的轨道上。从一些小测试中,似乎MediaPlayer
到达媒体结束后,在调用play()
时不仅重新启动。原因是因为媒体完成后,MediaPlayer
的Status
不会从PLAYING
变为STOPPED
。而且,由于play()
在Status
为PLAYING
时无能为力,因此不会重新启动。
要解决这个问题,您必须首先使用seek(Duration.ZERO)
将时间设置为0,然后致电play()
。实际上,在第一次以前没有打电话给pause()
或stop()
的第一次拨打play()
。
但是,由于您的音频只有第二秒,所以我仍然建议AudioClip
。该课程是为您从我能告诉的。
您需要正确检查媒体播放器的状态,此方法可能会帮助mediaPlayer.getStatus()
。
播放时,另一种play()
方法似乎无能为力,因为它将状态更改为播放,但已经改变了。请参阅MediaPlayer和MediaPlayer.status
尝试在代码中使用以下方法。
mediaPlayer.stop()
它将阻止媒体并将当前时间重置为零。
媒体结束时添加此方法。您可以尝试以下代码
mediaPlayer.setOnEndOfMedia(new Runnable()
{
public void run()
{
mediaPlayer.stop();
}
});
或使用mediaPlayer.seek()
查找当前时间。
当以前的媒体尚未到达结束时,您需要暂停它,并在下一个play()
之前寻求当前时间为零。