Announcement

Collapse
No announcement yet.

"Wandernder" Punkt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • "Wandernder" Punkt

    Hi Leute,
    ich bin heute wieder auf das nächste Problem gestossen :S ich hoffe das ich diesmal schneller auf die Lösung komme, nunja ich möchte wie der Titel schon sagt einen Punkt wandern lassen ich dachte mir ich mach das einfach in einer Schleife und warte innerhalb der Schleife immer etwas bis ich die Position des Punktes versetzte dabei ist folgendes herausgekommen:

    Code:
            int i = 0;
            ol.setLocation(33, i);
            i++;
            while( i < 370){
                try{
                ol.setLocation(33, i);
                Thread.currentThread().sleep(100);
                }
                catch(java.lang.InterruptedException ie){
                    System.err.println(ie);
                }
                i++;
            }
    Wie lange das Programm jetzt warten soll ist dabei ja jetzt erstmal nicht von allzu großer Bedeutung, mein Problem ist jetzt nur das der die Schleife auch schön durchläuft, nur das man den Punkt (ol) nicht "wandern" sieht er wird am ende der schleife an die Endposition (33,370) versetzt ? Wo ist das Problem, ich vermute das es irgendwetwas mit dem currentThread().sleep() zu tun hat und das das "wandern" verhindet ? Aber wie kann ich den Punkt sonst wandern lassen ? Ich hoffe ihr könnt mir auch diesmal helfen...

    Grüße Max

  • #2
    mit den wenigen Info ist keine Anwort möglich. Was ist o1? ggf. siehe SwingWorker
    Christian

    Comment


    • #3
      Okey, also ol ist ein ImagePanel auf einem JPanel:

      Code:
      try{
      ol = new test.ImagePanel("src\\ninjump\\p2.png");
      }catch(java.io.IOException ie){ System.err.println(ie); }
      Diesen Punkt bzw wohl eher das ImagePanel möchte ich dann auf dem JLabel von oben nach unten "wandern" lassen ...

      Comment


      • #4
        ???Warum wird dazu nicht ein Image benutzt, welches im Paint / in einem Thread gesetzt wird?
        Christian

        Comment


        • #5
          Sorry ich bin aufm dem Bereich der Grafikprogrammierung recht neu, ich habe mich jetzt natürlich darin eingelesen aber trotzdem habe ich erst Einsicht in einen kleinen Bereich erlangt und versuche das nach dem Motto "übung macht den Meister" den Rest beim eigenen Programmierung beizubringen.

          Aber wieder zum Problem, ich mache das ganze also als Image und erstelle dafür dann einen eigenen Thread aber in wiefern sorge ich dann dafür das das Bild wandert ?

          Comment


          • #6
            ->Swingworker
            Christian

            Comment


            • #7
              Okey danke dir ein weiteres mal , dann will ich mich da mal weiter einlesen und ich hoffe mal das ich das Problem dann diesmal eigenständiger gelöst bekomme

              Comment


              • #8
                Soo habe die lösung jetzt gefunden
                Zwar ohne SwingWorker aber läuft einwandfrei
                Code:
                   class Ballbewegung1  implements Runnable
                {
                    // Initialisierung der Variablen
                    int x_pos = 0;        // x - Position des Punkts
                    int y_pos = 0;    // y - Position des Punkts
                
                
                        public Ballbewegung1(){
                            start();
                        }
                
                    public void start ()
                    {
                
                        Thread th = new Thread (this);
                        th.start ();
                    }
                
                    public void stop()
                    {
                
                    }
                
                    public void destroy()
                    {
                
                    }
                
                    public void run ()
                    {
                        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
                
                        while (true)
                        {
                            y_pos ++;
                                        punkt.setLocation(x_pos, y_pos);
                
                            try
                            {
                                 Thread.sleep (20);
                            }
                            catch (InterruptedException ex)
                            {
                            }
                
                            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
                        }
                    }
                Endlich funktioniert mein Code mal ;D Danke die für die Hilfe

                Comment


                • #9
                  So zu dem Thema aber noch eine Frage das hat ja auch alles schön geklappt ich habe es jetzt auch geschafft das ganze in eine Klasse down zu packen:
                  Code:
                     class down  implements Runnable
                  Dessen Konstruktor direkt einen Punkt erzeugt und ihn "wandern" lässt ...
                  Nun erscheint auf meinem Jframe jedes mal wenn ich ein dieser down-Objekt
                  erstelle ein Punkt und wandert von unten nach oben...
                  Ich möchte aber für mein Programm (Spiel) das die Punkte automatisch generiert werden und automatisch die ganez eit neue Punkte erscheinen und nach unten wandern .... Dazu müsste ich die Objekt ja irgendwie in einer schleife erstellen,
                  ich hatte mir dazu mal folgendes überlegt:
                  Code:
                  oPunkt []p = new oPunkt[100];
                  p[i] = new Point();
                  Funktioniert auch erstmal ohne Compiler Fehler aber wirklich zufrieden bin ich mit der Lösung nicht, vlt könnt ihr mir nochmal weiterhelfen, also mein Grundproblem ist das ich automatisch immer wieder Punkte erscheinen lassen möchte und auf dem Jframe wandern lassen möchte, in meinem Spiel stellen diese Punkte halt Hindernisse dar die sich dem Spieler annähern und denen er ausweichen muss... Wie bekomme ich das denn sonst hin oder wie wird das in der Spiele Programmierung behandelt ? Ich habe bei Google auch schon nach einem Java Spiele Tutorial gesucht aber leieder nichts wirkliches gefunden, wahrscheinlich acuh weil Spiele wohl eher mit c++ programmiert werden aber nunja, habt ihr vlt eine Lösung für mein Problem oder ein Tutorial wo ich was darüber lesen kann ?

                  Grüße Max

                  Comment


                  • #10
                    Die Schleife ist die falsche herangehensweise. Weiterhin ist die Nutzung von Containerobjekten nicht günstig.

                    Erstelle einen Thread, der alle 25ms etwas tut, bzw. einen Sleep mit diesem Wert hat.

                    Diesem wird im Konstuktor ein Graphics-Objet übergeben. Beispielsweise das des Hauptframes

                    Erstelle Images (Klasse Image) von deinen Punkten

                    Erstelle eine "Animations"-Klasse die ein Image enthält, und die Bewegungsdaten (X/Y Positionen) von dem einen Image

                    Erstelle von allen Animations-Klassen eine ArrayList

                    Übergib diese ebenfalls dem Thread

                    Im Thread erstellst du ein Image im Speicher, zeichnest alle Punkte anhand der Positionen ein. Nach jedem Durchlauf wird die Postionsliste der einzelnen Punkt erhöht.
                    Kopiere das Speicherimage in das Graphics-Objekt

                    Das lässt sich ausbauen, in dem die Animationsklasse, mehrere Images für einen Punkt enthält, welches nach jedem Durchlauf erhöht wird. So kann der einzelne Punkt animiert werden.
                    Nach einem Durchlauf wird die Liste der Positionen oder Animationen in der Klasse nur nach einem bestimmten Zeitwert erhöht (der Thread läuft ja ungefähr alle 25ms). Dann entstehen unterschiedliche Geschwindigkeiten.
                    Die Animationsklasse enthält bestimmte Attribute wie Visible. So kann man ein Objekt mal an- und ausschalten
                    Die Animationsklasse enthält bestimmte Attribute wie Z-Order. Die Liste der Animationen, wird nach dieser sortiert. So werden Punkte vor- oder nacheinander gezeichnet
                    Die Animationsklasse enthält bestimmte Attribute wie ein Rechteck zur Kollisionskontrolle. Ein zweiter Thread kümmert sich nur darum, ob Objekte kollidieren

                    Mit einer "globalen" Liste der Animationen, kannst du Objekte hinzufügen oder löschen (synchronized)

                    Du kannst dem Thread ein BackgroundImage übergeben, welches immer als ersten in das Speicherimage gesetzt wird und so dafür sorgt, das die "Szene" gelöscht wird.

                    http://www.google.de/search?q=java+2...-a&safe=images
                    Zuletzt editiert von Christian Marquardt; 11.10.2010, 18:08.
                    Christian

                    Comment

                    Working...
                    X