Я пытаюсь сделать игру на 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()
{
}
}
Большое вам спасибо! У меня есть еще один вопрос: можно ли несколько изображений и узлов, похожих на него, усилить фокус клавиатуры? – gameCoder95
UPDATE: Я просто попробовал, и кажется, что только один узел может иметь фокус клавиатуры, и вам нужно нажать Tab, чтобы переключить фокус, так же, как вы нажимаете Tab, чтобы перемещаться между текстовыми полями на веб-странице. Можно ли просто проверить, нажата ли клавиша клавиатуры из любого места в коде, например: if (keyboard.isPressed (KeyCode.A) {...}? – gameCoder95
Чтобы сделать это, вы просто сделаете то, что вы изначально сделал и зарегистрировал слушателя в Сцене. –