2009-07-04 20 views
6

Tôi đã chơi với pygame (trên Debian/Lenny). Có vẻ như nó hoạt động tốt, ngoại trừ các vết rách khó chịu (chế độ toàn màn hình hoặc cửa sổ).Làm thế nào để tránh rách với pygame trên Linux/X11

Tôi đang sử dụng trình điều khiển SDL X11 mặc định. Googling cho thấy rằng đó là một vấn đề đã biết với SDL rằng X11 không cung cấp cơ sở vsync (ngay cả với màn hình được tạo với cờ FULLSCREEN|DOUBLEBUF|HWSURFACE) và tôi nên sử dụng trình điều khiển "dga" thay thế.

Tuy nhiên, chạy

SDL_VIDEODRIVER=dga ./mygame.py 

ném trong pygame khởi động với

pygame.error: No available video device 

(mặc dù xdpyinfo cho thấy một phần mở rộng XFree86-DGA hiện tại).

Vì vậy: mẹo lừa đảo không bị xé rách là gì? Hoặc bằng cách nhận được điều này làm việc hoặc một số cơ chế khác?

+1

Bạn có trình điều khiển hạt nhân thích hợp cho thẻ video của mình không. Đối với X11, bạn cần cả trình điều khiển hạt nhân và một lib X11 để truy cập nó. Nếu một người bị mất tích, người kia sẽ làm việc, nhưng sẽ không sử dụng được. – SingleNegationElimination

+0

Tôi hơi ngạc nhiên vì điều này là http://packages.debian.org/lenny/libxxf86dga1, xuất hiện để cung cấp các nội dung DGA trong X11, không đề cập đến bất kỳ điều gì về các mô-đun hạt nhân (nó sẽ hiển thị như thế nào trong lsmod?). Đối với những gì nó có giá trị, tôi đang sử dụng trình điều khiển nv xorg với một card AGP NVidia 5-series cũ. – timday

Trả lời

4

Giải pháp cuối cùng của tôi là chuyển sang Pyglet, có vẻ như hỗ trợ OpenGL tốt hơn nhiều so với Pygame và không có bất kỳ vấn đề nhấp nháy nào.

+1

Pyglet cũng gần gũi hơn rất nhiều về API và thực hành cho các thư viện đồ họa khác cho các ngôn ngữ khác và công nghệ hiện đại. – Jotham

+0

[Gloss] (http://www.tuxradar.com/gloss) là một tùy chọn khác nếu bạn không muốn đi tất cả các cách. Nó kết thúc tốt đẹp OpenGL trong các lớp học và phương pháp dễ dàng, và chơi độc đáo cùng Pygame. – fbmd

4

Cách tốt nhất để tránh rách ở mức tối thiểu là giữ tốc độ khung hình của bạn càng gần với tần số của màn hình càng tốt. Thư viện SDL không có một vsync trừ khi bạn đang chạy OpenGL thông qua nó, vì vậy cách duy nhất là để ước tính tỷ lệ khung hình chính mình. Bộ đệm đôi phần cứng SDL không được bảo đảm, mặc dù rất đẹp khi nó hoạt động. Tôi đã hiếm khi nhìn thấy nó trong hành động.

Theo kinh nghiệm của tôi với SDL, bạn phải sử dụng OpenGL để loại bỏ hoàn toàn rách. Đó là một chút điều chỉnh, nhưng vẽ các hoạ tiết 2D đơn giản không phải là tất cả những gì phức tạp và bạn nhận được một vài phần thưởng bổ sung khác mà bạn có thể thực hiện như xoay, mở rộng, trộn và vân vân.

Tuy nhiên, nếu bạn vẫn muốn sử dụng hiển thị phần mềm, tôi khuyên bạn nên sử dụng cập nhật hình chữ nhật bẩn. Nó cũng hơi khó sử dụng, nhưng nó tiết kiệm rất nhiều công đoạn có thể giúp cập nhật nhanh hơn và tránh toàn bộ màn hình bị rách (trừ khi bạn đang di chuyển toàn bộ vùng chơi hoặc thứ gì đó). Cũng như thời gian cần để vẽ đến bộ đệm ở mức tối thiểu có thể tránh hiện tượng nhòe trong khi màn hình đang được cập nhật, đó là nguyên nhân gây ra hiện tượng rách.