Threads dauerhafte bewegung mit threads

  • Themenstarter Themenstarter moorhuhn
  • Beginndatum Beginndatum
M

moorhuhn

Gast
Hi all
ich programmiere gerade einen moorhuhn klon leider scheiter ich gerade daran das sich ein kästchen(wird später ein moorhuhn) gleichmäßig über den bildschirm bewegt ich will das in einem thread machen da es später logischer weise mehrere moorhüner geben soll.Also meine frage: warum funktionirt das nicht was muss ich verändern??? hier mein bisheriger code:
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class moorhuhn extends Thread
{
  static Graphics2D g2d;
  static int posx = 0;
  static int posy = 50;
  static window win;
  
  public static void main(String[] args)
  {
    new moorhuhn();
    Thread t= new Thread(new Runnable()
    {
        
      @Override
      public void run()
      {
        while(true)
        {
          try
          {
              Thread.sleep(1 * 100);
          }
          catch (InterruptedException e)
          {

              e.printStackTrace();

          }

          posx+=100;
          win.repaint();
        }
      }
    } );
  }
  

  
  public moorhuhn() {
        /*window*/ win = new window();
    }
  
  static class window extends Frame
  {
      public window()
      {
          addWindowListener(new WindowAdapter()
          {
              public void windowClosing(WindowEvent evt)
              {
                  dispose();
              }
          });
          setSize(500, 500);
          setVisible(true);
          setResizable(false);
      }

      public void paint(Graphics g)
      {
          g2d = (Graphics2D) g;
          g2d.drawRect(posx, posy, 100, 100);
      }
  }
}
Ich danke schonmal allen die mir helfen oder es wenigstens versuchen.
 
will das in einem thread machen da es später logischer weise mehrere moorhüner geben soll
Weil es mehrere Moorhühner gibt heißt dass nicht das du mehrere Threads (oder überhaupt nur einen Thread) brauchst. In deinem (einzigen) Thread läuft deine mainloop, in dem alle Moorhühner bewegt werden. Es ist auch nicht zwingend erforderlich einen Thread zu benutzen. Allerdings ist es zu empfehlen, ich weiß aber nicht genau warum. Ich vermute das dann die Nebenläufigkeit von Benutzereingaben und mainloop besser funktioniert.

Ich würde dir ein Spieletutorial empfehlen. Dein Code zeugt davon das du nicht genau weißt wie ein Spiel programmiert wird (oder generell ein Java Programm, nicht böse gemeint.... Aber zB schreibt man Klassen groß, oder ich glaube die wenigsten würden ihre main Klasse moorhuhn nennen, da man ja Wahrscheinlich später eine Klasse Moorhuhn braucht die ein Moorhuhn repräsentiert... usw).
 
ach mist jetzt vergess ich echt den thread zu starten. Danke für den hinweis funktionirt jetzt!
 
ach ne heut klapt überhaupt nix hab nochmal ein problem ich krieg nämlich den mouseListener nicht geaddet hier mein neuer code kann mir noch mal jemand helfen?
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class arcuz12 // implements Runnable
{
    Graphics2D g2d;
    int posx = 250, posy = 50;

    public static void main(String[] args) {
        new arcuz12();
    }

    public arcuz12() {
        window win = new window();
    }

    class window extends Frame {
        public window() {
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent evt) {
                    dispose();
                }
            });
            setSize(500, 500);
            setVisible(true);
            setResizable(false);
            addKeyListener(new key(this));
        }

        public void paint(Graphics g) {

            g2d = (Graphics2D) g;
            g2d.drawRect(posx, posy, 100, 100);
        }
    }

    public class key implements KeyListener {
        int i = posx;
        Frame win;

        public key(Frame win) {
            this.win = win;
        }

        public void keyReleased(KeyEvent e) {
            ;
        }

        public void keyPressed(KeyEvent e) {
            switch (e.getKeyCode()) {
            case 37:
                posx--;
                break;
            case 39:
                posx++;
                break;

            case 38:
                posy--;
                break;

            case 40:
                posy++;
                break;

            }
            win.repaint();
        }

        public void keyTyped(KeyEvent e) {
            ;
        }
    }
}
 
ach shit ich hat 2 codes offen und hab ausversehen den falschen hier rein gestelt hier der richtige:
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import javax.swing.*;


public class moorhuhn extends Thread
{
  static Graphics2D g2d;
  static int posx = -50;
  static int posy = 50;
  static window win;
   static boolean lebt = true;
  
  public static void main(String[] args)
  {
    new moorhuhn();
    Thread t= new Thread(new Runnable()
    {
        
      @Override
      public void run()
      {
        while(true)
        {
          try
          {
              Thread.sleep(1 * 10);
          }
          catch (InterruptedException e)
          {

              e.printStackTrace();

          }

          posx+=1;
          if(posx>=900)
          {
            posx=-50;
          }
          win.repaint();
        }
      }
    } );
    t.start();
  }
  
  public class maus implements MouseListener
  {
    public void mouseClicked(MouseEvent e)
    {
      if(posx>=e.getX() && (posx + 50)<=e.getX() )
      {
        if(posy>=e.getY() && (posy + 50)<=e.getY() )
        {
          lebt = false;
        }
      }
    }
    public void mousePressed(MouseEvent e)
    {

    }
    public void mouseExited(MouseEvent e)
    {

    }
    public void mouseEntered(MouseEvent e)
    {

    }
    public void mouseReleased(MouseEvent e)
    {

    }
    
  }
  

  
  public moorhuhn() {
        win = new window();
        addMouseListener(new maus());
    }
  
  static class window extends Frame
  {
      public window()
      {
          addWindowListener(new WindowAdapter()
          {
              public void windowClosing(WindowEvent evt)
              {
                  dispose();
              }
          });
          setSize(900, 500);
          setVisible(true);
          setResizable(false);
          //addMouseListener(new maus(this));
      }

      public void paint(Graphics g)
      {
          g2d = (Graphics2D) g;
          if(lebt == true)
          {
            g2d.drawRect(posx, posy, 50, 50);
          }
      }
  }
}
 
deinem moorhuhn objekt kannst du keinen MouseListener adden weil dafür gar keine Methode vorhanden ist. Anstelle möchtest du wahrscheinlich das hier:
Code:
win.addMouseListener(new maus());
 
hä was soll ich jetzt machen ich versteh dich nicht.Soll ich jetzt in zeile 85 stat:
Java:
addMouseListener(new maus());

Java:
addMouseListener(new maus());
schreiben funktionirt dann aber immer noch nicht.
 

Neue Themen


Zurück
Oben