Javafx 如何避免';机枪';对我游戏中的子弹有什么影响?
几天前,我问: 并部分解决了阐述宝石海建议的问题 我现在遇到了一个障碍:当按下“发射”子弹的键时,武器会像机关枪一样快速地发射子弹。。 我想限制我游戏中英雄的武器可以射出的子弹数量。例如,决定每0.5秒射出一颗子弹,或者在按下一个键的时候射出一颗子弹,并且不总是有机关枪的效果。。。 在我的游戏中,控制“火焰”效果的程序部分如下所示:Javafx 如何避免';机枪';对我游戏中的子弹有什么影响?,javafx,sprite,keyevent,eventhandler,Javafx,Sprite,Keyevent,Eventhandler,几天前,我问: 并部分解决了阐述宝石海建议的问题 我现在遇到了一个障碍:当按下“发射”子弹的键时,武器会像机关枪一样快速地发射子弹。。 我想限制我游戏中英雄的武器可以射出的子弹数量。例如,决定每0.5秒射出一颗子弹,或者在按下一个键的时候射出一颗子弹,并且不总是有机关枪的效果。。。 在我的游戏中,控制“火焰”效果的程序部分如下所示: scene.setOnKeyTyped(new EventHandler<KeyEvent>() { @Ov
scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event2) {
if (event2.getCode()==KeyCode.F); { .........
scene.setOnKeyTyped(新的EventHandler(){
@凌驾
公共无效句柄(KeyEvent事件2){
如果(event2.getCode()==KeyCode.F);{。。。。。。。。。
在此之前,我还尝试使用setOnKeyPressed和SetonKeyRelease获得相同的结果。。
那么,我可以试着在按住“F”键的同时射出一颗子弹,或者限制子弹的数量吗?
提前感谢您,再见!我使用
时间线作为计时器,在按下和释放键时启动和停止它:
import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.util.Duration;
public class KeyEventTest extends Application {
@Override
public void start(Stage primaryStage) {
Pane root = new Pane();
Scene scene = new Scene(root, 400, 400);
Duration firingInterval = Duration.millis(500);
Timeline firing = new Timeline(
new KeyFrame(Duration.ZERO, event -> fire()),
new KeyFrame(firingInterval));
firing.setCycleCount(Animation.INDEFINITE);
scene.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.F && firing.getStatus() != Animation.Status.RUNNING) {
firing.playFromStart();
}
});
scene.setOnKeyReleased(event -> {
if (event.getCode() == KeyCode.F) {
firing.stop();
}
});
primaryStage.setScene(scene);
primaryStage.show();
}
private void fire() {
// dummy implementation:
System.out.println("Fire!");
}
public static void main(String[] args) {
launch(args);
}
}
很容易调整这一点,以便在任何时候额外限制屏幕上的子弹数量,等等。好的,我认为备选方案是:限制子弹数量(如果你靠近消除它们的东西,比如墙壁,它们会射得更快),只检测事件中的按键,将代码静音一段时间(使用计时器)子弹射出后…但我只是猜测,因为我不知道javafx。