Blitz Basic Funktionen in PB

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Re: Blitz Basic Funktionen in BP

Beitrag von HeX0R »

ts-soft hat geschrieben: Wird langsam Zeit, das Du die Hilfe zu verstehen lernst. Eigentlich ist das ganz einfach und logisch aufgebaut
Auch wenn ich grundsätzlich der gleichen Meinung bin, hab ich mir eben mal die entsprechenden Hilfe-Ausschnitte angesehen und versucht als PB Neuling an die Sache ranzugehen.

Weder bei OpenWindow() noch bei ButtonGadget() sind wirklich hilfreiche Codebeispiele vorhanden.
Man muss sich erst zu WaitWindowEvent() hangeln, um dahinter zu steigen, wie PB Events verarbeitet.

Vielleicht sollte man die jeweiligen Beispiele wirklich mal überarbeiten (OpenWindow sollte o.k. sein, aber bei den Gadgets, vielleicht noch zumindest den Click-Event anzeigen).

Allerdings ist auch ganz klar bei OpenWindow() vermerkt, dass die ganzen Events via (Wait)WindowEvent() abgefragt werden, wer sich also ernsthaft mit PB beschäftigen will, der hätte das auch gefunden...
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in PB

Beitrag von NathanielBlack »

Dank euch.

1. Pure Basic Version 4.0 müsste das sein. Wieso?

2. Hab ein neues Problem, dass auftaucht. Bzw. 2 in einem Code:
-Erst jedes zweite Mal klicken auf "Runde beenden" wird zur Variable Runde dauzu gerechnet? Wieso?

-MEin hauptsätzliches Code Problem:

Code: Alles auswählen

InitSprite()
InitMouse()
InitKeyboard()

;Globals

Global runde.f
Global RundeErledigt

runde = 0
RundeErledigt = 0

