Pause¿?

Anfängerfragen zum Programmieren mit PureBasic.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Pause¿?

Beitrag von Tompazi »

Hallo ich programmiere gerade ein kleines Spielchen und habe dazu 3 Fragen:
[GELÖST] DANKE

Code: Alles auswählen

X = 1
If KeyboardPushed(#PB_Key_Space)
X = 0
;Jetzt soll X 5 Sekunden 0 bleiben ich habs mit delay versucht aber da bleibt das ganze Spiel stehen
X = 1
EndIf
und:[GELÖST] DANKE

Code: Alles auswählen

If KeyboardPushed(#PB_Key_P)
;Wie kann ich es machen, dass das Spiel pausiert wird bis wieder P gedrückt wird?
Endif
und: [GELÖST] DANKE

Code: Alles auswählen

If OpenWindow(0, 100, 200, 200, 100, "blubb", #PB_Window_MinimizeGadget) 
 If CreateGadgetList(WindowID(0))
SpinGadget(5, 70, 70, 30, 20, 0,10,#PB_Spin_ReadOnly)
 SetGadgetState (5, 0) 
 A = GetGadgetState(5)
 SetGadgetText(5, Str(A))
 EndIf
 EndIf
Ich will, dass im SpinGadget den Wert angezeigt wird den sie gerade hat.
So geht es nicht...

Danke Tompazi
Zuletzt geändert von Tompazi am 29.10.2007 19:05, insgesamt 2-mal geändert.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Re: Pause¿?

Beitrag von scholly »

Tompazi hat geschrieben:Ich will, dass im SpinGadget den Wert angezeigt wird den sie gerade hat.
Meinst Du so:

Code: Alles auswählen

If OpenWindow(0, 100, 200, 200, 100, "blubb", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget)
  If CreateGadgetList(WindowID(0))
    SpinGadget(5, 70, 70, 30, 20, 0,10)
    SetGadgetState (5, 5)
    A = GetGadgetState(5)
    SetGadgetText(5, Str(A))
  EndIf
EndIf

Repeat

Until WaitWindowEvent() = #PB_Event_CloseWindow

End
Wenn Dein Spielchen in einem normalen Fenster laufen soll, emfiehlt die PB-Help allerdings die Benutzung von AddKeyboardShortcut() und nicht die Keyboard-Befehle.

hdh... scholly
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Hättest du die Hilfe gelesen wüßtest du das hier:

Code: Alles auswählen

 If OpenWindow(0, 0, 0, 140, 70, "SpinGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    SpinGadget     (0, 20, 20, 100, 25, 0, 1000)
    SetGadgetState (0, 5) : SetGadgetText(0, "5")   ; legt den Anfangswert fest
    Repeat
      Event = WaitWindowEvent()
      If Event = #PB_Event_Gadget
        If EventGadget() = 0
          SetGadgetText(0, Str(GetGadgetState(0)))
        EndIf
      EndIf
    Until Event = #PB_Event_CloseWindow
  EndIf
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

ja aber es bleibt dann bei 0 wie mache ich das wenn ich rauf drücke 1 kommt ... usw.
EDIT: Danke geht jetzt bleiben noch die zwei andern fragen

Danke
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Re: Pause¿?

Beitrag von AND51 »

Tompazi hat geschrieben:

Code: Alles auswählen

X = 1
If KeyboardPushed(#PB_Key_Space)
X = 0
;Jetzt soll X 5 Sekunden 0 bleiben ich habs mit delay versucht aber da bleibt das ganze Spiel stehen
X = 1
EndIf
Lösung:

Du musst einen Timer einbauen:

Code: Alles auswählen

Define X=0
Define zeit

Repeat

     If X = 1 And ElapsedMilliseconds() > zeit
          zeit=ElapsedMilliseconds()+5000 ; Setze 'zeit' auf einen Datumswert, der in der Zukunft liegt
          X = 0
     EndIf

X = 1

Debug X

ForEver
X wird hier laufend debuggt, jedoch wird X, sobal es auf 1 gesetzt wird, für 5 Sekunden 0 bleiben, ganz so, wie du es wolltest. Denn X wird nur zurückgesetzt, wenn der Timer abgelaufen ist. Falls du schon ein "fortegeschrittener Programmierer" bist, empfehle ich dir hierfür Strukturen, damit du Variablenwert und zeit bequem in einer Variablen speichern kannst.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Macht das hier, was Du willst ?

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenWindow(0, 10, 200, 500, 310, "blubb", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget) 
  If CreateGadgetList(WindowID(0))
    TextGadget(1, 350, 10, 50, 20, "Running")
    SpinGadget(2, 350, 70, 30, 20, 0,10,#PB_Spin_Numeric|#PB_Spin_ReadOnly)
    SetGadgetState (2, 5)
    A = GetGadgetState(2)
    SetGadgetText(2, Str(A))
  EndIf
  
  If OpenWindowedScreen(WindowID(0),5,5,320,300,0,0,0)
    ; Spielereien ;)
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
    End
  EndIf
  
EndIf

pause = #False
x = 1

Repeat
  Event.l = WindowEvent()    

  If Event = #PB_Event_Gadget    ; do the normal application stuff here...
    
    Gadget  = EventGadget()  
    Select Gadget
      Case 2
        SetGadgetText(1,"Spinned.")
      Case 1
        ;zur zeit nix ;)
    EndSelect
  
  Else
    FlipBuffers()
    Delay(1)  
    ExamineKeyboard()
    If KeyboardReleased(#PB_Key_Escape)   ; drücken Sie Esc zum Beenden
      Debug "ESC gedrückt"
      End
    ElseIf KeyboardReleased(#PB_Key_P)    ;Wie kann ich es machen, dass das Spiel pausiert wird bis wieder P gedrückt wird?
      If pause = #False
        Debug "P zum ersten mal gedrückt"
        pause = #True
        SetGadgetText(1,"Pause")
        Repeat
        Delay(1)
        ExamineKeyboard()
        Until KeyboardReleased(#PB_Key_P)
        Debug "P zum zweiten mal gedrückt"
        pause = #False
        SetGadgetText(1,"Running")       
      Else
        Debug "P zum zweiten mal gedrückt"
        pause = #False
        SetGadgetText(1,"Running") 
      EndIf
      Delay(100)
    ElseIf KeyboardReleased(#PB_Key_Space) ;Jetzt soll X 5 Sekunden 0 bleiben
      uts = Date()
      X = 0
      Debug "SPACE gedrückt, uts = " + Str(uts)
      Delay(100)
    EndIf
    
  EndIf

  If (Date() > uts + 4) And (x=0)
    X = 1
    Debug "5 Sekunden um, x = 1"
    Debug "uts = " + Str(Date())
  EndIf
    
Until Event = #PB_Event_CloseWindow
End
Blade Trinity vorbei ... scholly bubu ;)
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:Blade Trinity vorbei ... scholly bubu ;)
hat sich nicht gelohnt. Kiffi bubu dito

Grüße ... Kiffi
a²+b²=mc²
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

Danke das hat mir sehr geholfen :D
aber ich habe noch eine frage ...

Was ist der #PB_Key_ für Enter?
Und für den rechten Shift #PB_Key_RightShift hat nicht geklappt :cry:

Danke Tompazi
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Tompazi hat geschrieben:Was ist der #PB_Key_ für Enter?
Und für den rechten Shift #PB_Key_RightShift hat nicht geklappt :cry:
Steht doch alles unterKeyboardPushed() in der help.

Code: Alles auswählen

  If InitSprite() And InitKeyboard() And OpenScreen(800,600,16,"")
    Repeat
      FlipBuffers()
      If StartDrawing(ScreenOutput())
        DrawText(0, 0, "ESC zum Beenden drücken")
        StopDrawing()
      EndIf
      
      ExamineKeyboard()
      If KeyboardPushed(#PB_Key_PadEnter)   ; drücken Sie Esc zum Beenden
        FlipBuffers()
        If StartDrawing(ScreenOutput())
          DrawText(30,30, "#PB_Key_PadEnter = ENTER im Ziffernblock")
          StopDrawing()
        EndIf
        Debug "#PB_Key_Return = ENTER"
      EndIf
      
      If KeyboardPushed(#PB_Key_RightShift)   ; drücken Sie Esc zum Beenden
        FlipBuffers()
        If StartDrawing(ScreenOutput())
          DrawText(0,90, "#PB_Key_RightShift geht doch !!!!")
          StopDrawing()
        EndIf      
        Debug "#PB_Key_RightShift geht doch !!!!"
      EndIf
      
      If KeyboardPushed(#PB_Key_Escape)   ; drücken Sie Esc zum Beenden
        Debug "#PB_Key_Escape"
        End
      EndIf
    ForEver
  EndIf
Tja, wer lesen kann, ist klar im Vorteil =)
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

ok enter geht jetzt aber die Rechte shift taste geht nicht !!!!!
ich habe die hilfe eh gelesen aber wie soll ich wissen das Return Enter ist :freak:
Man kann ja auch zahlen verwenden statt #PB_Key_ z.B. 1 für Escape
was ist da die Nummer für Shift? (leftshift geht :evil: )

Danke Tompazi
Antworten