Java - Schnellere bewegungen

Status
Nicht offen für weitere Antworten.

Exodus155

Mitglied
Hallo,

ALSO HIER MAL DER QUELLCODE:

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;



public class game extends JPanel implements Runnable
{	

                static int a = 0;
	static int w = 100;
	static int x = 100;
	static int y = 100;
	static int z = 50;		
	int speed = 15;

protected void paintComponent(Graphics g)
{	
	super.paintComponent(g);
	g.drawLine(w,x,y,z);
}

game()
{
		new Thread(this).start();
}

public void run()
{

	while(true)
	{	
	try 
	{		
		System.out.println(a);
		Thread.sleep(speed);
	} catch (Exception e)
	{}	
		repaint();
	}

}

	public static void main(String[] args)
	{
		
		JFrame f1 = new JFrame();
		f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f1.add(new game());	
		f1.setResizable(false);
		f1.setSize(500, 500);
		f1.setVisible(true);	
		
		KeyListener al1 = new KeyListener()
		{
			public void keyPressed(KeyEvent event)
			{	
					if (event.getKeyCode() == KeyEvent.VK_LEFT)
				{
					
					y--;

				}
				else
					if (event.getKeyCode() == KeyEvent.VK_RIGHT)	
				{					
						w++;
				}
				else
					if (event.getKeyCode() == KeyEvent.VK_UP)
				{				
						x--;
				}
				else
					if (event.getKeyCode() == KeyEvent.VK_DOWN)
				{						
						z++;
				}
			}
			
			public void keyReleased(KeyEvent arg0) {
				
				
			}

			public void keyTyped(KeyEvent arg0) {
				
				
			}
		};
		f1.addKeyListener(al1);
	}
}

Frage:

Also mein Problem besteht ind diesem test, wie kann ich den strich schneller umherbewegen! Dass mit der Tastatur funktioniert und der Strich bewegt sich ja, aber wie kann man den schneller machen? mit speed 1 hab ichs auch schonmal probiert! Merkt man aber nix!


Bitte um hilfe

MFG
Exodus155
 
S

SlaterB

Gast
mehr Tastaturereignisse wird nicht gehen, schon gar nicht von Java aus,

aber statt
z++;
mach doch
z+=10;

-> 10x schneller ;)

--------

ist etwas hakelig, sauberer wirds mit einem anderen Ansatz:
mit internen Variablen den Zustand der Maus speichern

beim ersten keyPressed also pressed = true merken
und dann gar nicht mehr auf Ereignisse von der Maus achten (bis auf das Loslassen der Taste)
sondern im Thread abhängig von der genauen Zeit seit Start des Drücken mit beliebiger Geschwindigkeit Pixel-genau die Position berechnen,

Grenzen sind dafür die Zeitmessung (System.nanoTime() + currentTimeInMillies()) + die Genauigkeit und Dauer von Thread.sleep(),
nicht einfach wenn du bei +=5; statt ++; schon ein Forum fragen musst,
aber mit viel Probieren vielleicht schaffbar
 

EgonOlsen

Bekanntes Mitglied
z.B. so (aber Achtung: Es ist jetzt so schnell, dass es nicht mehr kontrollierbar ist). Das Grundprinzip ist, auf Zustandsänderungen der Tasten zu reagieren, nicht auf die Wiederholung des Events, den der hängt von der Tastaturgeschwindigkeit ab):

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class game extends JPanel {

    private int a = 0;
    private int w = 100;
    private int x = 100;
    private int y = 100;
    private int z = 50;

    private boolean up = false;
    private boolean down = false;
    private boolean left = false;
    private boolean right = false;

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(w, x, y, z);
    }


    public void doIt() {
        try {
            while (true) {
                if (left) {
                    y--;
                }
                if (right) {
                    w++;
                }
                if (up) {
                    x--;
                }
                if (down) {
                    z++;
                }
                //Thread.sleep(10);
                repaint();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        JFrame f1 = new JFrame();
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setResizable(false);
        f1.setSize(500, 500);
        f1.setVisible(true);
        game ga = new game(f1);
        f1.add(ga);
        ga.doIt();
    }

    game(JFrame jf) {
        KeyListener al1 = new MyListener();
        jf.addKeyListener(al1);
    }

    class MyListener implements KeyListener {

        public void keyPressed(KeyEvent event) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_LEFT):
                left = true;
                break;
            case (KeyEvent.VK_RIGHT):
                right = true;
                break;
            case (KeyEvent.VK_UP):
                up = true;
                break;
            case (KeyEvent.VK_DOWN):
                down = true;
                break;
            }
        }

        public void keyReleased(KeyEvent event) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_LEFT):
                left = false;
                break;
            case (KeyEvent.VK_RIGHT):
                right = false;
                break;
            case (KeyEvent.VK_UP):
                up = false;
                break;
            case (KeyEvent.VK_DOWN):
                down = false;
                break;
            }
        }

        public void keyTyped(KeyEvent arg0) {
        }
    }
}
 