;Runden-Menü:---------------------------------------------------------------------------------------------------------------------------
Procedure RoundMenu()
        CloseWindow(2)
        OpenWindow(3,0,0,800,600,"lands to conquer(alpha)",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
  StartDrawing(WindowOutput(3))
  For x = 0 To 10
    For y = 0 To 10
        Box(x*50,Y*50,50,50,RGB(100,0,0))
      Next  
  Next  
  StopDrawing()
EndProcedure


;Freies Spiel:--------------------------------------------------------------------------------------------------------------------------
Procedure FreeGame()

            CloseWindow(0)
              OpenWindow(2,0,0,800,600,"lands to conquer(alpha)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
              SetWindowColor(2,RGB(0,0,0))


If CreateGadgetList(WindowID(2))
  ButtonGadget(1,0,0,50,20,"Ende")
  ;If RundeErledigt = 1 
  ButtonGadget(2,50,0,100,20,"Runde beenden")
  ;EndIf
  ButtonGadget(3,0,100,100,20,"Runden Menü")
Else
  MessageRequester("Error!","ButtonGadget konnte nicht richtig geladen werden.")
EndIf

Repeat
Select WaitWindowEvent()
  Case #PB_Event_CloseWindow
    Break
  Case #PB_Event_Gadget
    Select EventGadget()
      Case 1 ; Ende Button
        End
      Case 2 ; Der Runde beenden Knopf
        runde = runde+1
        Delay(1)
        
      Case 3

        RoundMenu()
        
       
        
    EndSelect
EndSelect

 
  
  
        StartDrawing(WindowOutput(2))
        
        DrawText(0,20,"Runde: ")
        DrawText(50,20,Str(runde))


     
       StopDrawing()
  
  
  
  Delay(0)
  Until WaitWindowEvent() = #PB_Event_CloseWindow
  End
  
  
  
  
EndProcedure


;Freies Spiel Ende___________________________________________________________________________________________________________________________

;Hauptmenu-----------------------------------------------------------------------------------------------------------------


If OpenWindow(0, 0, 0, 800, 600, "lands to conquer(alpha)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu ) ;And OpenWindow(1, 0, 0, 800, 600, "lands to conquer(alpha)")
  SetWindowColor(0, RGB(0, 0, 0))
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 15, 230, 30, "Starten")
  Else
    MessageRequester("Error!", "ButtonGadget konnte nicht geladen werden.")
  EndIf

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0 ; Der Startbutton
            FreeGame()
        EndSelect
    EndSelect
  
  ForEver
EndIf


;HauptmenüEnde______________________________________________________________________________________________________







Wenn ich starte geht alles normal, nur wenn ich vom Runden Menü zurück will kommt der Debugger mit ner -mir nicht einleuchtenden- Meldung, dass der DrawingMode nicht stimmtO_o

mfg
NathanielBlack
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Blitz Basic Funktionen in PB

Beitrag von ts-soft »

Mit Copy und Paste von den Tipps kommste nicht weiter, Begreifen und Hilfe lesen ist trotzdem erforderlich.
Es gibt nur ein WaitWindowEvent() im Mainloop!

Und Bitte formatiere Deinen Code mal anständig, bekommt man ja Augenkrebs.
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in PB

Beitrag von NathanielBlack »

Ich komme da einfach nicht weiter. Danke dir, für deine Hilfe, aber hat mich nur bedingt weiter gebracht.

Code: Alles auswählen

InitSprite()
InitMouse()
InitKeyboard()


;Globals

Global runde.f
Global RundeErledigt

runde = 0
RundeErledigt = 1

;Runden-Menü:---------------------------------------------------------------------------------------------------------------------------
Procedure RoundMenu()
        CloseWindow(2)
        OpenWindow(3,0,0,800,600,"lands to conquer(alpha)",#PB_Window_ScreenCentered | #PB_Window_SystemMenu )
  StartDrawing(WindowOutput(3))
  For x = 0 To 10
    For y = 0 To 10
        Box(x*50,Y*50,50,50,RGB(100,0,0))
      Next  
  Next  
  StopDrawing()
EndProcedure


;Freies Spiel:--------------------------------------------------------------------------------------------------------------------------
Procedure FreeGame()

            CloseWindow(0)
              OpenWindow(2,0,0,800,600,"lands to conquer(alpha)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
              SetWindowColor(2,RGB(0,0,0))




Repeat



 
  
  
        StartDrawing(WindowOutput(2))
        
        DrawText(0,20,"Runde: ")
        DrawText(50,20,Str(runde))


     
       StopDrawing()
  
  
  
  Delay(0)
  ForEver
  End
  
  
  
  
EndProcedure


;Freies Spiel Ende___________________________________________________________________________________________________________________________

;Hauptmenu-----------------------------------------------------------------------------------------------------------------


If OpenWindow(0, 0, 0, 800, 600, "lands to conquer(alpha)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu ) ;And OpenWindow(1, 0, 0, 800, 600, "lands to conquer(alpha)")
      SetWindowColor(0, RGB(0, 0, 0))
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0, 10, 15, 230, 30, "Starten")
  Else
    MessageRequester("Error!", "ButtonGadget konnte nicht geladen werden.")
  EndIf

  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 0 ; Der Startbutton
            FreeGame()
            Case 1 ; Ende Button
              End
            Case 2 ; Der Runde beenden Knopf
              runde = runde+1
              Delay(1)
            Case 3 ; Der Runden Menü Knopf
              RoundMenu()
        
        
        EndSelect
    EndSelect
    ForEver
  
  
EndIf

;Hauptmenü-Ende______________________________________________________________________________________________________
Wo muss ich den Block den mit den WaitWindowEvent() hin packen?

Ist es eigentlich klug das so komisch it den ganzen Prozeduren zu machen? Empfehlt ihr mir andere Wege außer Prozeduren?

Entschuldigt die viele Fragerei, aber durch die Hilfe wird man nicht immer schlauer. (als anfänger). In jedem Satz stehen Fremdwörter die mich nur irritieren.

Please help me :praise:

mfg
NathanielBlack
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Blitz Basic Funktionen in PB

Beitrag von Sebastian »

Holla... was machst Du da eigentlich? Du initialisiert Sprites, aber zeichnest auf die Fenster? Warum denn das? Schau Dir mal das Kapitel zu WindowedScreen an!
(Win 11 64-bit, PB 6.04 und 6.10)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Blitz Basic Funktionen in PB

Beitrag von Kaeru Gaman »

NathanielBlack hat geschrieben:1. Pure Basic Version 4.0 müsste das sein. Wieso?
weil die 4.40 aktuell ist.
also müssen alle die dir helfen wollen wissen, dass du die 4.0 benutzt, weil sich doch einiges geändert hat seitdem.
deswegen hatte ich dir den Artikel in den FAQ über die Versionen verlinkt, zum lesen, nicht weil ich gerne Links kopiere.

du kannst allerdings bis nächste Weihnachten noch updaten, nachdem du dir dein Account hast freischalten lassen,
also kannst du auf die aktuelle Version updaten, und kommst womöglich noch in den Genuß der 4.50,
bevor du für das lebenslange Updaterecht das Upgrade kaufen musst.

------------------------------------

zum WaitWindowEvent hat sich ts bereits geäußert...
er meinte allerdings 1x in einer Eventschleife, wenn du zwei Eventschleifen einbauen wolltest, müsstest du in jeder eins haben.

es wäre allerdings besser, auch bei mehreren Fenstern nur eine einzige Eventschleife zu benutzen.
http://www.purebasic.fr/german/viewtopi ... 52&start=0

die Verwendung etlicher Procedures ist schon in Ordnung, aber du solltest dir schon gut überlegen, was du wo in Procs packst und was nicht.

... und ganz allgemein, wenn du eine TileEngine baun willst, oder überhaupt mit Spielobjekten arbeiten,
bist du mit ewigem Drawing schlecht beraten, dafür gibt es Sprites und Screens.
hier mal ein einfaches TileEngine-Beispiel:
http://www.purebasic.fr/german/viewtopi ... 34#p116634

mit reinem Drawing stößt man recht schnell an Grenzen...
http://www.purebasic.fr/german/viewtopi ... 39#p136539
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in PB

Beitrag von NathanielBlack »

Thx for help

Ich würde ja gerne updaten aber über diesen SmartUpdater geht es nicht, da dieser was von der Anmeldung bei www.purebasic.con faselt. Ich habe da keinen account und als ich mich anmelden wollte habe ich den link nicht gefunden.

Übrigens:
Meine Version ist nirgendwo im FAQ erwähnt. Da steht gar nichts von "Pure Basic 4-3D Game Deplover"

Ich blick da nicht mehr durch:(
Benutzeravatar
Sebastian
Beiträge: 322
Registriert: 14.06.2006 16:46
Wohnort: Kiel

Re: Blitz Basic Funktionen in PB

Beitrag von Sebastian »

Du hast doch diese DTP-Version? Nähere Infos unter:
http://www.purebasic.com/german/ordering.php
(Win 11 64-bit, PB 6.04 und 6.10)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Blitz Basic Funktionen in PB

Beitrag von Kaeru Gaman »

NathanielBlack hat geschrieben:Meine Version ist nirgendwo im FAQ erwähnt. Da steht gar nichts von "Pure Basic 4-3D Game Deplover"
ich hatte dir diesen thread verlinkt:
http://www.purebasic.fr/german/viewtopi ... =9&t=10604
da steht
Andre hat geschrieben:Seit 2007 gibt es auch eine "PureBasic 4 - 3D Developer" Version im Handel.
Das Paket enthält neben dem gedruckten Handbuch auf einer beiliegenden CDROM die PureBasic-Version 4.00 (Windows) und v3.94 (Linux, MacOS, OpenSource von Amiga), ein Tutorial mit Beispielcodes sowie einige Tools und eine Krakout-Demo (mit PureBasic geschriebenes Spiel von MasterCreating).
Diese Version beinhaltet einen auf 1 Jahr befristeten Download-Zugang.
um den DownLoad-Zugang freischalten zu lassen, musst du Kontakt mit dem Team aufnehmen, also z.b. eine mail an support at purebasic dot com schicken.
dann können Fred oder Freak dir deinen Zugang für purebasic.com freischalten, und du kannst für ein Jahr die Updates downloaden.

erst wenn diese Jahresfrist abgelaufen ist, müßtest du das Upgrade kaufen, um auch weiterhin updaten zu können.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
NathanielBlack
Beiträge: 63
Registriert: 25.12.2009 18:48

Re: Blitz Basic Funktionen in PB

Beitrag von NathanielBlack »

Auf meiner Packung steht was von 10 Jahren kostenlose UpdatesO_o
Antworten