前几天我问过这个问题: How to have multiple instances on the screen of the same sprite at the same time with javafx2 并部分解决了阐述珠宝的建议的问题。
我现在有这个障碍:当按下一把钥匙来“射击”子弹时,武器射击子弹和机枪一样快。 我想限制我的游戏英雄的武器可以射击的子弹数量......例如,决定每0.5秒射击一颗子弹,或者只是按下一把钥匙,而不是总是有机枪效果。 .. 在我的游戏中,控制“火”效果的程序部分是这样的:
scene.setOnKeyTyped(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event2) {
if (event2.getCode()==KeyCode.F); { .........
在我尝试使用setOnKeyPressed和setOnKeyReleased以及相同的结果之前.. 那么我还可以尝试射击子弹同时按下“F”键或限制子弹的数量? 提前谢谢你,再见!
答案 0 :(得分:0)
我已经通过使用Timeline
作为计时器并启动它并在按下的键和键释放时停止它来完成此操作:
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);
}
}
这很容易适应这一点,以便随时限制屏幕上的项目符号数量等。