Eine Pause generieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
neo67
Beiträge: 9
Registriert: 06.01.2005 17:14

Eine Pause generieren

Beitrag 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
Zuletzt geändert von neo67 am 07.01.2005 15:11, insgesamt 1-mal geändert.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

PAUSE!?!

Beitrag 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.
neo67
Beiträge: 9
Registriert: 06.01.2005 17:14

Genau

Beitrag 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
neo67
Beiträge: 9
Registriert: 06.01.2005 17:14

Re: PAUSE!?!

Beitrag 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
neo67
Beiträge: 9
Registriert: 06.01.2005 17:14

Hier ist die Lösung! :)))

Beitrag 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
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

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

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten