Domanda

Ho giocato con pygame (su Debian / Lenny). Sembra funzionare bene, tranne che per fastidiosa lacrimazione di Blits (schermo intero o modalità finestra).

Sto utilizzando il driver predefinito SDL X11. Googling suggerisce che si tratta di un problema noto con SDL che X11 fornisce nessuna struttura vsync (anche con un display creato con bandiere FULLSCREEN|DOUBLEBUF|HWSURFACE), e dovrei usare il driver "DGA" invece.

Tuttavia, l'esecuzione

SDL_VIDEODRIVER=dga ./mygame.py

getta in pygame inizializzazione con

pygame.error: No available video device

(nonostante xdpyinfo mostra un'estensione presente XFree86-DGA).

Quindi: qual è il trucco per ottenere lanci sincronizzata su vsync senza schegge? Sia per ottenere questo lavoro cosa DGA o qualche altro meccanismo?

È stato utile?

Soluzione

Bene la mia eventuale soluzione era quella di passare a pyglet , che sembra supportare OpenGL molto meglio di Pygame, e non ha problemi di sfarfallio.

Altri suggerimenti

Il modo migliore per mantenere strappo al minimo è di mantenere il frame rate più vicino alla frequenza dello schermo come possibile. La libreria SDL non dispone di un vsync a meno che non si sta eseguendo OpenGL attraverso di essa, quindi l'unico modo è quello di approssimare il frame rate da soli. Il doppio buffer hardware SDL non è garantito, anche se bello quando funziona. Ho raramente visto in azione.

Nella mia esperienza con SDL è necessario utilizzare OpenGL per eliminare completamente lo strappo. E 'un po' di un adeguamento, ma il disegno texture 2D semplici non è poi così complicato e si ottiene un paio di altri bonus aggiunto che siete in grado di implementare, come la rotazione, il ridimensionamento, la miscelazione e così via.

Tuttavia, se si vuole ancora utilizzare il rendering software, mi consiglia di utilizzare sporca aggiornamento rettangolo. E 'anche un po' difficile abituarsi, ma consente di risparmiare carichi di trasformazione, che possono rendere più facile mantenere gli aggiornamenti fino a camminare ed evita tutto lo schermo viene strappato (a meno che non si sta scorrendo l'intera area di gioco o qualcosa del genere). Come pure il tempo necessario per disegnare al buffer è ad un minimo che può evitare il blitting che avviene mentre lo schermo aggiorna, che è la causa della lacerazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top