JavaFX Objekte bewegen

Lukascoder

Mitglied
Hallo
Ich bin gerade dabei ein Spiel in JavaFX zu programmieren und habe Probleme mit der Steuerung.
Durch recherchieren habe ich schon eine Möglichkeit gefunden, nämlich "setFocusTraversable(true)".

Das Problem ist aber das, dass mehr als schwammig ist:

1. schräg gehen ist unmöglich

2. wenn man die Taste gedrückt hält, bleibt es eine halbe Sekunde stehen und düst dann ab.(wie bei einer Texteingabe)

Hat da vielleicht einer eine bessere Idee?

PS
ich programmiere mit FXML.(wenn das eine Rolle spielt)
 

Androbin

Bekanntes Mitglied
Dieses Problem tritt auch in Swing auf.

Du kannst dieses jedoch umgehen, indem du die Tasteneingaben nicht direkt verarbeitest,
sondern einen Flag setzt, ob die Taste gerade gedrückt ist oder eben nicht.
(Am besten verwendest du zu diesem Zweck eine HashMap<Integer, Boolean>)

Dann arbeitest du mit diesen Werten in deinem Main-Loop weiter.

Ich hoffe, ich konnte dir helfen.

Mit freundlichen Grüßen,
Androbin
 

Lukascoder

Mitglied
Danke
Bin aber inzwischen auch auf das mit den Flags gekommen.
Habe dann das aber mit mehreren Threads gelöst

So:
Java:
import javafx.scene.input.KeyCode;import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;


public class Steuerung{
    
    private Rectangle rechteck;
   
    private AnchorPane spielfeld;


    
    
    private boolean isRunning = false;
    
    private boolean[] flags = new boolean[9];


    public Thread thread;
    
    private boolean buttonPressed = false;
    
    public AnchorPane getSpielfeld() {
        return spielfeld;
    }


    public void setSpielfeld(AnchorPane spielfeld) {
        this.spielfeld = spielfeld;
    }
    
    public Rectangle getRechteck() {
        return rechteck;
    }


    public void setRechteck(Rectangle rechteck) {
        this.rechteck = rechteck;
    }
    
    public void tasteLosgelassen(KeyEvent event){
        if(event.getCode()==KeyCode.W)flags[0]=false;
        if(event.getCode()==KeyCode.D)flags[1]=false;
        if(event.getCode()==KeyCode.S)flags[2]=false;
        if(event.getCode()==KeyCode.A)flags[3]=false;
        
        
    }
    
    public void tasteGedrueckt(KeyEvent event){

        if(event.getCode()==KeyCode.W)flags[0]=true;
        if(event.getCode()==KeyCode.D)flags[1]=true;
        if(event.getCode()==KeyCode.S)flags[2]=true;
        if(event.getCode()==KeyCode.A)flags[3]=true;
        if(event.getCode()==KeyCode.ESCAPE)flags[4]=true;
        Stage spielStage = (Stage) rechteck.getScene().getWindow();
        if(flags[4]){


            if(!buttonPressed){
                spielStage.setFullScreen(false);
                this.buttonPressed=true;
            }else{
                spielStage.setFullScreen(true);
                this.buttonPressed=false;
            }     
        }
        if(isRunning)return;
       
            thread = new Thread(new Runnable() {


                @Override
                public void run() {
                    isRunning=true;
                    steuerung();
                    
                }
            });
            thread.start();
        isRunning=false;
    }
    
    public void steuerung(){


       while(flags[0]||flags[1]||flags[2]||flags[3]||flags[4]){
        if(flags[0]){
            rechteck.setLayoutY(rechteck.getLayoutY()-1);
            if(rechteck.getLayoutY()<spielfeld.getLayoutY()){
                rechteck.setLayoutY(0);


            }  
        }if(flags[1]){          
            rechteck.setLayoutX(rechteck.getLayoutX()+1);            
            if(rechteck.getLayoutX()+rechteck.getWidth()>spielfeld.getPrefWidth()){
                rechteck.setLayoutX(spielfeld.getPrefWidth()-rechteck.getWidth());
            }
        
        }if(flags[2]){
            rechteck.setLayoutY(rechteck.getLayoutY()+1);
            if(rechteck.getLayoutY()+rechteck.getHeight()>spielfeld.getPrefHeight()){
                rechteck.setLayoutY(spielfeld.getPrefHeight()-rechteck.getHeight());
            }


        }if(flags[3]){
            rechteck.setLayoutX(rechteck.getLayoutX()-1);
            if(rechteck.getLayoutX()<spielfeld.getLayoutX()){
                rechteck.setLayoutX(0);
            }
        }      
        try {
                Thread.sleep(2);
            } catch (InterruptedException ex) {
               
            }
        
        }
    }
}

Man muss hierbei nur aufpassen das der Thread am Ende nicht die Ressourcen blockiert
Ich muss jetzt nur noch dafür sorgen das nur bestimmte Tasten zugelassen werden und dann hab ich die Steuerung:D
 