Exodus155

Mitglied
So habs. ist wirklich ziemlich schnell! Hab jetz ein bisschen gedrosselt mit Thread.sleep(5) //5 ms warten dann neuzeichnen! danke nochma!


MFG
Exodus155
 

Quaxli

Top Contributor
Ich finde, die Geschwindigkeit über den Thread.sleep zu steuern etwas ungeschickt. Üblicherweise nutze ich etwas in der Art:

Code:
  public void move(long delta) {
    
    if(dx!=0){
      x += dx*(delta/modx);
    }
    
    if(dy!=0){
      y += dy*(delta/mody);
    }

  }

Die move-Methode ist beim jeweiligen Objekt, das bewegt werden soll und wird aus der Haupt-Schleife regelmäßig aufgerufen. Vorher ermittele ich noch mittels System.nanoTime(), wie lange der letzte Schleifendurchlauf gedauert hat.

dx ist die aktuelle Geschwindigkeit in x- und y-Richtung und modx bzw. mody sind fix vorbelegt mit

double modx = 1000000000;

Das Ganze hat den Vorteil, daß das Programm auch auf fremden Rechnern rund läuft. Thread.sleep() rufe ich üblicherweise mit dem Wert 10 auf.


Gruß

Ralf

P.S.: Die {-Klammern bei der if-Bedingung sind unnötig - ist eine Angwohnheit von mir.
 

Quaxli

Top Contributor
Ich hab mal ein bißchen an Deinem Code rumgefrickelt :wink:

Code:
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Test extends JPanel {

   private static final long serialVersionUID = 1L;
   
    //Typ integer reicht jetzt nicht mehr - sonst wird jedesmal abgerundet
		private double w = 100;
    private double x = 100;
    private double y = 100;
    private double z = 50;
    
    long last = 0;
    long delta = 0;
    double mod = 1000000000;
    int speed = 150;
    
    private boolean up = false;
    private boolean down = false;
    private boolean left = false;
    private boolean right = false;

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine((int)w, (int)x, (int)y, (int)z);
    }


    public void doIt() {
        try {
        	
            while (true) {
            	
           	if(last==0){
           	  last = System.nanoTime();
           	}else{
          	   delta = System.nanoTime() - last;
          	   last = System.nanoTime();
          	 }
            	
                if (left) {
                	y -= speed*(delta/mod);
                }
                if (right) {
                	w += speed*(delta/mod);
                }
                if (up) {
                	x -= speed*(delta/mod);
                }
                if (down) {
                	z += speed*(delta/mod);
                }
                
                Thread.sleep(10);
                repaint();
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        JFrame f1 = new JFrame();
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setResizable(false);
        f1.setSize(500, 500);
        f1.setVisible(true);
        Test ga = new Test(f1);
        f1.add(ga);
        ga.doIt();
    }

    Test(JFrame jf) {
        KeyListener al1 = new MyListener();
        jf.addKeyListener(al1);
    }

    class MyListener implements KeyListener {

        public void keyPressed(KeyEvent event) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_LEFT):
                left = true;
                break;
            case (KeyEvent.VK_RIGHT):
                right = true;
                break;
            case (KeyEvent.VK_UP):
                up = true;
                break;
            case (KeyEvent.VK_DOWN):
                down = true;
                break;
            }
        }

        public void keyReleased(KeyEvent event) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_LEFT):
                left = false;
                break;
            case (KeyEvent.VK_RIGHT):
                right = false;
                break;
            case (KeyEvent.VK_UP):
                up = false;
                break;
            case (KeyEvent.VK_DOWN):
                down = false;
                break;
            }
        }

        public void keyTyped(KeyEvent arg0) {
        }
    }
}
 

