WindowedScreen()

Anfängerfragen zum Programmieren mit PureBasic.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

WindowedScreen()

Beitrag von a14xerus »

Was ist hier der Fehler??
Ich verstehe das nicht

Code: Alles auswählen

If InitSprite() = 0
  MessageRequester("Error", "Fehlercode 1", #MB_OK|#MB_ICONERROR)
  End
EndIf
If InitSound() = 0
  MessageRequester("Error", "Fehlercode 2", #MB_OK|#MB_ICONERROR)
  End
EndIf
If InitKeyboard() = 0
  MessageRequester("Error", "Fehlercode 3", #MB_OK|#MB_ICONERROR)
  End
EndIf
If InitMouse() = 0
  MessageRequester("Error", "Fehlercode 4", #MB_OK|#MB_ICONERROR)
  End
EndIf


Enumeration
  #window_1
  
  #box
EndEnumeration

#WindowWidth = 400
#WindowHeight = 300

Global Ball_X.l = 0
Global Ball_Y.l = 0

Procedure Fenster()
  If OpenWindow(#window_1,0,0,#WindowWidth,#WindowHeight,"MiniGame by Alexander N",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
    If CreateGadgetList(WindowID(#window_1))
      If OpenWindowedScreen(WindowID(#window_1),0,0,1,1,1,0,0)
      
        CreateSprite(#box,10,10)
        StartDrawing(SpriteOutput(#box))
        Box(0,0,10,10,RGB(255,255,255))
        StopDrawing()
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure ende()
  End
EndProcedure






Fenster()
Repeat
  Delay(1)
  
  Event = WaitWindowEvent(10)
  
  WindowID = EventWindow()
  
  GadgetID = EventGadget()
  
  EventType = EventType()
  
  
  
  If Event = #PB_Event_CloseWindow
    Select MessageRequester("Ende", "Wollen sie wirklich beenden?", #MB_YESNO|#MB_ICONQUESTION)
      Case #IDYES
        ende()
    EndSelect
  EndIf
  

  
  
  
  ExamineKeyboard()
  ClearScreen($000)

  ;For i = 0 To #WindowWidth Step 10
    DisplaySprite(#box,0,0)  ;wenn ich das hier auskommentier habe ich einen normalen schwarzen hintergund.. wenn nicht kommt bei mir ein farbverlauf.. oder macht das nur meine Grafikkarte?
  ;Next
  
    
  
  FlipBuffers()
ForEver
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Auf den ersten Blick würde ich sagen es ist das WaitWindowEvent(...).
Ersetze es durch WindowEvent(...) und baue ein Delay(1) in die Schleife.
Mach aus ClearScreen($000) ClearScreen($000000).
[PB4.20]
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

Beitrag von ts-soft »

>> Mach aus ClearScreen($000) ClearScreen($000000).
Was soll das bezwecken? 0 bleibt 0, 00 oder 000 sind immer noch 0 :wink:

WaitWindowEvent(10) ist auch die bessere Alternative für ein Fenster.

Der WindowedScreen ist nur ziemlich klein geraten :wink:
Zuletzt geändert von ts-soft am 15.08.2006 22:53, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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:

Beitrag von HeX0R »

Du erstellst einen 1 Pixel grossen Screen.
Auch mit Autostretch bleibt er dennoch relativ gesehn 1 Pixel gross.

Ich sehe zwar keinen Farbverlauf (wieso auch ?), aber alles ist weiss, was auch logisch ist, weil man quasi nur ein irre aufgeblasenes weisses Sprite sieht.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

>>Was soll das bezwecken? 0 bleibt 0, 00 oder 000 sind immer noch 0 Wink
Für den RGB-Hex-Wert wird es nun mal so gemacht.
Es schadet nicht, wenn man es sich gleich am Anfang angewöhnt :wink:

>>WaitWindowEvent(10) ist auch die bessere Alternative für ein Fenster.
Für ein Fenster ohne Screen ja.
In diesem Fall blockt das WaitWindowEvent die Ausführung der Schleife.


lol das Wichtigste übersehen 1*1 Pixel :lol:
[PB4.20]
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

Beitrag von ts-soft »

Frogger hat geschrieben:>>Was soll das bezwecken? 0 bleibt 0, 00 oder 000 sind immer noch 0 Wink
Für den RGB-Hex-Wert wird es nun mal so gemacht.
Es schadet nicht, wenn man es sich gleich am Anfang angewöhnt :wink:
$0, 0, ist beides gleich und die Anzahl der nullen ist auch unerheblich, bzw. alle zusätzlichen Nullen sind vollkommen blödsinnig :mrgreen:

>>WaitWindowEvent(10) ist auch die bessere Alternative für ein Fenster.
Frogger hat geschrieben: Für ein Fenster ohne Screen ja.
In diesem Fall blockt das WaitWindowEvent die Ausführung der Schleife.

Block garnichts, weil ein TimeOut von 10 ms eingestellt ist. Das Programm reagiert so wesentlich besser auf das schließen ereignis, als bei einem Delay.
Das Timeout wurde extra aus diesem Grunde eingeführt, damit ein Delay unnötig wird.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

HeX0R hat geschrieben:Du erstellst einen 1 Pixel grossen Screen.
Auch mit Autostretch bleibt er dennoch relativ gesehn 1 Pixel gross.

Ich sehe zwar keinen Farbverlauf (wieso auch ?), aber alles ist weiss, was auch logisch ist, weil man quasi nur ein irre aufgeblasenes weisses Sprite sieht.
Lustig, bei mir ist ein Farbverlauf von einer weißen Box nach irgenwas von Türkis oder ähnlich. Frag mich, woher die Farben kommen, wenn doch alles RGB(255,255,255) ist. Auch wenn ich das auskommentiere ändert sich nichts.
Beim Schliessen wird die Messagebox im Bereich bereich der Höhe in der Farbe abgesetzt.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Mhh man merkt mir also doch noch die alten 3.9x Zeiten an :oops:
Ok das mit dem TimeOut hab ich tatsächlich übersehen.


So läuft es bei mir aber ein Farbverlauf kann bei diesem Code nun wirklich nicht entstehen

Code: Alles auswählen

If InitSprite() = 0
  MessageRequester("Error", "Fehlercode 1", #MB_OK|#MB_ICONERROR)
  End
EndIf
If InitSound() = 0
  MessageRequester("Error", "Fehlercode 2", #MB_OK|#MB_ICONERROR)
  End
EndIf
If InitKeyboard() = 0
  MessageRequester("Error", "Fehlercode 3", #MB_OK|#MB_ICONERROR)
  End
EndIf
If InitMouse() = 0
  MessageRequester("Error", "Fehlercode 4", #MB_OK|#MB_ICONERROR)
  End
EndIf


Enumeration
  #window_1
  
  #box
EndEnumeration

#WindowWidth = 400
#WindowHeight = 300

Global Ball_X.l = 0
Global Ball_Y.l = 0

Procedure Fenster()
  If OpenWindow(#window_1,0,0,#WindowWidth,#WindowHeight,"MiniGame by Alexander N",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)
    If CreateGadgetList(WindowID(#window_1))
      If OpenWindowedScreen(WindowID(#window_1),0,0,#WindowWidth,#WindowHeight,1,0,0)
        
        CreateSprite(#box,10,10)
        StartDrawing(SpriteOutput(#box))
        Box(0,0,10,10,RGB(255,255,255))
        StopDrawing()
      EndIf
    EndIf
  EndIf
EndProcedure

Procedure ende()
  End
EndProcedure






Fenster()
Repeat
   
  event = WaitWindowEvent(10)
  
  WindowID = EventWindow()
  
  GadgetID = EventGadget()
  
  EventType = EventType()
  
  
  
  If event = #PB_Event_CloseWindow
    Select MessageRequester("Ende", "Wollen sie wirklich beenden?", #MB_YESNO|#MB_ICONQUESTION)
      Case #IDYES
        ende()
    EndSelect
  EndIf
  
  
  ExamineKeyboard()
  ClearScreen($000000)
  
  For i = 0 To #WindowWidth Step 10
  DisplaySprite(#box,i,0)  ;wenn ich das hier auskommentier habe ich einen normalen schwarzen hintergund.. wenn nicht kommt bei mir ein farbverlauf.. oder macht das nur meine Grafikkarte?
  Next
   
  FlipBuffers()
  
ForEver
[PB4.20]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@axerus

wie bist du denn drauf gekommen, diese argumente für OpenScreen() zu wählen?

Code: Alles auswählen

OpenWindowedScreen(WindowID(#window_1),0,0,1,1,1,0,0)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Jetzt habe ich noch einen weissen Balken über dem Schwarzen Hintergrund im Windows. Vielleicht auch noch die Höhe korrigieren?

If OpenWindowedScreen(WindowID(#window_1),0,-10,#WindowWidth,#WindowHeight,1,0,0)
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten