Javafx 如何避免';机枪';对我游戏中的子弹有什么影响?

Javafx 如何避免';机枪';对我游戏中的子弹有什么影响?,javafx,sprite,keyevent,eventhandler,Javafx,Sprite,Keyevent,Eventhandler,几天前,我问: 并部分解决了阐述宝石海建议的问题 我现在遇到了一个障碍:当按下“发射”子弹的键时,武器会像机关枪一样快速地发射子弹。。 我想限制我游戏中英雄的武器可以射出的子弹数量。例如,决定每0.5秒射出一颗子弹,或者在按下一个键的时候射出一颗子弹,并且不总是有机关枪的效果。。。 在我的游戏中,控制“火焰”效果的程序部分如下所示: scene.setOnKeyTyped(new EventHandler<KeyEvent>() { @Ov

几天前,我问: 并部分解决了阐述宝石海建议的问题

我现在遇到了一个障碍:当按下“发射”子弹的键时,武器会像机关枪一样快速地发射子弹。。 我想限制我游戏中英雄的武器可以射出的子弹数量。例如,决定每0.5秒射出一颗子弹,或者在按下一个键的时候射出一颗子弹,并且不总是有机关枪的效果。。。 在我的游戏中,控制“火焰”效果的程序部分如下所示:

        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。