Exodus155

Mitglied
Ah ok danke jetz gehts besser! also zu einem anderen thema kurz!

Ich hab ein jpegformat mit einer kugel! so wie bekomme ich die kugel jetz alleine da raus ohne den weißen hintergrund?

MFG
Exodus
 

m@nu

Bekanntes Mitglied
benutz keine jpg's, sondern png's resp. gif's.
da hast du den vorteil, dass du einen alpha-channel (png) resp. eine transparente farbe (gif) definieren kannst.
 

Exodus155

Mitglied
also dass heißt ich kann den weißen hintergrund wegzeichnen dass nur die kugel übrig bleibt oder? aber wie?

MFg
Exodus
 

Quaxli

Top Contributor
Du erstellst mit geeigneten Grafikprogramm ein GIF oder png mit transparentem Hintergrund. Wie das geht mußt Du ggf. in der Hilfe des Grafikprogramms nachlesen. Die Grafik verwendest Du dann in Deinem Programm und sie wird wie gewünscht dargestellt.

Gruß

Ralf
 

Exodus155

Mitglied
So jetz gehts! die kugel bewegt sich hin undher auf tastendruck, aber was mir nicht gefällt, dss die kugel mal schneller ist mal ruckelt es usw.....! Wie kann ich dieses problem mit bufferedImage lösen? Hier mal der ausschnitt von paint:
Code:
    protected void paintComponent(Graphics g)
    {
    	
    		Graphics2D g2 = (Graphics2D) g;
    		
    		super.paintComponent(g);
    		
   	    	image = Toolkit.getDefaultToolkit().getImage("Kugel.gif");    	
   	    	
    		g2.drawImage(image,w, x, this);
    	
    }

MFG
Exodus
 

Exodus155

Mitglied
Habs jetz so probiert geht nix!
Code:
    public void ImageVorladen()
    {
	    	image = Toolkit.getDefaultToolkit().getImage("Kugel.gif");    	
	    	
	    	if (image != null)
	    	{
	    		repaint();
	    	}
    }
  
  @Override
    protected void paintComponent(Graphics g)
    {
    	
    		Graphics2D g2 = (Graphics2D) g;
    		
    		super.paintComponent(g2);
   	    	
    		if (image != null)
    		{
    		g2.drawImage(image,w, x, this);
    		}
    }

MFG
Exodus
 

dieta

Top Contributor
Wie "geht nix!" ?

Schmeißt er dir 'ne Exception oder tut er einfach gar nix?

Rufst du die Methode "public void ImageVorladen()" auch im Konstruktor auf? (man kann ja nie wissen...) ?
 

Exodus155

Mitglied
KAnn man dass auch so machen?

Code:
    protected void paintComponent(Graphics g)
    {
    	
    	if (image == null)
    	{
            image = Toolkit.getDefaultToolkit().getImage("Kugel.gif");
    	}   		
    	
    	Graphics2D g2 = (Graphics2D) g;
    	
    	super.paintComponent(g2);    	
    	
    	if (image != null)
    	{
    	g2.drawImage(image, w,x,this);
    	}    		
    }

MFG
Exodus
 

DEvent

Bekanntes Mitglied
Exodus155 hat gesagt.:
KAnn man dass auch so machen?

Code:
    protected void paintComponent(Graphics g)
    {
    	
    	if (image == null)
    	{
            image = Toolkit.getDefaultToolkit().getImage("Kugel.gif");
    	}   		
    	
    	Graphics2D g2 = (Graphics2D) g;
    	
    	super.paintComponent(g2);    	
    	
    	if (image != null)
    	{
    	g2.drawImage(image, w,x,this);
    	}    		
    }

