2014-10-03 5 views
1

며칠 전에 나는이 질문을했다 : How to have multiple instances on the screen of the same sprite at the same time with javafx2 그리고 부분적으로 jewelsea의 제안을 정교하게하는 질문을 해결했다.내 게임의 총알에 '기관총'효과를 피하는 방법은 무엇입니까?

나는 이제 총알을 발사하기 위해 키를 눌렀을 때 무기 총알을 기관총만큼 빨리 쏴. 영웅의 무기 인 총알의 양을 제한하고 싶습니다. 게임은 총알을 쏘는 것을 결정하기 위해 예를 들어 0.5 초마다 또는 키가 눌려 졌을 때 항상 기계총 효과를 가지지 않기로 결정할 수 있습니다. 내 게임에서 '불'효과를 제어하는 ​​프로그램 부분 이런 식입니다 : 내가 setOnKeyPressed과 같은 결과를 setOnKeyReleased 사용도 해봤 전에

 scene.setOnKeyTyped(new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent event2) { 

      if (event2.getCode()==KeyCode.F); { ......... 

.. 그래서 나는 또한 단지 총알 유지를 눌러 촬영하는 것을 시도 할 수 'F'키를 누르거나 총알 숫자를 제한 하시겠습니까? 미리 감사드립니다.

+0

좋아요, 대안으로 생각합니다 : 숫자로 총알을 제한합니다 (벽과 같이 제거하면 더 빨리 촬영할 수 있습니다), 이벤트에서 키를 감지하고 음소거합니다 총알이 총에 맞은 후 (타이머를 사용하여) 시간 코드 ...하지만 javafx를 모르기 때문에 추측하고 있습니다. – Elric

답변

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); 
    } 
} 

그것은 또한에 총알의 수를 제한하려면이 적응하기 매우 쉽다 언제든지 화면을 볼 수 있습니다.