Zuletzt bearbeitet:

Lukascoder

Mitglied
OK ich hab mein Problem mit den Ressourcen gefunden.
Und zwar die Stage(zum verlassen des Fullscreens) muss innerhalb von der Keycode
Überprüfung stehen

So mein aktueller Stand:
Java:
import javafx.scene.input.KeyCode;import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;


public class Steuerung{
    
 
    private Rectangle rechteck;
 
    private AnchorPane spielfeld;
 


 
 
    private boolean isRunning = false;
 
    private boolean[] flags = new boolean[9];
 
 
    public Thread thread;
 
    private boolean buttonPressed = false;
 
    public AnchorPane getSpielfeld() {
        return spielfeld;
    }
 
 
    public void setSpielfeld(AnchorPane spielfeld) {
        this.spielfeld = spielfeld;
    }
 
    public Rectangle getRechteck() {
        return rechteck;
    }
 
 
    public void setRechteck(Rectangle rechteck) {
        this.rechteck = rechteck;
    }
 
    public void tasteLosgelassen(KeyEvent event){
        if(event.getCode()==KeyCode.W)flags[0]=false;
        if(event.getCode()==KeyCode.D)flags[1]=false;
        if(event.getCode()==KeyCode.S)flags[2]=false;
        if(event.getCode()==KeyCode.A)flags[3]=false;
 
 
    }
 
    public void tasteGedrueckt(KeyEvent event){
 
        if(event.getCode()==KeyCode.W)flags[0]=true;
        if(event.getCode()==KeyCode.D)flags[1]=true;
        if(event.getCode()==KeyCode.S)flags[2]=true;
        if(event.getCode()==KeyCode.A)flags[3]=true;
        
        if(event.getCode()==KeyCode.ESCAPE){
            Stage stage = (Stage)rechteck.getScene().getWindow();
        
            if(buttonPressed){
                stage.setFullScreen(true);
                buttonPressed=false;
            }else if(!buttonPressed){
                stage.setFullScreen(false);
                buttonPressed =  true;
            }
        }
        if(isRunning)return;
            
            thread = new Thread(new Runnable() {
 
 
                @Override
                public void run() {
                    isRunning=true;
                    steuerung();
                    isRunning=false;
                }
            });
            thread.start();
        
    }
 
