Seite 1 von 2
Pause¿?
Verfasst: 28.10.2007 19:35
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
Re: Pause¿?
Verfasst: 28.10.2007 22:23
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
Verfasst: 28.10.2007 23:43
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
Verfasst: 29.10.2007 00:25
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
Re: Pause¿?
Verfasst: 29.10.2007 01:08
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.
Verfasst: 29.10.2007 01:37
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

Verfasst: 29.10.2007 01:38
von Kiffi
scholly hat geschrieben:Blade Trinity vorbei ... scholly bubu

hat sich nicht gelohnt. Kiffi bubu dito
Grüße ... Kiffi
Verfasst: 29.10.2007 19:04
von Tompazi
Danke das hat mir sehr geholfen
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
Danke Tompazi
Verfasst: 29.10.2007 19:26
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
Steht doch alles unter
KeyboardPushed() 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

Verfasst: 29.10.2007 19:55
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
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

)
Danke Tompazi