MFG
Exodus
Das ist doch Sinnlos jedesmal zu prüfen ob man das Bild geladen hat. Lade das Bild einfach im Konstruktor uhnd gut ist.
 

Quaxli

Top Contributor
Zum Thema "geht nix": Mir ist noch nicht ganz klar warum, aber bei mir wurde auch nichts angezeigt. Erst als ich den JFrame f1 als Klassenvariable deklariert hatte und in der doIt-Schleife das repaint() durch f1.repaint(), gefolgt von einem f1.validate() ersetzt hatte, ging es wieder.
Mir ist noch nicht ganz klar, warum das validate() notwendig ist, sollte es eigentlich nicht.

Gruß

Ralf
 

schalentier

Gesperrter Benutzer
Hehe, genau das ist ein Grund warum Swing Anwendungen immer langsam sind...

Im obigen Code sind gleich mehrere Fehler. Componenten fuegt man einem JFrame immer per getContentPane() hinzu. Und natuerlich muss das JPanel auch sichtbar sein, also das f1.setVisible(true) nach dem Hinzufuegen aufrufen, nicht vorher!

So isses richtig.
Code:
public static void main(String[] args) {
        JFrame f1 = new JFrame();
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setResizable(false);
        f1.setSize(500, 500);
        Test2 ga = new Test2(f1);
        f1.getContentPane().add(ga); // vorher: f1.add(ga)
        f1.setVisible(true);
        ga.doIt();
    }

"validate" startet den Layouter, es werden also alle Kind-Componenten neu angeordnet. Deswegen klappts auch, wenn du ein validate nach (oder vor) dem repaint machst. Nur, ein validate ist sehr teuer.

Wozu das Thread.sleep(10)? Sagts doch, ihr wollt eine langsame Anwendung, um dann die Behauptung aufzustellen, Java waere langsam :bae:
 

Evil-Devil

Top Contributor
Seit Java5 kann man das hinzufügen von Komponenten direkt über add() machen, das macht immerhin auch nichts anderes als getContentPane() abzufragen.
 

Quaxli

Top Contributor
add() nehme ich auch immer. Da gab's noch nie Probleme. Lt. Beschreibung in der Klasse Container ist das auch kein Problem.

@schalentier:

Im obigen Code sind gleich mehrere Fehler. Componenten fuegt man einem JFrame immer per getContentPane() hinzu. Und natuerlich muss das JPanel auch sichtbar sein, also das f1.setVisible(true) nach dem Hinzufuegen aufrufen, nicht vorher!

Stimmt! Das mit dem setVisible() hatte ich übersehen (obwohl ich es hätte wissen müssen). Daher war auch das validate() nötig.

Wozu das Thread.sleep(10)? Sagts doch, ihr wollt eine langsame Anwendung, um dann die Behauptung aufzustellen, Java waere langsam

Thread.sleep(10) ist im Rahmen der Spieleprogrammierung durchaus üblich, um anderen Prozessen Zeit zum ausführen zu geben. Wenn Thread.sleep(10) dazu führen würde, daß eine Java-Anwendung als langsam bezeichnet wird hat sie ein grundsätzliches Problem bzw. der Programmierer. Ich verwende immer ein Sleep ohne Performance-Probleme zu haben und habe dies auch regelmäßig in anderen Programmen gesehen. Hier ein Beispiel dafür.
 

Exodus155

Mitglied
SO hier mal der aktuelle Quelltest:

Code:
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics; 
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.image.BufferedImage;
import java.awt.image.RGBImageFilter;
import java.awt.image.VolatileImage;
import java.io.File;

import javax.swing.JFrame; 
import javax.swing.JPanel;


public class game extends JPanel{ 	
	
//Kugel
	private int w = 100;
    private int x = 100; 
    private int y = 150;
    private int z = 150; 
    
    long last = 0; 
    long delta = 0; 
    double mod = 1000000000; 
    int speed = 150; 