    public void steuerung(){
 
 
       while(flags[0]||flags[1]||flags[2]||flags[3]){
        if(flags[0]){
            rechteck.setLayoutY(rechteck.getLayoutY()-1);
            if(rechteck.getLayoutY()<spielfeld.getLayoutY()){
                rechteck.setLayoutY(0);
 
 
            }  
        }if(flags[1]){          
            rechteck.setLayoutX(rechteck.getLayoutX()+1);            
            if(rechteck.getLayoutX()+rechteck.getWidth()>spielfeld.getPrefWidth()){
                rechteck.setLayoutX(spielfeld.getPrefWidth()-rechteck.getWidth());
            }
 
        }if(flags[2]){
            rechteck.setLayoutY(rechteck.getLayoutY()+1);
            if(rechteck.getLayoutY()+rechteck.getHeight()>spielfeld.getPrefHeight()){
                rechteck.setLayoutY(spielfeld.getPrefHeight()-rechteck.getHeight());
            }
 
 
        }if(flags[3]){
            rechteck.setLayoutX(rechteck.getLayoutX()-1);
            if(rechteck.getLayoutX()<spielfeld.getLayoutX()){
                rechteck.setLayoutX(0);
            }
        }      
        try {
                Thread.sleep(2);
            } catch (InterruptedException ex) {
 
            }
 
        }
       
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J javafx seltsames Verhalten mediaplayer Spiele- und Multimedia-Programmierung 23
L Minecraft [Minecraft] Spigot und JavaFX mit fxml Spiele- und Multimedia-Programmierung 0
K Video aus JavaFX Images generieren Spiele- und Multimedia-Programmierung 2
Sugan GUI verändern mit JavaFX Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
Cromewell JavaFX Kollisionserkennung Spiele- und Multimedia-Programmierung 6
wolfgang63 Mit JavaFX einfaches Game programmieren Spiele- und Multimedia-Programmierung 5
M JavaFX - MouseDragReleased ruft MouseDragExited auf Spiele- und Multimedia-Programmierung 2
G javafx MediaPlayer sound problem Spiele- und Multimedia-Programmierung 2
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
Kim_Dotcom Objekte synchronisieren Variablen Spiele- und Multimedia-Programmierung 19
K Bewegte Objekte per Mausklick entfernen Spiele- und Multimedia-Programmierung 3
N Helden: Verschiedene Objekte oder konkrete Unterklassen Spiele- und Multimedia-Programmierung 1
gamebreiti Wie Objekte versenden und empfangen Spiele- und Multimedia-Programmierung 4
J Objekte übereinander lagern Spiele- und Multimedia-Programmierung 1
Q Mehr objekte darstellen als Pixel vorhanden Spiele- und Multimedia-Programmierung 6
lord239123 Minecraft Nur sichtbare Objekte rendern Spiele- und Multimedia-Programmierung 5
Z Objekte animieren mit Threads Spiele- und Multimedia-Programmierung 4
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
A JME3 will Blender/j3o Objekte nicht einladen Spiele- und Multimedia-Programmierung 3
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
T JOGL 2D Objekte drehen rotate Spiele- und Multimedia-Programmierung 4
D Objekte in weiter Entfernung flimmern / flackern Spiele- und Multimedia-Programmierung 2
G 3D-Objekte / Grafiken gesucht Spiele- und Multimedia-Programmierung 6
S Klickbare Objekte im Spiel Spiele- und Multimedia-Programmierung 8
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
W Rotation aller Objekte einer 3D-Szene Spiele- und Multimedia-Programmierung 8
L 3D Objekte in Java importieren Spiele- und Multimedia-Programmierung 2
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
T Selbst-handelnde Objekte im Client-Server Betrieb Spiele- und Multimedia-Programmierung 9
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
aze Java 3d Objekte überdecken 2d Komponenten Spiele- und Multimedia-Programmierung 7
aze Java 3D : 3D Objekte speichern und später wieder einlesen Spiele- und Multimedia-Programmierung 9
D Halbdurchsichtige Objekte Spiele- und Multimedia-Programmierung 17
F zu viele Objekte, Problem mit neuzeichnen. Spiele- und Multimedia-Programmierung 5
M Alle Objekte aus der SimpleUniverse entfernen Spiele- und Multimedia-Programmierung 2
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
B Position der ViewingPlatform und Visueller Objekte setzen Spiele- und Multimedia-Programmierung 3
B Isometrischer KartenEditor mit Animierten Objekte Spiele- und Multimedia-Programmierung 3
J 1x Punktlicht auf 5 Objekte benutzen Spiele- und Multimedia-Programmierung 17
F Maussteuerung-gezeichnete Objekte Spiele- und Multimedia-Programmierung 4
B Objekte zur Laufzeit verändern Spiele- und Multimedia-Programmierung 3
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
S 3D Objekte ohne Java3D darstellen? Spiele- und Multimedia-Programmierung 10
J Zu viele Objekte - OutOfMemoryError Spiele- und Multimedia-Programmierung 3
L Objekte zentrieren Spiele- und Multimedia-Programmierung 2
G zur laufzeit objekte einfügen Spiele- und Multimedia-Programmierung 3
G 2D-Objekte werden nicht vollständig gezeichnet Spiele- und Multimedia-Programmierung 4
conan2 Objekte in richtiger Z-Reihenfolge zeichnen Spiele- und Multimedia-Programmierung 2
A Objekte nacheinander zeitgesteuert rotieren lassen Spiele- und Multimedia-Programmierung 4
H 3D Objekte ausfüllen Spiele- und Multimedia-Programmierung 3
T 3D-Objekte Laden Spiele- und Multimedia-Programmierung 3
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
G Zugriff auf einzelne Objekte Spiele- und Multimedia-Programmierung 12
Z Schach Figuren bewegen Spiele- und Multimedia-Programmierung 4
B Spieler auf besonderer Bahn bewegen Spiele- und Multimedia-Programmierung 1
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
astro151 JButtons mit Mausklicks bewegen Spiele- und Multimedia-Programmierung 2
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
M Kamera "am Rande einer Kugel bewegen" Spiele- und Multimedia-Programmierung 4
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
javampir Lange Hintergrundgrafik einfügen und bewegen Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
R Canvas Circle bewegen? Spiele- und Multimedia-Programmierung 14
K auf Mapraster frei bewegen Spiele- und Multimedia-Programmierung 7
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
K Zum Ziel bewegen Spiele- und Multimedia-Programmierung 4
Helgon Große Welt bewegen? Spiele- und Multimedia-Programmierung 15
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
G 2D Welt bewegen Spiele- und Multimedia-Programmierung 20
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
M Figur bewegen Spiele- und Multimedia-Programmierung 7
F RPG - Spielfigur soll sich nicht frei bewegen können. Anregugen wären gerne gesehen^^ Spiele- und Multimedia-Programmierung 13
N Objekt entgegengesetzt bewegen Spiele- und Multimedia-Programmierung 8
D Sprite zur Maus bewegen Spiele- und Multimedia-Programmierung 9
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
2 Kugel bewegen? Spiele- und Multimedia-Programmierung 17
L Figur soll sich selbständig Bewegen Spiele- und Multimedia-Programmierung 12
G Zeichnung mit der Maus bewegen Spiele- und Multimedia-Programmierung 3
R Teilgraphen bewegen Spiele- und Multimedia-Programmierung 5
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
A Bilder bewegen Spiele- und Multimedia-Programmierung 2
Z Obejkt drehen & vorwärts bewegen Spiele- und Multimedia-Programmierung 9
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
G Bewegen von Objekten Spiele- und Multimedia-Programmierung 4
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben