Seite 1 von 2

verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 09:54
von Freizeitcoder
Morgen zusammen,

zur Übung bin ich gerade dabei einen Pong-Clon zu erstellen. Mit der Maus kann man die Spielerbalken steuern. Dabei fällt folgendes auf: Wenn ich den Spielerbalken in seine obere Endposition bewege, fängt er an zu Blinken bzw Flattern. Ich kann mir dieses Verhalten nicht erklären, zumal es wirklich nur in den oberen Reihen passiert. Kennt vielleicht jemand das Problem schon, und kann mir einen Rat geben?
Danke

Code: Alles auswählen

;_______________Konstanten
#window_w = 800
#window_h = 600

Enumeration
#window
#button1
#image
#image_g
EndEnumeration

;_______________Variablen
Global gamemode = 1  ;0-Anfang / 1-Spiel / 2-Credits und Quit 

;_______________Struktures
Structure player_container
	pos_y.f 
	pos_x.f
EndStructure
Global Dim player.player_container(2)
player(1)\pos_y = #window_h/2
player(1)\pos_x = 25

player(2)\pos_y = #window_h/2
player(2)\pos_x = #window_w-50

;_______________Init DirectX
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Error", "Can't init DirectX!", 0)
  End
EndIf

;_______________Fenstererstellung
OpenWindow(#window, 0, 0, #window_w, #window_h, "2D Drawing Test",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) 
OpenWindowedScreen(WindowID(#window),0,0,#window_w,#window_h,0,0,0)

;_______________Procedures
Procedure move()	
	player(1)\pos_y = MouseY()
	If player(1)\pos_y <= 0 
		player(1)\pos_y = 0
	EndIf
	If player(1)\pos_y >= #window_h-100 
		player(1)\pos_y = #window_h-100
	EndIf	
EndProcedure

Procedure draw()
	Box(player(1)\pos_x,player(1)\pos_y,25,100,RGB(240, 170, 15))
	Box(player(2)\pos_x,player(2)\pos_y,25,100,RGB(66, 12, 79))
EndProcedure

;_______________Framerate
SetFrameRate(60)

;_______________Mouse auf mitte
MouseLocate(#window_w/2,#window_h/2)

;_________________________________________________________________________Hauptschleife
Repeat	
	ExamineKeyboard()     		; Tastatur aktivieren
	ExamineMouse()				; Mouse aktivieren	
   	ClearScreen(RGB(0,0,0))    	; Bildschirm saeubern und Zeichnungsabteilung	       
	StartDrawing(WindowOutput(#window))	

	move()
	draw()
	
	StopDrawing() 
	FlipBuffers()         		; Den Buffer wechseln
	If KeyboardReleased(#PB_Key_Escape)
		gamemode = 2
	EndIf
Until gamemode = 2
End

Re: verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 10:32
von Kaeru Gaman
bei mir flackert nix... :|
aber wenn ich ne Maustaste drücke, hängt das Prog sich auf, keine Ahnung wieso.
hab XPpro, was hast du?

Re: verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 10:34
von DarkDragon
Hallo,

Bei mir flackert auch nichts. Hast du irgendwelche besonderen Einstellungen wie z.B. Vertikale Synchronisation verändert in deinen Grafikkarteneinstellungen?
Kaeru Gaman hat geschrieben:aber wenn ich ne Maustaste drücke, hängt das Prog sich auf, keine Ahnung wieso.
Wegen der fehlenden Ereignisbehandlung. Dann meint Windows das Programm reagiert nichtmehr und unterbindet jedes Zeichnen darauf.

Re: verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 11:04
von Kaeru Gaman
oy! stimmt, wie konnte ich das übersehen...

@Freizeitcoder

da fehlt ein (Wait)WindowEvent in deiner Hauptschleife.

Re: verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 11:36
von Freizeitcoder
das "(Wait)WindowEvent " habe ich extra entfernt. Ich habe im ursprünglichen Programm einen Ball der sich bewegt. Dies tut er allerdings nur wenn ich die Maus bewege! Also immer nur in dem Moment wo ein WindowEvent statt findet. Ich werde später wieder ein WindowEvent einfügen (ohne Wait).

Ich programmiere auf einem Laptop 1280x800 32bit 60hz. Könnte es vielleicht daran liegen, daß ich noch die Demo nutze?
(Ich verwende die original IDE von Pure)

Gruß

Re: verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 11:42
von DarkDragon
Dann nimm WindowEvent, das blockt nicht. Oder WaitWindowEvent(timeout) + ElapsedMilliseconds() für die Bewegungen des Balls.

Re: verzögerter Bildaufbau (Pong)

Verfasst: 27.09.2009 17:58
von Freizeitcoder
ja, so werde ich das wohl handhaben.

Aber um auf den Grund meiner Frage zurück zu kommen. Hat jemand eine Idee warum der Spielerbalken im oberen Bereich des Fensters nicht korrekt gezeichnet wird? Blöd ist auch, daß es nicht bei allen Personen auftritt. Das macht die Fehlersuche schwer.

Re: verzögerter Bildaufbau (Pong)

Verfasst: 28.09.2009 15:21
von Kurzer
Ich hab jetzt gerade kein PB zur Hand, aber kann man bei FlipBuffers nicht auch einen Parameter angeben, der für die vertikale Sycronisation zuständig ist?
Vielleicht hat es damit zu tun?

Re: verzögerter Bildaufbau (Pong)

Verfasst: 29.09.2009 16:55
von Andesdaf
Kurzer hat geschrieben:Ich hab jetzt gerade kein PB zur Hand, aber kann man bei FlipBuffers nicht auch einen Parameter angeben, der für die vertikale Sycronisation zuständig ist?
Ja, gibt's.

Re: verzögerter Bildaufbau (Pong)

Verfasst: 29.09.2009 17:11
von Kaeru Gaman
... allerdings ist #PB_Screen_WaitSynchronization der Vorgabewert,
es ist also VSync'ed, wenn man nichts angibt.


... aber grad seh ich etwas äußerst Spanisches

Code: Alles auswählen

 StartDrawing(WindowOutput(#window)) 
nimm doch mal das Output das dran ist, also Draw auf den Screen und nicht aufs Fenster, dann hört das Flackern wahrscheinlich auf.

... dass es bei mir nicht flackert liegt womöglich einfach daran, dass meine Mühle schneller ist.