Seite 1 von 2

OpenWindow / OpenScreen

Verfasst: 19.07.2009 18:29
von macmark
Hi zusammen,
die Programmierung unter PB ist echt einfach. Ich verstehe aber eine Sache nicht ganz: Ein Fenster für eine Eingabemaske erstelle ich mit OpenWindow und für das Spiel wo Grafik drauf läuft mit OpenScreen. Nur wie mische ich das???
Also wenn z.b. im Spiel ein Button liegen soll der eine Eingabemaske öffnet. Hat da einer von euch ein kleines Beispiel??
Schönen Dank für euch Hilfe
Gruss
Markus

Verfasst: 19.07.2009 18:32
von cxAlex
Sieh mal in der Hilfe unter OpenWindowedScreen() nach. Oder probier mal die neuen Gadget3D - Befehle.

Gruß, Alex

Verfasst: 19.07.2009 20:03
von macmark
Hi,
Danke für den Tip! Mit der Gadget3D komm ich aber noch nicht zurecht! Hat einer die Gadet3D.pb aus der Onlinehilfe?? Der Link ist tot!

Ist der folgende Code vom Ansatz ok???
Problem ist nur das gar nix passiert.

Code: Alles auswählen

Enumeration
  #frLogin
EndEnumeration

Enumeration
  #background
EndEnumeration

;- Gadget Constants
;
Enumeration
  #frLogin_btn0
  #frLogin_btn1
  #frLogin_btn2
  #frLogin_btn3
  #frLogin_btn4
  #frLogin_btn5
  #frLogin_btn6
  #frLogin_btn7
  #frLogin_btn8
  #frLogin_btn9
  #frLogin_btnPkt
  #frLogin_btnDel
  #frLogin_btnEnter
  #frLogin_UserName
  #frLogin_Pin
  #frLogin_Frame
  #frLogin_txtBenutzer
  #frLogin_txtPin
EndEnumeration

If InitEngine3D()=0
  MessageRequester("Fehler","Konnte 3d nicht laden",0)
EndIf

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Sprite system can't be initialized", 0)
  End
EndIf

If InitSprite3D() = 0                                          
  MessageRequester("Fehler","Konnte dx nicht finden",0)        
EndIf                                                             

; Jetzt wollen wir den Vollbild Modus erstellen.
If OpenScreen(1024,768,32,"Vollbild") = 0                         
  MessageRequester("Fehler","Konnte kein Vollbild erstellen ",0)  
EndIf                                                            

Enumeration
  #sprite1
  #sprite2
EndEnumeration

