Seite 1 von 3

OpenWindowedScreen, RightOffset funktioniert nicht

Verfasst: 31.07.2008 16:23
von E-P-S
Hallöchen, ich stell die Frage mal hier weil sie doch recht banal ist (höchstwahrscheinlich)

Zunächst mal folgender kleiner Codeauszug...

Code: Alles auswählen

If OpenWindow( 0, 0, 0, 800, 600, "Fenster", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_Maximize | #PB_Window_SizeGadget )
.
.
.
If OpenWindowedScreen( WindowID(0), 10, 10, WindowWidth(0), WindowHeight(0), 0, 50, 50 )
Die Werte für RightOffset und BottomOffset sind jetzt mal willkürlich, die Frage ist nur warum der Offset nicht funktioniert? Sollten diese Werte nicht dafür sorgen das nach rechts und unten ein Rand zwischen "Bildschirm" und Fenster bleibt - oder verstehe ich da was falsch?

Danke schonmal

Verfasst: 31.07.2008 16:35
von Fluid Byte
Offsets fuktionieren nur wenn "Autostretch" aktiviert ist.

Verfasst: 31.07.2008 16:38
von E-P-S
Ahh, verstehe. Danke für die Information.

Das möchte ich allerdings nicht, gibt es eine Möglichkeit die Größe des Bildschirms nach einem "SizeWindow" Event von Hand zu verändern?

Verfasst: 31.07.2008 16:43
von Andreas_S
Screen closen und wieder öffnen :?

Verfasst: 31.07.2008 16:46
von Fluid Byte
Ich werd' dich auch gleich mal "closen" ...

Verfasst: 31.07.2008 16:51
von Andreas_S
Fluid Byte hat geschrieben:Ich werd' dich auch gleich mal "closen" ...
/:->

Code: Alles auswählen

  If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 320, 140, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(320)
      StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
    EndIf
    If OpenWindowedScreen(WindowID(0), 10, 10, 1, 1, 1, 10, 10)  ; wir benötigen nicht die exakte Bildschirmbreite/-höhe, da diese automatisch angepasst werden...
    Else
      MessageRequester("Error", "Can't open windowed screen!", 0)
      End
    EndIf
  EndIf
  
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    Repeat
      Event = WindowEvent()
      
      If Event = #PB_Event_CloseWindow
        End 
      EndIf
    Until Event = 0
    
    FlipBuffers() 
    ClearScreen(RGB(0, 0, 200))
    Delay(1)
  ForEver
Das reicht doch oder?

Verfasst: 31.07.2008 16:51
von E-P-S
Also ScreenClose wäre doof, dabei gehen ja alle Sprites verloren - das ist also keine Lösung (leider).

Nein, die Methode geht leider nicht, da ja das AutoStretch an ist und dies mir meine Sprites verzerrt - was ich nicht möchte.

Verfasst: 31.07.2008 17:05
von Andreas_S
Oh...

In OpenGL ist es möglich, weis aber jetzt nicht wie man beides verwenden kann.
Ich hab da aber mal ein bsp gesehn...


EDIT:

Ok hab mich geirrt, sorry...

Verfasst: 31.07.2008 17:13
von edel
Weiss zwar nicht ob das dies der richtige weg ist, funktioniert aber recht gut.

Code: Alles auswählen

  
  Procedure LS()
    
    CreateSprite(0,20,20)
    StartDrawing(SpriteOutput(0))
      Box(0,0,20,20,$874178)
    StopDrawing()
    
  EndProcedure
  
  Procedure OS()
    
    result = OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)
    
    If result
      LS()
    EndIf
    
    ProcedureReturn result
  EndProcedure
  
  If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 320, 140, "A screen in a window...", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
    If CreateStatusBar(0, WindowID(0))
      AddStatusBarField(320)
      StatusBarText(0, 0, "Automatically zoomed screen area when changing window size...")
    EndIf
    
    OS()
    
  EndIf
  
  Repeat
    ; Es ist sehr wichtig, alle im Queue befindlichen Ereignisse während jedes Frames abzuarbeiten
    ;
    Repeat
      Event = WaitWindowEvent(0)
      
      If Event = #PB_Event_SizeWindow
        CloseScreen()
        OS()
      EndIf
      
      If Event = #PB_Event_CloseWindow
        End
      EndIf
    Until Event = 0
    
    DisplaySprite(0,10,10)
    
    FlipBuffers()
    ClearScreen(RGB(0, 0, 200))
    Delay(1)
  ForEver

Verfasst: 31.07.2008 17:18
von E-P-S
Dieser weg wäre eine Möglichkeit, allerdings erstellst auch du bei dieser Variante die Sprites neu.

Ich lade ca. 300 Sprites á 20x20 Pixel und das müsste ich dann auch machen was ziemlich, sagen wir mal unhandlich, ist.