Applet Gameloop?



  • Hallo,
    ein game loop in c++ mit windows sieht ja normal in etwa so aus:

    while(!quit)
    {
        float startTime = GetTime();
        ProcessMessages();
        MoveScene(deltaTime);
        RenderScene(deltaTime);
        float endTime = GetTime();
        deltaTime = endTime-startTime;
    }
    

    aber in einem Applet geht das ja nicht da so eine schleife ja die gui komplett blockiert. Wie wird das also gemacht?





  • Hat jemand viellicht noch etwas konkreteres?



  • Hat jemand veillicht noch etwas konkreteres?



  • japplet schrieb:

    Hat jemand veillicht noch etwas konkreteres?

    http://java.sun.com/javase/6/docs/api/java/lang/Thread.html



  • public class MyApplet extends Applet implements Runnable
    {
      private Thread thread;
    
      public void init()
      {
        thread=new Thread(this);
        thread.start();
      }
    
      public void run()
      {
        try
        {
          while(true)
          {
            Thread.sleep(40); // Zeit in msec
            repaint();
          }
        }
        catch(Exception e) {}
      }
    }
    


  • japplet schrieb:

    Hat jemand veillicht noch etwas konkreteres?

    Was bist du für ein faules Arsch. Ich hab mir mal den 3ten Treffer angeschaut und da war der Code für ein ganzes Applet drin.



  • Du bist aber schnell beim urteilen...

    Den link den du vermeintlich meintest habe ich gesehn und auch noch hundert andere aber gerade deswegen frag ich hier.

    Ich suche einen code der genau den oben genannten abbildet!

    Das problem ist das die bewegeungen zeitabhaengig seien sollen, wie aus dem c-code oben hervorgeht nur wie wird das am besten gemacht? Ich habe selbst eine in meinen augen sehr unelegante loesung schon selbst vor langer zeit gefunden die mit currentTimeMillis() in zwei verschieden funktionen arbeitet nur ist das eher ein hack in meinen augen. Ich dachte da muss es doch einen standard weg geben der schon etwas besser sein wird.

    Ich selber bin nicht in der lage mir einen besseren code auszudenken da es in meinen augen sehr unklar ist wie die Java GUI im hintergrund arbeitet. Ich habe loesungen gesehn die arbeiten mit events und solange warten bis das zeichnen der GUI abgeschlossen ist aber das scheint auch nicht wirklich der "Standardweg" zu sein.

    Also wenn jemand noch vorschlaege hat wie man es besser oder ueberhaubt anstellen koennte dann wuerde ich mich freuen wenn er sie hier veroeffentlicht.



  • Vielleicht hättest du das gleich schreiben sollen. 🙄
    Aber ich seh jetzt keinen großen unterscheid zu sowas.

    public class MyApplet extends Applet implements Runnable
    {
      private Thread thread;
    
      public void init()
      {
        thread=new Thread(this);
        thread.start();
      }
    
      public void run()
      {
        try
        {
          while(true)
          {
            long startTime = System.currentTimeMillis();
            MoveScene(deltaTime);
            repaint();  //Warum du die Zeit zum rendern brauchst weiß ich nicht, aber du kannst deltaTime auch als Class member halten
            long endTime = System.currentTimeMillis();
            deltaTime = endTime-startTime;
            Thread.sleep(20); // hier etwas Pause, für GUI eingaben (MouseListener            
                              // oder sowas). Bin nicht ganz sicher obs auch ohne Pause geht
          }
        }
        catch(Exception e) {}
      }
    }
    

Log in to reply