Hab ich beim Window/Screen Erstellen was zu beachten?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nathan7
Beiträge: 26
Registriert: 05.09.2013 19:18

Hab ich beim Window/Screen Erstellen was zu beachten?

Beitrag von nathan7 »

Also ich hab mit folgendem Code ein Window mit Screen erstellt.
Läuft auf wunderbar, stürzt aber ab wenn ich mit der Maus drübergehe und mehrmals draufklicke.
Die Windows Sanduhr(win 8 isses ja der Kreis) wird auch beim Drüberfahren über das Fenster angezeigt.

Code: Alles auswählen

If OpenWindow(1, 10, 10, 640,480,"Windowed") = 0                          ; Wenn "Oeffne ein Vollbild" aus ist,
  MessageRequester("Fehler","Konnte kein Window erstellen ",0)  ; wird eine Fehlermeldung ausgegeben.
EndIf 
OpenWindowedScreen(WindowID(1), 0, 0, 640, 480)
Oder muss ich diese WindowMinimize etc. zwingend angeben?
PureBasic 5.20 Beta 18 LTS
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Hab ich beim Window/Screen Erstellen was zu beachten?

Beitrag von RSBasic »

Da ich nicht deinen vollständigen Code sehen kann, kann ich dir auch nicht sagen, wo der Fehler ist. Vielleicht fehlt bei dir eine Eventschleife?
Versuche den folgenden Beispielcode aus der Hilfe unter "OpenWindowedScreen()" als Vorlage zu benutzen:

Code: Alles auswählen

 If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 220, 160, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 170, 135, 45, 20, "Quit")

    If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160)
      CreateSprite(0, 20, 20)
      If StartDrawing(SpriteOutput(0))
        Box(0, 0, 20, 20, RGB(255, 0, 155))
        Box(5, 5, 10, 10, RGB(155, 0, 255))
        StopDrawing()
      EndIf
    Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
      End
    EndIf
  EndIf
  
  direction = 2
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    Repeat
      Event = WindowEvent()
      
      Select Event 
        Case #PB_Event_Gadget
          If EventGadget() = 0
            End
          EndIf
        
        Case #PB_Event_CloseWindow
          End 
      EndSelect
    Until Event = 0
  
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 0))
    DisplaySprite(0, x, x)
    x + direction
    If x > 140 : direction = -2 : EndIf
    If x < 0   : direction =  2 : EndIf
    Delay(1)
  ForEver
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Hab ich beim Window/Screen Erstellen was zu beachten?

Beitrag von Kiffi »

nathan7 hat geschrieben:Läuft auf wunderbar, stürzt aber ab wenn ich mit der Maus drübergehe und mehrmals draufklicke.
ich vermute eher, dass es nicht abstürzt, sondern nicht reagiert.

Das liegt an der fehlenden Event-Schleife. Diese sorgt dafür, dass eingehende Ereignisse auch verarbeitet werden
nathan7 hat geschrieben:Oder muss ich diese WindowMinimize etc. zwingend angeben?
nein, die Flags sind optional.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
nathan7
Beiträge: 26
Registriert: 05.09.2013 19:18

Re: Hab ich beim Window/Screen Erstellen was zu beachten?

Beitrag von nathan7 »

Was muss ich da hinzufügen?

das ist meine vorläufige init.pb

Code: Alles auswählen

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


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


If OpenWindow(0, 0, 0, 640,480,"Windowed",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) = 0                         
  MessageRequester("Fehler","Konnte kein Window erstellen ",0)  
EndIf 
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480)
UsePNGImageDecoder()
Global tile = LoadSprite(#PB_Any, "tile2.png",0)
Global dude = LoadSprite(#PB_Any, "dude.bmp",0)

Global Player_pos_x = 304, Player_pos_y = 320
Global scroll_x = 0, scroll_Y =0
Global rauf = 200, runter = 208, rechts = 205, links = 203, space = 57 ,aa.l = 23, bb.l = 15

Global Dim level.l(aa,bb)

Restore mapdata
For y=0 To 14
	For x=0 To 22
		Read level(x,y)
	Next
Next
PureBasic 5.20 Beta 18 LTS
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Hab ich beim Window/Screen Erstellen was zu beachten?

Beitrag von Kiffi »

nathan7 hat geschrieben:Was muss ich da hinzufügen?
eine Event-Schleife. Haben Ray und ich doch geschrieben.

Du muss mit WindowEvent() die Ereignisse abholen und bei Bedarf darauf reagieren.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
nathan7
Beiträge: 26
Registriert: 05.09.2013 19:18

Re: Hab ich beim Window/Screen Erstellen was zu beachten?

Beitrag von nathan7 »

Danke sehr...
hatte das auch eingefügt, aber da rächt sich mal wieder unordnung im code....
mir hatte es dabei den rest zerschossen...

nun funktioniert es...
PureBasic 5.20 Beta 18 LTS
Antworten