    private boolean up = false; 
    private boolean down = false; 
    private boolean left = false; 
    private boolean right = false; 
    
	VolatileImage img;
	static Image image;


   protected void paintComponent(Graphics g)
    {

	   
   	super.paintComponent(g); 

   	Graphics2D g2 = (Graphics2D) g;
   	
	   
    	
   	
    	
    	g2.drawImage(image, w,x,this);


    			
    }
    
    public void doIt() { 
        try { 
            
            while (true) { 
                
              if(last==0){ 
                last = System.nanoTime(); 
              }else{ 
                delta = System.nanoTime() - last; 
                last = System.nanoTime(); 
              } 
                
                if (left) { 
                   w -= speed*(delta/mod); 
                } 
                if (right) { 
                   w += speed*(delta/mod); 
                } 
                if (up) { 
                   x -= speed*(delta/mod); 
                } 
                if (down) { 
                   x += speed*(delta/mod); 
                } 
                
                Thread.sleep(10); 
                repaint() ; 
            } 
            
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 



    


    public static void main(String[] args) { 
    	
        image = Toolkit.getDefaultToolkit().getImage("Kugel.gif");
        JFrame f1 = new JFrame(); 
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f1.setResizable(false); 
        f1.setSize(1280, 1024); 
        f1.setVisible(true); 
        game ga = new game(f1);
        f1.getContentPane().add(ga); 
        f1.add(ga); 
        
        ga.doIt(); 

    } 


    game(JFrame jf) { 
        KeyListener al1 = new MyListener(); 
        jf.addKeyListener(al1); 
    	
    } 

    class MyListener implements KeyListener { 

        public void keyPressed(KeyEvent event) { 
            switch (event.getKeyCode()) { 
            case (KeyEvent.VK_LEFT): 
                left = true; 
                break; 
            case (KeyEvent.VK_RIGHT): 
                right = true; 
                break; 
            case (KeyEvent.VK_UP): 
                up = true; 
                break; 
            case (KeyEvent.VK_DOWN): 
                down = true; 
                break; 
            } 
        } 

        public void keyReleased(KeyEvent event) { 
            switch (event.getKeyCode()) { 
            case (KeyEvent.VK_LEFT): 
                left = false; 
                break; 
            case (KeyEvent.VK_RIGHT): 
                right = false; 
                break; 
            case (KeyEvent.VK_UP): 
                up = false; 
                break; 
            case (KeyEvent.VK_DOWN): 
                down = false; 
                break; 
            } 
        } 

        public void keyTyped(KeyEvent arg0) { 
        } 
    } 
}

Also es geht jetz gut aber es ruckelt noch immer!
Ahja bitte sagts mir wo sich fehler verstekcne!

MFG
Exodus
 

Quaxli

Top Contributor
Also bei mir ruckelt nichts. Ich habe allerdings noch ein paar Änderungen vorgenommen, bzw. ein paar Vorschläge.

1. Klassennamen werde in Java üblicherweise groß geschrieben. Bennene Deine Klasse doch mal in Game um

2. die Zeile f1.setVisible(true) sitzt noch immer falsch. Diese sollte erst kommen wenn alle Komponenten in den JFrame eingefügt wurden, z. B. so:

Code:
public static void main(String[] args) {
       

        JFrame f1 = new JFrame();
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setResizable(false);
        f1.setSize(800, 800);

        game ga = new game(f1);
        f1.getContentPane().add(ga);
        f1.add(ga);
        f1.setVisible(true);
        
        ga.doIt();

    }

3. Auf statische Variablen würde ich möglichst verzichten und daher das Einlesen der Grafik von der main-Methode in den Konstruktor des JPanels verschieben. Zusätzlich lese ich Grafiken etwas anders ein, überlege Dir, ob es Dir zusagt, man umgeht ein paar Probleme, wenn man das Programm z. B. über WebStart verteilen will. Natürlich kannst Du die Toolkit-Variante auch so lassen.

Code:
    game(JFrame jf) {
    	
      URL ball_url = this.getClass().getClassLoader().getResource("Kugel.gif");
      try {
				ball = ImageIO.read(ball_url);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	
        KeyListener al1 = new MyListener();
        jf.addKeyListener(al1);
       
    }


4. Die Paint-Methode habe ich ausgedünnt. Wozu der Cast nach Graphics2D? Momentan ist er zumindest unnötig:



Code:
   protected void paintComponent(Graphics g){
      super.paintComponent(g);
      g.drawImage(ball, w,x,this);
    }

Nachdem das ein bißchen viel war, hier noch mal der komplette Code mit meinen Änderungen:

Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Game extends JPanel{    
   
	private static final long	serialVersionUID	= 1L;
	//Kugel
    private int w = 100;
    private int x = 100;
    
    long last = 0;
    long delta = 0;
    double mod = 1000000000;
    int speed = 150;

    private boolean up = false;
    private boolean down = false;
    private boolean left = false;
    private boolean right = false;
   
    BufferedImage ball;


   protected void paintComponent(Graphics g){
      super.paintComponent(g);
      g.drawImage(ball, w,x,this);
    }
   
    public void doIt() {
        try {
           
            while (true) {
               
              if(last==0){
                last = System.nanoTime();
              }else{
                delta = System.nanoTime() - last;
                last = System.nanoTime();
              }
               
                if (left) {
                   w -= speed*(delta/mod);
                }
                if (right) {
                   w += speed*(delta/mod);
                }
                if (up) {
                   x -= speed*(delta/mod);
                }
                if (down) {
                   x += speed*(delta/mod);
                }
               
                Thread.sleep(10);
                repaint() ;
            }
           
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



   


    public static void main(String[] args) {
       

        JFrame f1 = new JFrame();
        f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f1.setResizable(false);
        f1.setSize(800, 800);

        Game ga = new Game(f1);
        f1.getContentPane().add(ga);
        f1.add(ga);
        f1.setVisible(true);
        
        ga.doIt();

    }


    Game(JFrame jf) {
    	
  	  URL ball_url = this.getClass().getClassLoader().getResource("Kugel.gif");
      try {
				ball = ImageIO.read(ball_url);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    	
        KeyListener al1 = new MyListener();
        jf.addKeyListener(al1);
       
    }

    class MyListener implements KeyListener {

        public void keyPressed(KeyEvent event) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_LEFT):
                left = true;
                break;
            case (KeyEvent.VK_RIGHT):
                right = true;
                break;
            case (KeyEvent.VK_UP):
                up = true;
                break;
            case (KeyEvent.VK_DOWN):
                down = true;
                break;
            }
        }

        public void keyReleased(KeyEvent event) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_LEFT):
                left = false;
                break;
            case (KeyEvent.VK_RIGHT):
                right = false;
                break;
            case (KeyEvent.VK_UP):
                up = false;
                break;
            case (KeyEvent.VK_DOWN):
                down = false;
                break;
            }
        }

        public void keyTyped(KeyEvent arg0) {
        }
    }
}