LoadSprite(#sprite1,"images/back.bmp",#PB_Sprite_Memory) 

Global frLoginFocus.b = 1

If OpenWindow3D(#frLogin, 343, 30, 600, 570, "LogIn")

  If Start3D()
    DisplaySprite3D(#sprite1,0,0)       
    Stop3D()                            
  EndIf
          
  If CreateGadgetList(WindowID(#frLogin))
    
    SetActiveWindow3D(#frLogin)
    StringGadget3D(#frLogin_UserName, 130, 60, 300, 50, "")
    Frame3DGadget3D(#frLogin_Frame, 110, 20, 340, 490, "")
    StringGadget3D(#frLogin_Pin, 130, 140, 300, 50, "", #PB_String_Password)
    ButtonGadget3D(#frLogin_btn7, 130, 200, 60, 50, "7")
    ButtonGadget3D(#frLogin_btn8, 200, 200, 60, 50, "8")
    ButtonGadget3D(#frLogin_btn9, 270, 200, 60, 50, "9")
    ButtonGadget3D(#frLogin_btn4, 130, 260, 60, 50, "4")
    ButtonGadget3D(#frLogin_btn5, 200, 260, 60, 50, "5")
    ButtonGadget3D(#frLogin_btn6, 270, 260, 60, 50, "6")
    ButtonGadget3D(#frLogin_btn1, 130, 320, 60, 50, "1")
    ButtonGadget3D(#frLogin_btn2, 200, 320, 60, 50, "2")
    ButtonGadget3D(#frLogin_btn3, 270, 320, 60, 50, "3")
    ButtonGadget3D(#frLogin_btn0, 130, 380, 60, 50, "0")
    ButtonGadget3D(#frLogin_btnEnter, 340, 200, 90, 290, "Enter")
    TextGadget3D(#frLogin_txtBenutzer, 130, 40, 100, 20, "Benutzer:")
    TextGadget3D(#frLogin_txtPin, 130, 120, 100, 20, "Pin:")
    ButtonGadget3D(#frLogin_btnDel, 130, 440, 200, 50, "Löschen")
    ButtonGadget3D(#frLogin_btnPkt, 270, 380, 60, 50, ".")
    SetActiveGadget3D(#frLogin_UserName)
    
    Repeat
    
      ActGadget.l = GetActiveGadget3D()
      If ActGadget = #frLogin_UserName
         frLoginFocus = #frLogin_UserName
      EndIf
      If ActGadget = #frLogin_Pin
         frLoginFocus = #frLogin_Pin
      EndIf
      
      Event.l = WaitWindowEvent()
      EventType.l = EventType3D()
      xText.s = GetGadgetText3D(frLoginFocus)
      
      Select Event
        Case #PB_Event3D_Gadget
          Select EventGadget3D()
            Case #frLogin_btnEnter
              res.s = GetGadgetText3D(#frLogin_UserName) + "/" + GetGadgetText3D(#frLogin_Pin)
              MessageRequester("ERROR", res)
              Quit = 1
            Case #frLogin_btnDel
              SetGadgetText3D(frLoginFocus, "") 
            Case #frLogin_btnPkt
              xText = xText + "."
              SetGadgetText3D(frLoginFocus, xText) 
            Case #frLogin_btn0 To #frLogin_btn9
              xText = xText + GetGadgetText3D(EventGadget())
              SetGadgetText3D(frLoginFocus, xText) 
            ;Case #BUTTON_INTERACT
            ;  Debug "The button was pressed."
            ;Case #BUTTON_CLOSE
            ;  Quit = 1
          EndSelect
        Case #PB_Event3D_CloseWindow
          Quit = 1
      EndSelect      
  
    Until Quit = 1

  EndIf
EndIf
Bildschirm wird kurz schwarz und das wars.
Hat jemand eine Idee???
Gruss
Markus

Verfasst: 19.07.2009 20:23
von macmark
ok.... mit der Suche hab ich ein schönes Beispiel gefunden: http://forums.purebasic.com/german/view ... t=window3d !
Mal schauen wieweit ich jetzt komme.
Gruss
Markus

Verfasst: 19.07.2009 22:04
von Kaeru Gaman
wie ich in dem anderen thread schon angeschnitten hab...

wenn du einen Screen hast, solltest du nicht mit Gadgets rumdaddeln.

du kannst einen WindowedScreen verwenden, dann kannst du Gadgets nebendran packen.

oder du schreibst dir dein eigenes Menu- und Button-system.

hier mal ne kleine Demo, wie man mehrere anklickbare Objekte verwalten kann:
http://www.purebasic.fr/german/viewtopic.php?t=18504


die Window3D-Lib ist wesentlich schwieriger zu handhaben, außerdem ist sowas für ein kleines Gamechen absoluter Overkill.

Verfasst: 20.07.2009 10:45
von macmark
Hi,
ja.... 3D ist echt nicht einfach. Je mehr ich an dem Beispiel ändere um so langsamer wird alles. Im Grunde möchte ich ja nur ein paar Werte als Fenster über dem Spiel eingeben lassen und der Rest wird dann auch grafisch gemacht. Wäre da auch mit 3D zufrieden.
Klappt nur bisher nicht so wie ich mir das denke. /:->
Gruss
Markus

Verfasst: 20.07.2009 10:51
von Kaeru Gaman
"ein paar werte eingeben" ist eventuell nichts was man eintippen sollte.

wenn du an Sachen wie Castles/Gorillas denkst, da hast du auch den Abschußwinkel und die Schußkraft einzugeben.
das wird beides mit up/down reglern gelöst, die zwar über Tasten bedient werden, aber keine literalen Werte eingegeben.

nunja, kommt halt auch drauf an, was du letztendlich machen willst.

Verfasst: 20.07.2009 11:10
von macmark
Hi,
ja... anfangen wollte ich mit der Umsetzung eines kleinen Pokerspiels was ich auch mal unter c# angefangen hab.

Mit Sprites hin-/herbewegen usw. komm ich mittlerweile klar... aber bevor ich die Spiellogik umsetze wollte ich erstmal alles ausprobieren um zu entscheiden ob ich eher auf 2D oder 3D setze. Und z.b. soll man sich später mal irgendwann an einem Server anmelden können oder seinen Spielernamen eingeben.

Ich dachte bisher das ich die Input Gadgets und die grafischen Sachen beliebig mischen kann. Also z.b. soll die Eingabe der Anmeldung oder das der User seinen Nick eingeben kann mitten auf dem Spielfeld als Fenster aufgehen.

Getrennt bekomm ich das schon hin... aber nicht während die Grafik auf dem Screen ist.

Gruss
Markus

Verfasst: 20.07.2009 11:51
von Kaeru Gaman
Probier mal, einen WindowedScreen zu benutzen.
(das Stichwort gebe ich dir nun zum dritten Mal)

Du kannst auch ein Fenster haben, was vom WindowedScreen komplett ausgefüllt wird,
und darüber ein zweites aufpoppen, das Eingabefelder und Buttons enthält.

ein "klassisches" Game auf Fullscreen wird meistens eine selbstgemachte GUI benutzen,
das ist auch nicht so schwierig, wie man denkt.
Es gibt auch Speziallösungen, wie zum Beispiel die gesamte Oberfläche zu skinnen
und die Spielegrafik direkt in den DC der Fenster zu rendern, dann kann man das GUI-Handling vom OS benutzen.


Du musst dir halt die Frage stellen, wie viel Aufwand du für ein Einsteigerprojekt betreiben willst.

Verfasst: 20.07.2009 12:28
von macmark
Probier mal, einen WindowedScreen zu benutzen.
(das Stichwort gebe ich dir nun zum dritten Mal)
8) .... den Wink mit dem Lattenrost hatte ich schon gesehen. Hatte aber bisher nicht so geklappt wie ich mir das vorstelle.