Seite 1 von 2
Hintergrundgrafik in Spiel
Verfasst: 01.09.2005 15:27
von Agent
Hi Leutz.
Bin noob auf dem Game-Sektor in Sachen programmieren. Hab ein paar Test-Sachen am laufen.
Meine Frage:
Wie kann ich ein Hintergundbild in ein Spiel machen, ohne das es mein Spiel extrem verlangsamt. In meinen Tests hab ich das Bild immer in die Hauptschleife eingebunden und dort immer wieder darstellen lassen. Entweder über DrawImage (superlangsam) oder den Hintergrund als Spirte und dargestellt.
Also z.b.
Code: Alles auswählen
Repeat
FlipBuffers()
If IsSprite(#background_sprite)
ClearScreen(0,0,0)
DisplaySprite(#background_sprite,0,0)
Else
ClearScreen(rotwert,0,100)
EndIf
;... Restliches Game
Until KeyboardReleased(#PB_Key_Escape)
Auf diese Art und weise wird das Spiel so extrem langsam, nicht mehr spielbar
Verfasst: 01.09.2005 16:23
von hardfalcon
PureBasic-Hilfe hat geschrieben:Wenn Sie ClearScreen() verwenden, platzieren Sie diesen Befehl innerhalb des StartSpecialFX() : ... : StopSpecialFX() Programmblocks.
Verfasst: 01.09.2005 17:07
von PMV
Wenn du ein Hintergrundsprite hast vermute ich mal, das es die Maße des geöffneten Screens hat. Demnach wird durch dieses Sprite eh alles übermalt, somit ist ein ClearScreen() dann nicht mehr nötig

.
Und zu der If-Abfrage. Was IsSprite() macht weis ich nicht genau, aber es ist mit sicherheit langsamer, als wenn du eine einzellne Variable überprüfst. Damit mein ich speicher das Ergebnis von IsSprite() vor der Hauptschleife in eine Variable und frage dann diese Variable in der If-Abfrage ab.
Und noch was, das Sprite darf nicht größer sein als der geöffnete Screen. Nur fals du das nicht weist

. Könnte ja schließlich auch zu verlangsamungen führen. Bei anderen gibs glaub Grafikfehler oder so -.-
hardfalcon hat geschrieben:PureBasic-Hilfe hat geschrieben:Wenn Sie ClearScreen() verwenden, platzieren Sie diesen Befehl innerhalb des StartSpecialFX() : ... : StopSpecialFX() Programmblocks.
^^das steht aber nicht unter dem ClearScreen()-Befehl, der Hilfetext ist doch nur dafür da, um auf umgang mit SpecialFX und dem ClearScreen()-Befehl hin zu weisen. Wenn man keine SpecialFX befehle verwendet würde das doch alles verlangsamen, oder irre ich mich da?
MFG PMV
Verfasst: 01.09.2005 17:17
von Green Snake
PMV hat geschrieben:somit ist ein ClearScreen() dann nicht mehr nötig

.
bei mir wird OHNE clearscreen der screen selbst nicht schön dargestellt, also er "flackert" dann immer

Verfasst: 01.09.2005 17:24
von PMV
Green Snake hat geschrieben:PMV hat geschrieben:somit ist ein ClearScreen() dann nicht mehr nötig

.
bei mir wird OHNE clearscreen der screen selbst nicht schön dargestellt, also er "flackert" dann immer

der ClearScreen()-Befehl überschreibt doch nur den Buffer O_o ... dacht ich bis jetzt immer, oder hab ich da was verpasst? Ich benutze den Befehl nie, wenn ich weis, das der Screen durch Sprites immer komplet übermalt wird.
Und wenn man nun ein Sprite hat, welches halt eh den ganzen Screenbuffer füllt, dann ist ClearScreen() überflüssig, oder ist das so nicht richtig?
MFG PMV
Verfasst: 01.09.2005 17:27
von AndyX
Green Snake hat geschrieben:PMV hat geschrieben:somit ist ein ClearScreen() dann nicht mehr nötig

.
bei mir wird OHNE clearscreen der screen selbst nicht schön dargestellt, also er "flackert" dann immer

Das was du meinst ist FlipBuffers().
Verfasst: 01.09.2005 17:38
von hardfalcon
@Andy: Nö. Wenn man FlipBuffers() vergisst, dann blitzt für den Bruchteil einer Sekunde das erste Bild auf, und dann bleibt der Screen schwarz... Weiss ich aus eigener Erfahrung...

Verfasst: 01.09.2005 17:41
von DarkDragon
hardfalcon hat geschrieben:@Andy: Nö. Wenn man FlipBuffers() vergisst, dann blitzt für den Bruchteil einer Sekunde das erste Bild auf, und dann bleibt der Screen schwarz... Weiss ich aus eigener Erfahrung...

Dürfte es aber eigentlich nicht, denn ClearScreen sollte ja nur den Buffer mit bestimmten Werten füllen.
Verfasst: 01.09.2005 17:45
von Green Snake
@AndyX
ne, ich mein nciht flipbuffers.
wenn ich NUR flippe, aber kein clear mache, dann "flackerts"
Verfasst: 01.09.2005 17:51
von PMV
Hm, also bin ich doch nicht falsch informiert ... gut *gg*
@Green ... das dürfte dann aber wirklich nicht sein. Bist dir sicher, das deine Codes nicht fehlerhaft sind? Passiert das auch bei anderen Codes? Codes aus dem Codearchive schon mal ausprobiert? ... mir kommt das auch sehr schleicherhaft vor

. Also bedenke das der Screen dann durch ein Sprite übermalt werden muss. Das er "flackert" bzw nicht korrekt neugezeichnet wird, wenn nicht jedes mal der ganze Screen neu gezeichnet wird, ist klar.
MFG PMV