2014-12-29 3 views
0

Я пытаюсь сделать игру на Javafx 8 с помощью NetBeans 8.1. Суперкласс всех моих игровых объектов - ImageView, и я хотел бы обрабатывать ключевые события в игровом объекте, а не в моей Сцене. Проблема в том, что KeyEvents, похоже, работают только на Сцене, и когда я добавляю обработчик KeyEvent в свой игровой объект, ничего не происходит, когда я нажимаю клавиши. Есть ли все-таки добавить KeyEvents в любой узел, например ImageView, и заставить его работать? Ниже приведен пример того, что я стремлюсь (VisibleGameObject расширяет ImageView):Javafx 8 с помощью KeyEvents с ImageView

package hangmanElements; 

import javafx.event.EventHandler; 
import javafxgame2D.gameObjects.VisibleGameObject; 
import javafx.scene.image.Image; 
import javafx.scene.input.KeyCode; 
import javafx.scene.input.KeyEvent; 


public class HangmanPost extends VisibleGameObject 
{ 
    public HangmanPost() 
    { 
     super(new Image("/resources/hangmanPost.png")); 
     setOriginAtCenter(); 
     setPosition(100, 250); 
     setOnKeyPressed(new EventHandler<KeyEvent>(){ 

     @Override 
     public void handle(KeyEvent event) 
     { 
      if(event.getCode() == KeyCode.UP) 
      { 
       System.out.println("Up pressed MAN!"); 
      } 
     } 
    }); 
} 

@Override 
public void update() 
{ 

} 
} 

ответ

1

Ключевые события генерируются только сюжетных узлов графа, когда они имеют фокус клавиатуры. По умолчанию ImageView не получает фокус клавиатуры. Вам нужно позвонить

setFocusTraversable(true); 

на ImageView.

+0

Большое вам спасибо! У меня есть еще один вопрос: можно ли несколько изображений и узлов, похожих на него, усилить фокус клавиатуры? – gameCoder95

+0

UPDATE: Я просто попробовал, и кажется, что только один узел может иметь фокус клавиатуры, и вам нужно нажать Tab, чтобы переключить фокус, так же, как вы нажимаете Tab, чтобы перемещаться между текстовыми полями на веб-странице. Можно ли просто проверить, нажата ли клавиша клавиатуры из любого места в коде, например: if (keyboard.isPressed (KeyCode.A) {...}? – gameCoder95

+0

Чтобы сделать это, вы просто сделаете то, что вы изначально сделал и зарегистрировал слушателя в Сцене. –