Einfacher Farbverlauf bremst System voll aus

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Delle
Beiträge: 1132
Registriert: 10.05.2005 22:48

Einfacher Farbverlauf bremst System voll aus

Beitrag von Delle »

Hallo,

Screen ist 1024x768x32, ein paar Sprites fliegen rum.

Komischerweise bremst ein simpler Farbverlauf alles gleich aus:

Code: Alles auswählen

StartDrawing(ScreenOutput())
For i=0 To 254:Line(0,i,1023,0,RGB(i,i,i)):Next
StopDrawing()
Kann man dagegen was tun? Habe schon versucht den Farbverlauf
als Sprite zu plazieren aber es ruckelt immer noch...

Wieviel MHz braucht man denn damit ein Spiel in 1024x768x32
mit einigen Sprites ruckelfrei abläuft?

Danke,
Delle
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Sobald man ein StartDrawing() ... StopDrawing() in seinem Code stehen hat, wird das Programm lahm. Es braucht noch nicht einmal was zwischen den beiden Befehlen zu stehen, siehe hier:

http://forums.purebasic.com/german/view ... c&start=10

Und wenn man dann noch die extrem langsamen 2DDrawing Befehle benutzt (Line, Box usw.) und das vielleicht in jedem Schleifendurchlauf hundertfach, dann ist es kein Wunder, dass jeder noch so gute Rechner in die Knie geht.

Meine Empfehlung: Lieber nicht die 2DDrawing-Befehle verwenden, wenn man ein schnelles Spiel schreiben will! Man kann dies mit der nötigen Kenntnis auch über DirectX lösen:

http://forums.purebasic.com/german/viewtopic.php?t=3121

Das ist tausendmal schneller...
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Oder einfach vorher ein Sprite generieren (außerhalb der Hauptschleife), wenn sich die Farben im Spiel nicht ändern sollen:

Code: Alles auswählen

InitMouse()
InitKeyboard()
InitSprite()

#SPR_Verlauf = 99

OpenScreen(1024, 768, 32, "VERLAUF")

CreateSprite(#SPR_Verlauf, 1024, 255)

StartDrawing(SpriteOutput(#SPR_Verlauf))
For i=0 To 254:Line(0,i,1024,0,RGB(i,i,i)):Next
StopDrawing()

Repeat

ExamineMouse()
ExamineKeyboard()

ClearScreen(255,255,255)
DisplaySprite(#SPR_Verlauf, MouseX(), MouseY())

FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)
Benutzeravatar
Delle
Beiträge: 1132
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Oder einfach vorher ein Sprite generieren (außerhalb der Hauptschleife), wenn sich die Farben im Spiel nicht ändern sollen:
Die Idee hatte ich auch schon (siehe Startposting), hat aber im
Endergebnis keinen Unterschied gemacht.

Die DirectBefehle sehen gut aus, schmiert bei mir leider ab.

Da muss wohl doch mal ne neue Grafikkarte her...[/code]
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Hm... eigentlich sollten diese Befehle ab DirectX7 funktionieren. Wenn, dann müsste eher ne ältere Grafikkarte her. Aber eigentlich ist das ja alles abwärtskombatibel... frag mal den Stefan Möbius, der hat diese Routinen geschrieben
Benutzeravatar
Delle
Beiträge: 1132
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Hab generell Probleme mit Init3D()-Sachen, von daher wird es nicht an seinem Code liegen.
Antworten