InitKeyboard Probleme
InitKeyboard Probleme
Hi,
ich habe eine Frage, kann ich keyboard sachen also z.B.
if KeyboardPushed(1)
blub
endif
auch benutze, wenn ich mein fenster mit
If OpenWindow(0,100,100,500,400,"test",#PB_Window_SystemMenu)
öffne?
Weil ich bekomm dann immer die meldung, dass OpenScreen etc erst deklariert werden muss.
danke für hilfe!
ich habe eine Frage, kann ich keyboard sachen also z.B.
if KeyboardPushed(1)
blub
endif
auch benutze, wenn ich mein fenster mit
If OpenWindow(0,100,100,500,400,"test",#PB_Window_SystemMenu)
öffne?
Weil ich bekomm dann immer die meldung, dass OpenScreen etc erst deklariert werden muss.
danke für hilfe!
@carter
Hallo,
das sind Befehle für Spiele-Programmierung.
Wenn du in deiner Anwendung ermitteln möchtest, ob eine Taste gedrückt wurde: http://www.rsbasic.de/index.php?option= ... &Itemid=59
Oder:
Hallo,
das sind Befehle für Spiele-Programmierung.
Wenn du in deiner Anwendung ermitteln möchtest, ob eine Taste gedrückt wurde: http://www.rsbasic.de/index.php?option= ... &Itemid=59
Oder:
Code: Alles auswählen
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
AddKeyboardShortcut(0, #PB_Shortcut_A,1)
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_Menu
Select EventMenu()
Case 1
MessageRequester("","Taste 'A' wurde gedrückt",0)
EndSelect
EndIf
If EventID=#PB_Event_CloseWindow
Quit=1
EndIf
Until Quit=1
EndIf
es ist eigentlich auch mein ziel ein spiel zu programmieren, muss ich dafür das openscreen cmd benutzen? was mich dabei stört ist eben, dass das im fullscreen ist. ich les mir gerade einige tuts durch, da steht etwas von einem Windowed mode, den teste ich gleich mal, wieso ich aber schreibe ist, gibt es irgendwo eine liste von alle gadgets? Denn ich weiß nicht genau welche es gibt und da wäre dass doch hilfreich 

-
- Beiträge: 237
- Registriert: 17.10.2008 18:24
- Kontaktdaten:
Du musst keinen Screen oeffnen... Seh dir mal den Befehl OpenWindowedScreen() an:carter hat geschrieben:es ist eigentlich auch mein ziel ein spiel zu programmieren, muss ich dafür das openscreen cmd benutzen? was mich dabei stört ist eben, dass das im fullscreen ist. ich les mir gerade einige tuts durch, da steht etwas von einem Windowed mode, den teste ich gleich mal, wieso ich aber schreibe ist, gibt es irgendwo eine liste von alle gadgets? Denn ich weiß nicht genau welche es gibt und da wäre dass doch hilfreich
Ein Beispiel:
Code: Alles auswählen
InitKeyboard()
InitSprite()
OpenWindow(0, 0, 0, 200, 200, "Windowed Screen", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 200, 200, 0, 0, 0)
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
If WindowEvent() = #PB_Event_CloseWindow
End
EndIf
ForEver
Eine Liste aller Gadgets findest du in der PB-Hilfe...
@carter
Wenn du ein Spiel programmieren möchtest, dann kannst du entweder im Fullscreen oder in einem WindowScreen dein Spiel aufbauen...
Fullscreen: OpenScreen()
WindowScreen: OpenWindowedScreen()
Die Gadgets wie z.B. ButtonGadget, CheckBoxGadget u.s.w. kannst du nicht benutzen.
Welche PB-Version benutzt du?
Wenn du die neue Beta-Version benutzt, dann kannst du die Screen-Gadgets benutzen.
Eine Liste aller Befehle einer Library findest du hier: http://www.rsbasic.de/screenshots/158674018745610.png
(Das ist nur eine Beispiel-Library)
Da gibt es auch Libs wie ScreenGadgets oder so und ähnliche...
Wenn du ein Spiel programmieren möchtest, dann kannst du entweder im Fullscreen oder in einem WindowScreen dein Spiel aufbauen...
Fullscreen: OpenScreen()
WindowScreen: OpenWindowedScreen()
Die Gadgets wie z.B. ButtonGadget, CheckBoxGadget u.s.w. kannst du nicht benutzen.
Welche PB-Version benutzt du?
Wenn du die neue Beta-Version benutzt, dann kannst du die Screen-Gadgets benutzen.
Eine Liste aller Befehle einer Library findest du hier: http://www.rsbasic.de/screenshots/158674018745610.png
(Das ist nur eine Beispiel-Library)
Da gibt es auch Libs wie ScreenGadgets oder so und ähnliche...
-
- Beiträge: 237
- Registriert: 17.10.2008 18:24
- Kontaktdaten:
Gilt aber nicht fuer den WindowedScreen-ModusRSBasic hat geschrieben:Die Gadgets wie z.B. ButtonGadget, CheckBoxGadget u.s.w. kannst du nicht benutzen.
Wenn der Screen nicht ueber das ganze Fenster erstellt wird, kannst du die Gadgets ausserhalb des Screens benutzen.
Beispiel:
Code: Alles auswählen
InitKeyboard()
InitSprite()
OpenWindow(0, 0, 0, 200, 200, "Windowed Screen", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, 200, 100, 0, 0, 0)
CreateGadgetList(WindowID(0))
ButtonGadget(0, 20, 105, 100, 20, "Klick Mich")
Repeat
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
EventID = WindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
If EventID = #PB_Event_Gadget
If EventGadget() = 0
MessageRequester("Test", "Button wurde gedrueckt!")
EndIf
EndIf
Delay(1)
ForEver
ja ich weiß, das bin ich gerade am anschaun, ich versuch das auch alles zu verstehen + nachzuvollziehen, ich habe pb 4.20
Irgendwie ist windowed screen ein wenig buggy, vlt bilde ich mir das aber auch nur ein, ich habe ein bereits vorgegebenes spiel (eines aus nem tutorial) versucht, im windowed mode zu starten, doch wenn ich das spiel minimiere, dann hängt es sich auf, es hängt sich auch so manchmal auf, und ich kann mit der maus irgendwie nicht aus dem fenster hinaus navigieren.
Ich habe es ersteinmal (zumindest für heute, flachgelegt mein eigenes spiel zu machen, ich habe erkannt dass ich erstmal alles verstehen muss, daher arbeite ich mit einem "tutorial-spiel")
hier ist mal der quelltext:
und wie gesagt, da treten die oben genannten fehler auf und ich weiß leider nicht warum
Irgendwie ist windowed screen ein wenig buggy, vlt bilde ich mir das aber auch nur ein, ich habe ein bereits vorgegebenes spiel (eines aus nem tutorial) versucht, im windowed mode zu starten, doch wenn ich das spiel minimiere, dann hängt es sich auf, es hängt sich auch so manchmal auf, und ich kann mit der maus irgendwie nicht aus dem fenster hinaus navigieren.
Ich habe es ersteinmal (zumindest für heute, flachgelegt mein eigenes spiel zu machen, ich habe erkannt dass ich erstmal alles verstehen muss, daher arbeite ich mit einem "tutorial-spiel")
hier ist mal der quelltext:
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
OpenWindow(0, 0, 0, 1024, 768, "test screen", #PB_Window_ScreenCentered |#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768, 0, 0, 0)
#Max_Fass = 20
Dim FassX.w(#Max_Fass)
Dim FassY.w(#Max_Fass)
Dim FassExist.w(#Max_Fass)
Dim FassAnim.w(#Max_Fass)
Global Level.w
Global Maus_Knopf.w
Global Punkte.w
Global FassCount.w
Global Durchgefallen.w
Level = 1
LoadSprite(0,"GFX\NeuKreuz.bmp",0)
TransparentSpriteColor(0,255+256*0+256*256*255)
LoadSprite(1,"GFX\Back.bmp" ,0)
For x = 1 To 10
LoadSprite(10+x,"GFX\Fass" + Str(x) + ".bmp",0)
TransparentSpriteColor(10+x,255+256*0+256*256*255)
Next
Repeat
ExamineMouse()
ExamineKeyboard()
If MouseButton(1) And Maus_Knopf = 0
Maus_Knopf = 1
For x = 1 To #Max_Fass
If FassExist(x) = 1 And MouseX() > FassX(x) And MouseX() < FassX(x) + 20 And MouseY() > FassY(x) And MouseY() < FassY(x) + 20
FassExist(x) = 2
Punkte = Punkte + 10
EndIf
Next
EndIf
If MouseButton(1) = 0
Maus_Knopf = 0
EndIf
DisplaySprite(1,0,0)
For x = 1 To #Max_Fass
If FassExist(x) > 0
DisplayTransparentSprite(10+FassAnim(x)/3,FassX(x),FassY(x))
EndIf
Next
DisplayTransparentSprite(0,MouseX()-32,MouseY()-32)
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(0+256*0+256*256*255)
DrawText(0,0,"Punkte:" + Str(Punkte))
FrontColor(255+256*0+256*256*0)
DrawText(530,0,"Durchgefallen:" + Str(Durchgefallen)) ; ...
StopDrawing()
FlipBuffers()
FassCount = 0
For x = 1 To #Max_Fass
If FassExist(x) > 0
FassCount = FassCount + 1
If FassExist(x) < 3
FassY(x) = FassY(x) + 1
EndIf
If FassExist(x) > 1
FassAnim(x) = FassAnim(x) + 1
If FassAnim(x) > 30
FassExist(x) = 0
EndIf
EndIf
If FassExist(x) = 1 And FassY(x) > 460
Durchgefallen = Durchgefallen + 1
FassExist(x) = 3
EndIf
EndIf
Next
If FassCount < Level
For x = 1 To #Max_Fass
If FassExist(x) = 0
FassExist(x) = 1
FassAnim(x) = 3
FassY(x) = -40
FassX(x) = Random(620)
x = #Max_Fass+1
EndIf
Next
EndIf
If (Punkte / 100) + 1 > Level
Level = Level + 1
EndIf
Until KeyboardPushed(1) Or Durchgefallen > 9
Delay(1000)
CloseScreen()
MessageRequester("Game Over", "Du hast " + Str(Punkte) + " Punkte erreicht",0)
-
- Beiträge: 237
- Registriert: 17.10.2008 18:24
- Kontaktdaten:
Das ist einfach.
Der Fehler tritt im WindowedScreen auf - weil du nicht ueberpruefst, ob ein Windowevent ausgeloest wurde. Ausserdem solltest du noch ne Delay(1)-Funktion hinzufuegen.
probier mal folgenden Code aus und sag mir obs geklappt hat:
Kann es leider nicht selbst ausprobieren, da ich die Bilder nicht habe
Der Fehler tritt im WindowedScreen auf - weil du nicht ueberpruefst, ob ein Windowevent ausgeloest wurde. Ausserdem solltest du noch ne Delay(1)-Funktion hinzufuegen.
probier mal folgenden Code aus und sag mir obs geklappt hat:
Code: Alles auswählen
InitSprite()
InitKeyboard()
InitMouse()
OpenWindow(0, 0, 0, 1024, 768, "test screen", #PB_Window_ScreenCentered |#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar)
OpenWindowedScreen(WindowID(0), 0, 0, 1024, 768, 0, 0, 0)
#Max_Fass = 20
Dim FassX.w(#Max_Fass)
Dim FassY.w(#Max_Fass)
Dim FassExist.w(#Max_Fass)
Dim FassAnim.w(#Max_Fass)
Global Level.w
Global Maus_Knopf.w
Global Punkte.w
Global FassCount.w
Global Durchgefallen.w
Level = 1
LoadSprite(0,"GFX\NeuKreuz.bmp",0)
TransparentSpriteColor(0,255+256*0+256*256*255)
LoadSprite(1,"GFX\Back.bmp" ,0)
For x = 1 To 10
LoadSprite(10+x,"GFX\Fass" + Str(x) + ".bmp",0)
TransparentSpriteColor(10+x,255+256*0+256*256*255)
Next
Repeat
ExamineMouse()
ExamineKeyboard()
If MouseButton(1) And Maus_Knopf = 0
Maus_Knopf = 1
For x = 1 To #Max_Fass
If FassExist(x) = 1 And MouseX() > FassX(x) And MouseX() < FassX(x) + 20 And MouseY() > FassY(x) And MouseY() < FassY(x) + 20
FassExist(x) = 2
Punkte = Punkte + 10
EndIf
Next
EndIf
If MouseButton(1) = 0
Maus_Knopf = 0
EndIf
DisplaySprite(1,0,0)
For x = 1 To #Max_Fass
If FassExist(x) > 0
DisplayTransparentSprite(10+FassAnim(x)/3,FassX(x),FassY(x))
EndIf
Next
DisplayTransparentSprite(0,MouseX()-32,MouseY()-32)
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(0+256*0+256*256*255)
DrawText(0,0,"Punkte:" + Str(Punkte))
FrontColor(255+256*0+256*256*0)
DrawText(530,0,"Durchgefallen:" + Str(Durchgefallen)) ; ...
StopDrawing()
FlipBuffers()
FassCount = 0
For x = 1 To #Max_Fass
If FassExist(x) > 0
FassCount = FassCount + 1
If FassExist(x) < 3
FassY(x) = FassY(x) + 1
EndIf
If FassExist(x) > 1
FassAnim(x) = FassAnim(x) + 1
If FassAnim(x) > 30
FassExist(x) = 0
EndIf
EndIf
If FassExist(x) = 1 And FassY(x) > 460
Durchgefallen = Durchgefallen + 1
FassExist(x) = 3
EndIf
EndIf
Next
If FassCount < Level
For x = 1 To #Max_Fass
If FassExist(x) = 0
FassExist(x) = 1
FassAnim(x) = 3
FassY(x) = -40
FassX(x) = Random(620)
x = #Max_Fass+1
EndIf
Next
EndIf
If (Punkte / 100) + 1 > Level
Level = Level + 1
EndIf
EventID = WindowEvent()
If EventID = #PB_Event_CloseWindow
Break
EndIf
Delay(1)
Until KeyboardPushed(1) Or Durchgefallen > 9
Delay(1000)
CloseScreen()
MessageRequester("Game Over", "Du hast " + Str(Punkte) + " Punkte erreicht",0)
Kann es leider nicht selbst ausprobieren, da ich die Bilder nicht habe

- HeX0R
- Beiträge: 3040
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Eigentlich sollte man die Event-Queue pro FlipBuffers immer ganz leeren.
Ein einziger Aufruf hilft zwar im Moment, lässt die Queue aber u.U. dennoch immer voller werden.
Ein einziger Aufruf hilft zwar im Moment, lässt die Queue aber u.U. dennoch immer voller werden.
{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}