Seite 1 von 2

(Bug ungelöst) OpenWindow? Bug oder Funktion?

Verfasst: 10.03.2020 09:31
von tft
Hallo,

folgenden Code Zeilen öffnen ein Fenster, und platzieren darin einen Screen.

Code: Alles auswählen

Debug "Open Window and 3D Screnn"

HWND = OpenWindow(#MainWindow,10,0,#ScreenX,#ScreenY,"MineCraftClone V 003, by TFT",#PB_Window_SystemMenu | #PB_Window_SizeGadget    )
If  HWND  = 0 : MessageRequester("InitMainWIndow", "Cant init", #PB_MessageRequester_Ok) : End : EndIf
If OpenWindowedScreen(WindowID(#MainWindow),0,0,#ScreenX,#ScreenY,#True,0,0,#PB_Screen_WaitSynchronization  ) = 0 : MessageRequester("InitMainWIndow", "Cant init", #PB_MessageRequester_Ok) : End : EndIf
Laut Hilfe, ist der 6. Parameter, den ich auf #True setze, dafür da. Um beim verändern der Fenster Grösse. Den Screen mit anzupassen.
Funktioniert nur leider nicht. Muss das so sein ???? mache ich was falsch oder ist das ein Bug????

dabei funktioniert diese Demo schon.

Code: Alles auswählen

 If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite environment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 420, 200, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
    CreateStatusBar(0, WindowID(0))
      AddStatusBarField(420)
      
    StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
    
    If OpenWindowedScreen(WindowID(0), 0, 0, 420, 200, #True, 0, 20)
  
      CreateSprite(0, 50, 50) ; Erstellt ein leeres Sprites, dies wird komplett schwarz sein
        
      Repeat
        ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
        ;
        Repeat
          Event = WaitWindowEvent(10)
          
          If Event = #PB_Event_CloseWindow
            End
          EndIf
        Until Event = 0
        
        FlipBuffers()
        ClearScreen(RGB(0, 0, 200)) ; Ein blauer Hintergrund
        
        DisplaySprite(0, 10, 10)  ; Darstellung unserer schwarzen Box in der linken oberen Ecke
        DisplaySprite(0, 260, 10) ; Darstellung unserer schwarzen Box in der rechten oberen Ecke
      ForEver
      
    Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
    EndIf
  EndIf

Gruss TFT

// Edit: Habe mal die inflationär verwendeten Satzzeichen im Titel reduziert. (Kiffi)

Re: OpenWindow ???? Bug oder Funktion ??

Verfasst: 10.03.2020 10:08
von Bisonte
Der erste Code ist nicht ausführbar... da fehlt so einiges : Eventloop, InitSprite ... Konstantendeklaration... Schwer zu sagen wo dein Fehler sitzt.

Re: OpenWindow ???? Bug oder Funktion ??

Verfasst: 10.03.2020 14:59
von tft
Hallo,

???? iss ja wohl klar. Ich habe nur den teil gepostet. Um anzudeuten um was es geht.

Denkt euch eine normale Main schleife mit Event Handling. :-) Da im Beispiel und der
Erklärung nicht darauf eingegangen wird, das es weitere Maasnahmen bedarf. Reichen 6 Zeilen.

Code: Alles auswählen

EnableExplicit

Define Quit, Event

If InitEngine3D() = 0
  MessageRequester("Error", "Can't init Engine3D ", 0) :  End
EndIf

If InitSprite() = 0
  MessageRequester("Error", "Can't open screen & sprite environment!", 0) :  End
EndIf

If OpenWindow(0, 0, 0, 420, 200, "A screen in a window...", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  CreateStatusBar(0, WindowID(0))
  AddStatusBarField(420)
  
  StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
  
  If OpenWindowedScreen(WindowID(0), 0, 0, 420, 200, #True, 0, 20)
    
    Define Cam = CreateCamera(#PB_Any,0,0,100,100)
    MoveCamera(Cam,0,0,5)
    CameraBackColor(Cam,RGB(50,50,50))
    CameraFOV(Cam,50)
    CameraRange(Cam,0.01,10000)
    
    AmbientColor(RGB(255,255,255))
    
    Define EntMesh = CreateCube(#PB_Any,1)
    Define EntEnt = CreateEntity(#PB_Any,MeshID(EntMesh),0,0,0,0)
    
    CreateSprite(0, 50, 50) ; Erstellt ein leeres Sprites, dies wird komplett schwarz sein
    
    Repeat
      
      Event = WindowEvent()
      While Event <> 0
        If Event = #PB_Event_CloseWindow
          quit = 1
        EndIf
        Event = WindowEvent()
      Wend
    
      RotateEntity(EntEnt,0.1,0.2,0.3,#PB_Relative)
      
      RenderWorld()
      
      DisplaySprite(0, 10, 10)  ; Darstellung unserer schwarzen Box in der linken oberen Ecke
      DisplaySprite(0, 260, 10) ; Darstellung unserer schwarzen Box in der rechten oberen Ecke
      
      FlipBuffers()
      
    Until quit = 1
    
    
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
  EndIf
EndIf

End
ich habe das Funktionirende Beispiel um 3D Erweitert.

Gruss TFT

Re: OpenWindow ???? Bug oder Funktion ??

Verfasst: 10.03.2020 17:48
von DePe
Also bei mir wird der Inhalt bzw. der Screen skaliert. PB 5.72b2 32-Bit / Win 7 64-Bit.

Peter

Re: OpenWindow ???? Bug oder Funktion ??

Verfasst: 10.03.2020 18:03
von Bisonte
Wenn man InitSprite3D nicht benutzt dann funktioniert es ! (natürlich alle 3D sachen ausklammern)

Wenn man DirectX als subsystem angibt, kann Init3D Engine nicht initialisiert werden...

Ich denke mal das dieses in die Bug Sektion gehört, weil ich mir vorstellen kann, das es funktionieren soll.

P.S.: Und wie du siehst, war der Krempel drumrum doch wichtig ;)

Re: OpenWindow? Bug oder Funktion?

Verfasst: 10.03.2020 18:21
von HeX0R
Scheint aber nur x64 zu betreffen, unter x86 läuft das Beispiel genau so.

Und vielen Dank an den Mod, der einige (leider nicht alle) der dämlichen Fragezeichen in diesem Beitrag entfernt hat!

Re: OpenWindow? Bug oder Funktion?

Verfasst: 10.03.2020 18:31
von Bisonte
Ah moment, das mit der beta 2 hab ich übersehen....

Da läufts bei mir tadellos ! beide PB 5.72b2(x86 und x64) auf Win10Pro x64...

Also war es bei der 5.71 etwas fehlerhaft ;)

Re: OpenWindow? Bug oder Funktion?

Verfasst: 11.03.2020 09:02
von tft
// Edit: Habe mal die inflationär verwendeten Satzzeichen im Titel reduziert. (Kiffi)

ok ...... sollte meine Verwunderung über das nicht funktionieren zum ausdruck bringen.

Werde mir mal die Beta 2 von 5.72 besorgen.

Gruss TFT

Re: OpenWindow? Bug oder Funktion?

Verfasst: 11.03.2020 09:14
von tft
Hallo,

tja ..... nach der neu Installation von PB, kann er die Engin nicht mehr inizialisieren. Das liegt aber sicher an etwas, das ich nicht bedenke. Da die Demos alle einwandfrei
laufen. Muss ich in den Compiler einstellungen etwas ändern ? Denn die Engine.dll ist nicht mehr dort wo sie sonst zu finden war. Dort gibts jetzt eine Ausführbare Datei mit 30 K Grösse.

Gruss TFT

Re: OpenWindow? Bug oder Funktion?

Verfasst: 11.03.2020 10:13
von DePe
Unter "\PureBasic 5.72\Compilers\" gibt es die Engine3D.dll, 2,5 MB oder 11 MB. Die muss du zu deinem Programm kopieren, je nach 32- oder 64-Bit.

Peter