Ich verstehe, dass dies wahrscheinlich ein sehr einfaches Problem ist, aber da ich nur mit JPanel und JFrame für ein Wochenende gearbeitet habe, bitte nicht zu viel auf mich. Mein Problem ist, dass ich diesen Code:JPanel wird nicht aktualisiert oder Repaint bis For Loop Finishes
package Game_Elements;
import java.awt.Color;
import java.awt.Desktop.Action;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.RenderingHints.Key;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.AbstractAction;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game implements KeyListener
{
private JFrame frame = null;
private JPanel panel = null;
int y = 0;
int x = 0;
public boolean W_TRUE;
public boolean S_TRUE;
public boolean A_TRUE;
public boolean D_TRUE;
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()== KeyEvent.VK_W){
y-= 15;
panel.setLocation(x, y);
W_TRUE = true;
}
if(e.getKeyCode()== KeyEvent.VK_S){
y+= 15;
panel.setLocation(x, y);
S_TRUE = true;
}
if(e.getKeyCode()== KeyEvent.VK_A){
x-= 15;
panel.setLocation(x, y);
A_TRUE = true;
}
if(e.getKeyCode()== KeyEvent.VK_D){
x+= 15;
panel.setLocation(x, y);
D_TRUE = true;
}
if(D_TRUE == true && S_TRUE == true){
y+= 15;
x+= 15;
panel.setLocation(x, y);
}
if(A_TRUE == true && W_TRUE == true){
y-= 15;
x-= 15;
panel.setLocation(x, y);
}
if(A_TRUE == true && S_TRUE == true){
y+= 15;
x-= 15;
panel.setLocation(x, y);
}
if(D_TRUE == true && W_TRUE == true){
y-= 15;
x+= 15;
panel.setLocation(x, y);
}
}
public void keyReleased(KeyEvent e)
{
if(e.getKeyCode()== KeyEvent.VK_W){
W_TRUE = false;
}
if(e.getKeyCode()== KeyEvent.VK_S){
S_TRUE = false;
}
if(e.getKeyCode()== KeyEvent.VK_A){
A_TRUE = false;
}
if(e.getKeyCode()== KeyEvent.VK_D){
D_TRUE = false;
}
if(e.getKeyCode()== KeyEvent.VK_SPACE){
System.out.println("Running JUMP");
for(int j = y - 200; j < y; y-= 15){
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
panel.setLocation(x, y);
panel.revalidate();
}
System.out.println("Complete");
}
}
public void keyTyped(KeyEvent e) {
}
public void frameStart()
{
frame = new JFrame();
frame.setVisible(true);
frame.setTitle("Desperation");
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); // otherwise nice exceptions java.awt.AWTError:
frame.setPreferredSize(new Dimension(1920, 1050));
frame.setSize(new Dimension(1920, 1050));
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println("Frame Created");
panel = new JPanel();
panel.setBackground(Color.BLUE);
panel.setMaximumSize(new Dimension(200, 200));
panel.setLocation(1080, 500);
panel.revalidate();
frame.add(panel);
System.out.println("Panel Created");
frame.addKeyListener(this);
System.out.println("Listener Created");
}
public static void main(String[] args){
Game obj = new Game();
obj.frameStart();
}
}
Die Panel Ich habe ein grundlegender 200x200 blauer Würfel, scheint nicht Position zu ändern, bis die Schleife läuft getan wird, so dass es eher ein ist springen als alles andere. Ich verstehe, dass die Repaint-Funktion nur so schnell wie möglich ausgeführt wird, und da dies wahrscheinlich das Problem ist, habe ich mich gefragt, ob jemand von euch gute Leute über eine alternative Methode zum Auffrischen beraten hat, damit es nicht unbedingt glatt aussieht, sondern an mindestens zeigen einige Progression. Jeder Rat wird geschätzt, da ich nicht viel über JPanel, JFrame oder wirklich JAnything weiß. Vielen Dank!
Beginnen Sie mit [Concurrency in Swing] (https://docs.oracle.com/javase/tutorial/uiswing/ Nebenläufigkeit /) für das, was das Problem verursacht, siehe [Wie Swing Timer zu verwenden] (https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html) für eine mögliche Lösung und [How Tastenkombinationen zu verwenden] (https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) zu lösen, was wahrscheinlich eine andere Frage in der Zukunft wird – MadProgrammer