Seltsamer Code

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Nicdel

Betreff: Seltsamer Code

BeitragSa, Jun 13, 2009 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

bei folgendem einfachem Code bekomme ich - nur im Vollbildmodus - seltsame Probleme. Zum einen sieht man den Bildaufbau (wie bei einem Röhrenmonitor) und zum anderen werden die Rechtecke zum Teil Transparent gezeichnet!

Code: [AUSKLAPPEN]

Graphics 1280,800,32,1

SetBuffer(BackBuffer())

time = MilliSecs()

SeedRnd(MilliSecs())

timer = CreateTimer(60)

Repeat

WaitTimer(timer)

If MilliSecs()-time > 2000
g = Rand(255)
r = Rand(100,255)
EndIf

x = Rand(0,GraphicsWidth())
y = Rand(0,GraphicsHeight())
w = Rand(1,200)
h = Rand(1,200)

Color r,g,0

Rect x,y,w,h

Flip 0

Until KeyHit(1)


Vielleicht könnt ihr mir sagen, was nicht stimmt (außer fehlendes Cls) oder ob es bei euch auch passiert.

Mfg Nicdel
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Goodjee

BeitragSa, Jun 13, 2009 20:40
Antworten mit Zitat
Benutzer-Profile anzeigen
vermutlich ist es einfach zu schnell für dein auge und für deinen rechner Wink
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

DAK

BeitragSa, Jun 13, 2009 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
code sollte sauber sein, bei mir geht alles (außer dass mein schirm die auflösung nicht soo mag, hab einen 4:3-schirm). habs nur im fenster getestet, da is alles perfekt gegangen.
Gewinner der 6. und der 68. BlitzCodeCompo

Goodjee

BeitragSa, Jun 13, 2009 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
im fenster geht es bei mir, fullscreen tatsächlich nicht...komische sache
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

DAK

BeitragSa, Jun 13, 2009 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
schätze, du hast auch einen 4:3-schirm, der die auflösung einfach nicht unterstützt
Gewinner der 6. und der 68. BlitzCodeCompo

Goodjee

BeitragSa, Jun 13, 2009 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
die hab ich schon geändert...ich kriege keine fehlermeldung sondern die anzeige ist falsch, wie beschrieben im ersten post, den du hoffentlich gelesen hast...
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Nicdel

BeitragSa, Jun 13, 2009 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ebenfalls einen 16:9 Bildschirm beim Laptop. Und zwar mit genau 1280x 800 Pixeln Auflösung.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

mpmxyz

Betreff: Re: Seltsamer Code

BeitragSa, Jun 13, 2009 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,
du zeichnest die Rechtecke nur auf jeweils einem Buffer.

Das heißt:
Du zeichnest ein Rechteck auf den Backbuffer.
Dann nutzt du Flip, damit Frontbuffer und Backbuffer getauscht werden.
Auf dem jetztigen Backbuffer ist aber kein Rechteck gezeichnet.
Das Spiel geht aber wieder so weiter.

Nun ist es also so, dass jedes Rechteck nur jeden zweiten Frame zu sehen ist.
Durch den schnellen Wechsel der Bilder erscheinen sie aber "nur" transparent.

Das Programm sollte den Zeichenvorgang daher nach dem Flip im Ex-Frontbuffer (Backbuffer) wiederholen.

Der sichtbare "Bildaufbau" verschwindet dadurch auch.

Dieser kommt aber auch wegen dem "Flip 0", da dadurch mitten während der Bildaktualisierung das Bild im Frontbuffer sich ändern kann.
Das mit dem Flip 0 ist aber sehr zu vernachlässigen, solange sich die angezeigten Bilder nicht immer sehr deutlich voneinander unterscheiden, wie es bei deinen verschwindenen und auftauchenden Rechtecken der Fall ist.
Aber selbst dann gibt es noch andere Lösungen.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Nicdel

BeitragSa, Jun 13, 2009 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ja, interessant. Sobald man 2x hintereinader Rect schreibt funktioniert der Code wieder. Aber auch nur ohne Cls (was aber logisch ist).
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jun 13, 2009 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Für so eine additive Bildausgabe sollte man dann FrontBuffer statt BackBuffer einstellen und auf das Flip verzichten.

Wie schon genannt:

Im Vollbildmodus werden beim BackBuffer die beiden Speicheradressen (vom FrontzBuffer und BackBuffer) miteinander getauscht. Das ist eine sehr schnelle Variante ein Flimerfreies Bild zu erstellen. Braucht man aber ein leeren Inhalt, so benutzt man Cls.

Im Fenstermodus übernimmt logischer Weise Windows die Kontrolle der Fenster, und da ist ein Ändern der Speicheradressen auf den FrontBuffer nur wegen eines Fensters logischer Weise nicht zulässig. Windows ''emuliert'' dann ein Bildwechsel, indem auf dem ''BackBuffer'' immer nur gezeichnet wird, und per Flip auf den Fensterbereich kopiert wird.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

TimBo

BeitragSo, Jun 14, 2009 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Um ein Bild zu erweitern , benutze den Befehl Createimage beziehungsweise Setbuffer und wechsel damit auf den imagebuffer .

Hier der Code, verbessert:
Code: [AUSKLAPPEN]
Graphics 1280,1024,32,1

SetBuffer(BackBuffer())
muster = CreateImage(GraphicsWidth(),GraphicsWidth());!!


time = MilliSecs()

SeedRnd(MilliSecs())

timer = CreateTimer(60)

Repeat
   
   WaitTimer(timer)
   
   If MilliSecs()-time > 2000
      g = Rand(255)
      r = Rand(100,255)
   EndIf
   
   x = Rand(0,GraphicsWidth())
   y = Rand(0,GraphicsHeight())
   w = Rand(1,200)
   h = Rand(1,200)
   
   Color r,g,0
   
   SetBuffer ImageBuffer(muster);!!
   Rect x,y,w,h
   SetBuffer BackBuffer();!!
   DrawImage muster,0,0;!!
   
   
   
   Flip(0):Cls
   
Until KeyHit(1)


die ausrufezeichen bitte nicht persönlich nehemen , dass mache ich in IDEAL immer um auf was aufmerksam zu machen.

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Nicdel

BeitragSo, Jun 14, 2009 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon okay, danke. Ich bin kein Anfänger mehr, daher weiß ich mir zu helfen. Mich hats nur in eben diesem Fall interessiert. Trotzdem danke für die Mühe den Code zu schreiben.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group