Gruß

Ralf
 

Exodus155

Mitglied
Ah jetz gehts! stimmtruckelt nichts mehr! ok ähm daran war set.visible true schuld!! HEHE danke ok also nächstes problem: wenn ich nach links drücke läuft der ball schneller alss wenn ich nach rechts drücke warum? Und wenn ich mehrere Grafiken einfügen will(hab nicht getan), dann fängts sicher an zu ruckeln oder? hast du für diese probs eine lösung?

MFG
Exodus
 

Quaxli

Top Contributor
Die unterschiedliche Geschwindigkeit liegt an einem Rundungsfehler. Ändere mal die Variablen w und x in double um
und ändere die paint-Methode wie folgt:

Code:
   protected void paintComponent(Graphics g){
      super.paintComponent(g);
      g.drawImage(ball, (int)w,(int)x,this);
    }

Dann paßt's.

Was das Anzeigen mehrerer Objekte betrifft: Das macht man dann nicht mehr so. In dem Fall solltest Du Dich ein wenig mit Objektorientierung beschäftigen.

Schau Dir mal das Space-Invaders-Tutorial auf cokeandcode.com an. Das hat mir am Anfang auch sehr geholfen.
Hier ist der Link.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Java Buch fehlermeldung Spiele- und Multimedia-Programmierung 61
yakazuqi Minecraft java.lang.Error: Watchdog Spiele- und Multimedia-Programmierung 3
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
N Minecraft Java Error Spiele- und Multimedia-Programmierung 6
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
1Spinne Minecraft Fabric Modding Java Error Spiele- und Multimedia-Programmierung 2
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
O Browser-basiertes online Pokerspiel mit Java Spiele- und Multimedia-Programmierung 1
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
G VST-Plugins in Java verwenden Spiele- und Multimedia-Programmierung 0
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
leon_krys Java-Bußgeldrechner Spiele- und Multimedia-Programmierung 5
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
P Website mit Java Backend? Spiele- und Multimedia-Programmierung 1
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
E Kalah Java Implementation Spiele- und Multimedia-Programmierung 1
G [Java] Vereinfachung von Boolean Abfragen Spiele- und Multimedia-Programmierung 3
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
T Java 3D Spiele- und Multimedia-Programmierung 2
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
J Java Buttons Spiele- und Multimedia-Programmierung 6
T Java Kalender Spiele- und Multimedia-Programmierung 5
Ice4P4rty Java Optische Oberfläche Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
H Yu-Gi-Oh! Mit Java was tun? Spiele- und Multimedia-Programmierung 6
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
MaxG. Java Internet Radio Spiele- und Multimedia-Programmierung 6
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
P java.lang.NoClassDefFoundError: in Greenfoot Spiele- und Multimedia-Programmierung 0
G Java Achsen invertieren Spiele- und Multimedia-Programmierung 2
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
D Java sound pulseaudio Spiele- und Multimedia-Programmierung 0
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
beatles Java Minesweeper - OS X und Win7 Unterschied Spiele- und Multimedia-Programmierung 2
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
windl MoviePlayer in Java Spiele- und Multimedia-Programmierung 0
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
E Java Jump and Run Map zu groß Spiele- und Multimedia-Programmierung 14
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P Java 2D Bug? Spiele- und Multimedia-Programmierung 8
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
R Java App sendet Midi Daten über Flash Spiele- und Multimedia-Programmierung 3
O Java Zeile aus Textdatei zufällig ausgeben Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
J Java Kollisionsabfrage Spiele- und Multimedia-Programmierung 21
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
P Java Grafiken mit Rechnungen verknüpfen Spiele- und Multimedia-Programmierung 4
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
F Das sag mir einer Java ist plattform unabhänig ! Spiele- und Multimedia-Programmierung 10
C virtueller stereomix (java sound API) Spiele- und Multimedia-Programmierung 0
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
U Blender in Java Spiele- und Multimedia-Programmierung 8
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
K Java 15/Slide/Boss Puzzle Spiele- und Multimedia-Programmierung 2
T Java 3D - Step oder IGES Spiele- und Multimedia-Programmierung 1
H 3D Spiele mit Java - Diskussion Spiele- und Multimedia-Programmierung 35
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
M Bilder in Java Spiele- und Multimedia-Programmierung 7
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
N Minecraft java lernen minecraft Spiele- und Multimedia-Programmierung 20
J 2d Ansicht mit Java 3d Spiele- und Multimedia-Programmierung 13
F Abbyy finereader aus java starten, Ergebnis zurück? Spiele- und Multimedia-Programmierung 2
P Zeichenübungen mit Java Spiele- und Multimedia-Programmierung 4
M Minecraft weitere Java Entwickler für minecraft projekt gesucht Spiele- und Multimedia-Programmierung 0
I Minecraft Java programmierungs fehler "MineCraft" Spiele- und Multimedia-Programmierung 6
J Java 2D Sicht Spiele- und Multimedia-Programmierung 13
H wma Datei abspielen: java.io.IOException: Resetting to invalid mark Spiele- und Multimedia-Programmierung 11
M Würdet ihr sagen Java Applets eignen sich gut Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben