Seite 1 von 1

Eine Pause generieren

Verfasst: 07.01.2005 13:22
von neo67
Hallo,

ich bastele gerade an einem Spielchen rum und möchte dem Benutzer die Möglichkeit geben auch mit P oder der [PAUSE] Taste eine Pause zu generieren, ich komme da aber zu keinem Ergebnis.
Danke für die Tipps. :)

Gruß
Neo

Verfasst: 07.01.2005 13:26
von nicolaus
OK nun noch die frage wo liegt das prob? An dem Shortcute mit der Taste P oder daran wie du ne pause hin bekommst?

MfG Nico

PAUSE!?!

Verfasst: 07.01.2005 14:54
von Hroudtwolf
Die Frage ist ganz schnell beantwortet.

SOWEIIT du wie die meisten auf PROCEDURE-Basis programmierst!

Deine Sprites sind Proceduren
Deine Bewegungen.
Deine Ereignissabfrage
und der rest sind auch Proceduren

Jetzt mußt du nur noch ne Abfrage nach nem P machen.
Wenn P gedrückt wurde werden alle Proceduren aus der Hauptschleife genommen.

Code: Alles auswählen

if p=1
sprites()
bewegungen()
events()

else
pausebild()
endif

nur so ungefähr. Aber so mach ich das schon seit Pascal und Quickbasic.

Genau

Verfasst: 07.01.2005 15:01
von neo67
nicolaus hat geschrieben:OK nun noch die frage wo liegt das prob? An dem Shortcute mit der Taste P oder daran wie du ne pause hin bekommst?

MfG Nico
Das Abfragen der Tastatur ist klar, was mache ich aber in der IF Schleife?
Ein Repeat? Und wenn ja mit was? Delay klappt ja nicht, weil da alles tot ist.
Also kann ich das Until nicht mehr abfragen.

Danke & Gruß
Neo

Re: PAUSE!?!

Verfasst: 07.01.2005 15:05
von neo67
Hroudtwolf hat geschrieben:Die Frage ist ganz schnell beantwortet.

SOWEIIT du wie die meisten auf PROCEDURE-Basis programmierst!

Deine Sprites sind Proceduren
Deine Bewegungen.
Deine Ereignissabfrage
und der rest sind auch Proceduren

Jetzt mußt du nur noch ne Abfrage nach nem P machen.
Wenn P gedrückt wurde werden alle Proceduren aus der Hauptschleife genommen.

Code: Alles auswählen

if p=1
sprites()
bewegungen()
events()

else
pausebild()
endif

nur so ungefähr. Aber so mach ich das schon seit Pascal und Quickbasic.
Ich habe gestern erst angfangen mit PB, und lerne dadurch, dass kleine Fassspielchen zu modifizieren und zu erweitern. Deswegen sind das wahrscheinlich keine Prozeduren.

Aber das merke ich mir für die Zukunft. :)

Gruß
Neo

Hier ist die Lösung! :)))

Verfasst: 07.01.2005 15:52
von neo67
Steht sogar in der Hilfe. :oops:

Code: Alles auswählen

If InitSprite() And InitKeyboard() And OpenScreen(800,600,16,"") 
    Paused = #False 
    Repeat 
      FlipBuffers() 
      
      If StartDrawing(ScreenOutput()) 
        
        ExamineKeyboard() 
        If KeyboardReleased(#PB_Key_P) 
          If Paused = #False 
            Paused = #True 
          Else 
            Paused = #False 
          EndIf 
        EndIf 
        
        DrawingMode(0) 
        Locate(20,20) 

        If Paused = #False 
          !!!!!!!!!!!   Hier kommt die Bewegung rein   !!!!!!!!!!!!!!1
        Else 
          DrawText("Programm angehalten...") 
        EndIf 

        StopDrawing() 
      EndIf 
    Until KeyboardPushed(#PB_Key_Escape) 
  EndIf 
Das Problem war bei mir, das ich immer ein

Code: Alles auswählen

KeyboardPushed(KeyID) 
benutzt habe und kein

Code: Alles auswählen

KeyboardReleased

Verfasst: 08.01.2005 13:07
von hardfalcon
Pass auf, wenn du im Code herumdokterst, ein Befehl, den du weglässt, kann fatale Folgen heben. Z.b. darfst du FlipBuffers() auf keinen Fall entfernen, da das Bild sonst nicht refreshed wird. Und FlipBuffers() muss natürlich auch in der Repeat-Schleife stehen!
cya
Pascal

Re: Hier ist die Lösung! :)))

Verfasst: 11.01.2005 18:23
von Kaeru Gaman
neo67 hat geschrieben:Das Problem war bei mir, das ich immer ein

Code: Alles auswählen

KeyboardPushed(KeyID) 
benutzt habe und kein

Code: Alles auswählen

KeyboardReleased
stattgegeben, dass ist bei einem Toggle die einfachste lösung,
um ein hin-und-her-togglen während des tastendrucks zu vermeiden.

wenn es aber um funktionen geht, bei denen es wichtig ist,
zu welchem zeitpunkt sie ausgelöst werden (z.b. JUMP in nem game)
würde ich ne BUSY_FLAG-lösung vorziehen:

Code: Alles auswählen

If KeyboardPushed(Taste) And Busy_Flag = 0
    Busy_Flag = 1
    FunctionCall()
EndIf
If KeyboardReleased(Taste)
   Busy_Flag = 0
EndIf