Seite 3 von 12

Verfasst: 03.09.2009 10:16
von CptGreenwood
Testversion ist online...

Verfasst: 03.09.2009 10:29
von Kaeru Gaman
Kaeru Gaman hat geschrieben:- hast du ein SetFrameRate oder ein SetRefreshRate drin?
- hast du irgendein timing drin?
CptGreenwood hat geschrieben::( Befürchte, nein! Eben Anfänger...
nunja, der Hintergrund meiner Frage war, dass SetFrameRate / SetRefreshRate die Ursache für das Flackern hätten sein können.

Mal sehen, wie es jetzt funktioniert, wenn du das DrawImage komplett durch Sprites ersetzt hast.
Drawing ist immer fürchterlich langsam, darauf solltest du so weit wie möglich verzichten.

außerdem ist die effektive Größe des Textes beim Drawing auch von den Systemeinstellungen abhängig.
wenn also jemand "zufällig" sein Windows auf "Große Schriftarten" stehen hat,
sind die Buchstaben größer als bei dir und sprengen das Layout.
zur Abhilfe kannst du SpriteFots benutzen.

als kleines Beispiel wie man eine TextConsole auf SpriteBasis realisiert verlinke ich dir auch mal einen älteren Beitrag von mir:
http://www.purebasic.fr/english/viewtopic.php?t=28597

Verfasst: 03.09.2009 10:30
von HeX0R
Es funktioniert!

Bekommst du noch zusammen, was du genau in was geändert hast?

Ich werde mal versuchen ein Fehler-Beispiel zusammenzucoden, kann ja nicht sein, dass es beim Imagedrawn zu Problemen kommen kann.

Verfasst: 03.09.2009 10:37
von CptGreenwood
:mrgreen: Yippiehepp!

Eigentlich war es eine ganz simple Umstellung. Das Spielbrett besteht aus zwei Bildern (oberer Teil und unterer Teil), die ich am Anfang des Bildaufbaus "DrawBoard" (s.o.) per "DrawImage" gezeichnet habe. Nun habe ich die zwei Bilder nicht mehr als Images geladen, sondern als Sprites und daher nicht mehr mit "DrawImage", sondern mit "DisplaySprite" dargestellt (wie alle anderen Grafiken auch...).

War ein guter Tip, zu analysieren, was beim Intro anders läuft, als beim Spiel selbst (da wird nämlich kein Spielbrett gezeichnet...).

Dann schmeiße ich die alte Version mal raus und mache die neue zur alten. Danke für eure Hilfe.

Verfasst: 03.09.2009 10:40
von HeX0R
Ich hab hier ein Beispiel zusammengezimmert, das bei mir genauso flimmert wie das Ursprungsgame:

Code: Alles auswählen

InitSprite()
InitKeyboard()

Procedure DrawBoard()
	If StartDrawing(ScreenOutput())
		DrawImage(ImageID(0), 0, 0)
		DrawImage(ImageID(1), 0, 384)
		StopDrawing()
	EndIf

EndProcedure

Procedure main()

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

	If CreateImage(0, 1024, 384, 32)
		StartDrawing(ImageOutput(0))
			FillArea(0, 0, -1, #Red)
		StopDrawing()
	EndIf
	
	If CreateImage(1, 1024, 384, 32)
		StartDrawing(ImageOutput(0))
			FillArea(0, 0, -1, #Blue)
		StopDrawing()
	EndIf
	
	Repeat
		FlipBuffers()
		ClearScreen(RGB(0, 0, 0))
		DrawBoard()
		ExamineKeyboard()
	Until KeyboardPushed(#PB_Key_Escape)

EndProcedure

main()
Irgendwie komisch, dass das dann sooo langsam hier wird

Verfasst: 03.09.2009 10:54
von CptGreenwood
Ich würde ja auf eine spezielle GraKa-Treiber-Monitor-Kombi tippen, die Zicken macht, wie gesagt, ich habe das Game auf etlichen verschiedenen Systemen, vom Gamer-PC bis zum Netbook ausprobiert und hatte kein Flimmern. Lediglich habe ich fest gestellt, dass wenn Windows ein Mitteilungsbedürfnis über die Taskleiste hat, der Bereich im Game für ein paar Sekunden flackert, der der Taskleiste entspricht. Aber das war alles.

Verfasst: 03.09.2009 11:01
von Kaeru Gaman

Code: Alles auswählen

StartDrawing(ScreenOutput)
  DrawImage(#Bla,...
StopDrawing()
kann 100 bis 1000 mal so lange dauern wie

Code: Alles auswählen

DisplaySprite(#Bla,... 
ein Image liegt im Hauptspeicher und muss deshalb stückweise durch den BUS gequetscht werden.
außerdem ist ein Draw sowieso langsam, weil es eine völlig andere Zugriffsart darstellt.

immer dran denken!

das gibt auf manchen Kombis eben Sync-Probleme, auf anderen nicht.


... das flackern der taskleiste ist völlig normal, jedes im Fullscreen laufende professionelle Game zeigt den Effekt,
z.b. wenn mein Avast meint, mich über eine neue Version informieren zu müssen.

Verfasst: 03.09.2009 11:08
von CptGreenwood
Dachte ich mir am Ende fast, werde es mir hinter die Löffel schreiben!

Verfasst: 03.09.2009 11:09
von HeX0R
Jo, hab ich mir auch gerade durch den Kopf gehen lassen.

Ein 1024x768/24Bit Image verbratet 2,25MB Hauptspeicher.
Und die müssen bei jedem FlipBuffer() (also i.d.R. alle 16ms) in den Videospeicher geschoben werden (während die Sprites dort eh schon rumliegen).

Kein Wunder eigentlich, dass das lahm wird...


Vielleicht sollte man in den Knigge der PB-Programmierung aufnehmen niemals, unter gar keinen Umständen Images direkt auf einen Screen zu zeichnen.

Verfasst: 03.09.2009 11:11
von Kaeru Gaman
CptGreenwood hat geschrieben:Dachte ich mir am Ende fast, werde es mir hinter die Löffel schreiben!
Aber warum hat das selbst bei einem Atom-Netbook problemlos funktioniert?
weil auf manchen Rechnern bzw. Graka-Moni-Kombis zwar die Framerate in den Keller sackt, es aber trotzdem nicht zu Sync-Problemen führt.