"Graphics" zur Laufzeit ändern
Übersicht BlitzBasic FAQ und Tutorials
DivineDominionBetreff: "Graphics" zur Laufzeit ändern |
So, Aug 22, 2004 2:11 Antworten mit Zitat |
|
---|---|---|
Kam auch schon etwas öfter in letzter Zeit.
Also man kann den Grafikmodus ändern. Dafür gibt es keinen extra Befehl, man ruft einfach Graphics neu auf. Damit ist die Sache aber nicht erledigt, denn "Graphics" oder "Graphics3D" initialisieren DirectX neu. Damit ist alles, was man vorher mal "geladen" hat, wieder weg. Man muss also alle Bilder neu laden, Modelle, Texturen, ... Das ganze könnt ihr machen indem ihr am Anfang des Programmes alle nötigen Mediendateien global setzt aber noch keinen Wert vergebt und dann eine Funktion aufruft, wie z.B. Init(). Dort ladet ihr dann die Dateien und könnt sie verwenden. Alternativ macht ihr es auf einer schneller dahingeschmierte, aber bestimmt nicht hübschere Art: Code: [AUSKLAPPEN] ;Startwerte Global Modus = 2 Global Bild ;Sprungmarke .Start Graphics 800, 600, 0, Modus ;!!! Mediendateien ALLE neu laden !!! ;Bild erstellen und mit Rechteck füllen Bild = CreateImage( 100, 100 ) SetBuffer ImageBuffer( Bild ) Rect 0, 0, 100, 100 SetBuffer FrontBuffer( ) ;Malen DrawImage Bild, 0, 0 ;Warten WaitKey( ) ;Beim zweiten mal beenden If Modus = 1 Then End ;Ansonsten in Vollbild schalten und Bilder löschen (Damit nicht zuviel speicher versemmelt wird) Modus = 1 FreeImage Bild Goto Start Hier werden alle Startwerte etc. Vor dem Graphics gesetzt. Direkt davor kommt dann eine Sprungmarke, die man mit GOTO ansprechen kann. Man läd also erstmal alles und zeigt es an, dann, nach Tastendruck, wechselt man den Modus von Fenster auf Vollbild und löscht das Bild aus dem Speicher. Das ist wichtig, das muss man auch mit allen Sounds und Modellen machen, weil sonst der alte Speicher nicht freigegeben wird und so erstmal nutzlos besetzt ist. Schließlich springt man an den Start zurück, mit dem neuen Bildschirmmodus im Gepäck und initialisiert auch das Bild neu. Wenn ihr eine Minute zum Starten eures Spieles braucht, weil die Dateien so groß sind die ihr laden müsst, so wird es mit großer Sicherheit ebenso lange dauern wenn ihr den Modus neu setzt. Es ist so als würdet ihr einfach das Programm neustarten. Include-Anweisungen, die ja für gewöhnlich nur Variablenwerte, Kosntanten, Typedefinitionen, Arrays und Funktionen enthalten und den Code nicht wesentlich durch ihre schiere existenz beeinflussen, sollten VOR die Sprungmarke. Möglicherweise macht es aber auch nichts, wenn man das danach macht. Bin mir aber nicht 100%ig sicher, wie es ist wenn man Types nochmal setzt und die BB da arbeitet. Einfach mal ausprobieren, könnt ihr ja für euch ausmachen. Viel Erfolg mit eurem Moduswechsel. Empfehlenswert ist weiterhin das Erstlellen einer Config-Datei in denen diese Daten stehen, aber das mal außen vor |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
- Zuletzt bearbeitet von DivineDominion am Mo, Aug 23, 2004 22:32, insgesamt einmal bearbeitet
Dreamora |
So, Aug 22, 2004 13:31 Antworten mit Zitat |
|
---|---|---|
Ja aber es bringt neulinge schon von Anfang an auf den falschen Pfad.
Es gibt 2-3 Gebiete wo Goto seine existenzberechtigung hat weil Subs / Functions den Algorithmus sehr komplex wirken lassen. Aber ansonsten gibt es eigentlich keinen Grund für Goto Darum hier der goto freie Code Code: [AUSKLAPPEN] ;Startwerte Global Modus = 2 Global Bild gosub Start while Modus <> 1 ;Malen DrawImage Bild, 0, 0 ;Warten WaitKey( ) ;Beim zweiten mal beenden If Modus = 1 Then End ;Ansonsten in Vollbild schalten und Bilder löschen (Damit nicht zuviel speicher versemmelt wird) Modus = 1 FreeImage Bild Gosub Start end while end ; Sub .Start Graphics 800, 600, 0, Modus ;!!! Mediendateien ALLE neu laden !!! ;Bild erstellen und mit Rechteck füllen Bild = CreateImage( 100, 100 ) SetBuffer ImageBuffer( Bild ) Rect 0, 0, 100, 100 SetBuffer FrontBuffer( ) return |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
DivineDominion |
Mo, Aug 23, 2004 22:35 Antworten mit Zitat |
|
---|---|---|
Die Sachew mit Sounds hab ich gefixt, danke
Dieser GOTO-Kram war zum veranschaulichen gedacht. Ich hätte das eher so gemacht, für ein echtes Projekt: Code: [AUSKLAPPEN] Init( 640, 480, 0, 2 ) While Not Keyhit( 1 ) Cls if Keyhit( 27 ) then Init( 800, 600, 0, 1 ) UpdateGfx( ) Flip Wend Function Init( W, B, D, M ) ;Bilder ggf. FREE'n Graphics W, B, D, M ;Bilder etc. laden End Function Fände mich so hübscher. Was soll EndGraphics() sein? FreeImage und so? |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
wunderkind |
Mo, Aug 23, 2004 23:32 Antworten mit Zitat |
|
---|---|---|
http://www.blitzbase.de/befehle2d/endgraphics.htm
http://www.blitzbasic.com/b3dd...ref=2d_a-z |
||
BladeRunnerModerator |
Di, Aug 24, 2004 13:04 Antworten mit Zitat |
|
---|---|---|
Und zum "Lanzebrechen" für Endgraphics() welcher ja eigentlich vollkommen unbekannt ist und von den meisten als unnütz angesehen wird:
Vor kurzem wurde gefragt ob man in einem laufenden Programm vom Fenster- in den Vollbildmodus wechseln kann. Das geht nicht so ohne weiteres: Code: [AUSKLAPPEN] Graphics 640,480,16,1
waitkey() Graphics 640,480,16,2 waitkey() end Dieser Code führt zu einem "Unable to set GraphicsMode"-Error. Durch einfügen von Endrgraphics jedoch, also: Code: [AUSKLAPPEN] Graphics 640,480,16,1
waitkey() EndGraphics() ;jo, check that! Graphics 640,480,16,2 waitkey() end wird es Lauffähig. Ich bin nu was DX angeht wirklich nit ein Crack, vermute aber dass Endgraphics() einige CleanUps vornimmt ohne die Graphics beim neuerlichen Aufrufen ins Trudeln gerät. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Übersicht BlitzBasic FAQ und Tutorials
Powered by phpBB © 2001 - 2006, phpBB Group