Das Spiel zur Schweinegrippe ist da!

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag von CptGreenwood »

Testversion ist online...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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
Zuletzt geändert von Kaeru Gaman am 03.09.2009 10:30, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag 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.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
CptGreenwood
Beiträge: 125
Registriert: 12.07.2007 10:40

Beitrag von CptGreenwood »

Dachte ich mir am Ende fast, werde es mir hinter die Löffel schreiben!
Zuletzt geändert von CptGreenwood am 03.09.2009 11:11, insgesamt 1-mal geändert.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten