Viewport
Übersicht BlitzBasic Beginners-Corner
RebornBetreff: Viewport |
Sa, Jul 21, 2007 23:50 Antworten mit Zitat |
|
---|---|---|
Hallo!
Ich hab mal eine Frage zur Funktionsweise des Befehls "Viewport". Dadurch wird ja ein Bereich festgelegt, in dem Grafiken gezeichnet werden sollen und alle, die drübergehen werden abgeschnitten. Aber wie funktioniert das genau? Ich habe in meine Codes nämlich bisher immer zu Anfang "Viewport 0, 0, gfx_x, gfx_y" geschrieben, damit auch wirklich nur Bilder gezeichnet werden, die auch zu sehen sind. Auf meiner Tilemap werden jedoch auch außerhalb dieses Bereiches Tiles gezeichnet. Reicht es, um Rechenleistung zu sparen, den Viewport auf den Bildschirmbereich zu beschränken oder muss ich es nochmal extra programmieren, dass nur Tiles gezeichnet werden, die auch zu sehen sind? (Ich zweifle mittlerweile nämlich daran, ob ich den Befehl richtig verstanden habe und ob die Grafiken vielleicht nicht doch gezeichnet und dann abgeschnitten werden, was in Sachen Geschwindigkeit dann wohl keinen großen Vorteil bringen würde...) |
||
aMulSieger des Minimalist Compo 01/13 |
So, Jul 22, 2007 0:07 Antworten mit Zitat |
|
---|---|---|
Der Befehl ist völlig ungeeignet um Leistung zu sparen. Man kann mit ihm nur verhindern, dass bestimmte Bereiche nicht "übermalt" werden.
Du musst dein Spiel wohl oder übel selber prüfen lassen, was wann gezeichnet werden muss... Außerdem kann der Viewport eh nicht größer sein, als der verwendete Buffer... |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
hecticSieger des IS Talentwettbewerb 2006 |
So, Jul 22, 2007 0:21 Antworten mit Zitat |
|
---|---|---|
Wenn Viewport 0, 0, gfx_x, gfx_y bei dir der ganze Bildschirm gemeint ist, so macht Blitz das schon von alleine. Du kannst im Grunde garnicht ausserhalb des Bildschirmes wirklich zeichnen, da dafür garkein Speicher auf der Grafikkarte freigegeben wird. Viewport ist zB bei 3D-Sachen sehr Sinnvoll, aber auch für zB Tilemaps, wo umrum Menü etc. noch zu sehen sind, die nicht übermalt werden sollen. Wobei man das auch anders umgehen kann. Kommt halt immer drauf an.
Bei Tilemaps geht's übrigens sehr einfach das anders zu löschen. Wenn du ein zweidimensionales Tilemap erstellt hast, so kannst du das notwendige anhang der Mapposition aus dem Dim-Feld auch nur so auslesen lassen. Immer wieder gern ein uralter Code: [AUSKLAPPEN] ;Grafik setzen
Graphics 320,320,0,2 SetBuffer BackBuffer() ;Variablen festlegen Dim xy%(99,99) ;Spielfeldspeicher mit 100*100 Tiles xp#=1000 ;X-Position im Spielfeld yp#=1000 ;Y-Position im Spielfeld dvx%=0 ;X-Faktor für Tileverschiebung dvy%=0 ;Y-Faktor für Tileverschiebung tpx%=0 ;X-Faktor für Dim-Tilesprung tpy%=0 ;Y-Faktor für Dim-Tilesprung mx#=0 ;X-Position Maus my#=0 ;Y-Position Maus ;Felder For y=0 To 99 For x=0 To 99 If Rand(0,10)>8 Then xy(x,y)=Rand(1,6) Next Next ;Rahmen For q=0 To 99 xy(0,q)=6 xy(q,0)=6 xy(99,q)=6 xy(q,99)=6 Next ;Hauptroutine While Not KeyHit(1) ;Rechne mx=MouseX() my=MouseY() xp=xp-(160-mx)/20 yp=yp-(160-my)/20 If xp<0 Then xp=0 If yp<0 Then yp=0 If xp>2943 Then xp=2943 If yp>2943 Then yp=2943 dvx=xp Mod 32 dvy=yp Mod 32 tpx=Floor(xp/32) tpy=Floor(yp/32) ;Tiles For y=0 To 8 For x=0 To 8 Color xy(x+tpx,y+tpy)*32,0,0 Rect 32+x*32-dvx,32+y*32-dvy,32,32,1 Next Next ;Info Color 255,255,255 Rect 32,32,256,256,0 Text 0,0,xp Text 0,16,yp Flip Cls Wend End Du siehst den weißen Rahmen, der die Bildschirmbegrenzung darstellen soll. Es werden nur die Tiles gezeichnet, die man also auch nur sehen kann. Der Rest wird garnicht erst ausgelesen bzw. gezeichnet. Für ein reeles System würde natürlich der weiße Rahmen verschwinden und die Zeichnereichweite jeweils um ein Tile in jede Richtung erweitert. Ist übrigens ein uralter Code von mir, der sicherlich noch optimiert werden kann.^^ Mit der Maus kannst du rumscrollen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Reborn |
So, Jul 22, 2007 0:47 Antworten mit Zitat |
|
---|---|---|
Okay, dann sage ich danke für die schnelle Hilfe und streiche den Viewport Befehl aus meinem Code. Danke für das Beispiel, hectic. Das hatte ich genauso vor, ist ja zum Glück kein Aufwand. | ||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group