2011-10-12 32 views
8

Im tạo ra một chiếc xe đơn giản và trò chơi mô phỏng phóng trong WPF bằng cách sử dụng C#. Tôi cần phải có tỷ lệ khung hình không đổi (tức là tôi cần phải biết bao nhiêu để di chuyển một đối tượng với một vận tốc nhất định trong mỗi khung hình). Bằng cách này tôi có thể đăng ký một sự kiện tính toán và cập nhật vị trí theo vật lý của trò chơi với sự kiện CompositionTarget.Rendering.Tốc độ khung hình không đổi trong WPF cho trò chơi

CompositionTarget.Rendering += UpdatePositions; 

Tôi googled nó một lúc và không tìm thấy câu trả lời. Khung hình/giây trong WPF seem to be arbitrary và sử dụng Đồng hồ bấm giờ để biết thời gian trôi qua giữa một khung hình và khung hình trước đó sẽ không sạch sẽ chút nào.

Tôi cũng nghĩ đến việc tạo tốc độ khung hình của riêng mình, bằng cách gọi UpdatePositions cứ sau một vài miligiây và hy vọng hiển thị phù hợp và có hình động trơn tru. Điều này có vẻ như tái phát minh ra bánh xe, và tôi không thể nghĩ ra một cách để thực hiện điều này một cách sạch sẽ và đơn giản.

Cảm ơn!

+7

Không sử dụng WPF cho bất kỳ điều gì nhưng phát triển trò chơi cơ bản nhất. Nó thực sự không dành cho việc sử dụng đó. Bạn nên nhìn vào khung công tác XNA nếu bạn muốn tạo một trò chơi bằng .NET. – dlev

+0

Tôi nghĩ đây là cơ bản nhất trong phát triển trò chơi và tôi đã làm việc rất nhiều nên tôi thực sự cần phân loại các vấn đề về tốc độ khung hình ... – Nicolas

+0

"sử dụng Đồng hồ bấm giờ để biết thời gian trôi qua giữa khung và trước đó sẽ không được sạch sẽ ở tất cả "- làm thế nào? – EboMike

Trả lời

7

Nó là không thể để có được một tốc độ khung hình liên tục trong WPF. WPF được dựa trên ý tưởng về tỷ lệ khung hình động và điều này làm cho nó gần như vô dụng đối với bất kỳ sự phát triển trò chơi nào.

Một số thông tin liên quan:

Why is Frame Rate in WPF Irregular and Not Limited To Monitor Refresh?

http://rhnatiuk.wordpress.com/2008/12/21/wpf-video-playback-problems/

Như những người khác đã chỉ ra giải pháp là, không may, không sử dụng WPF để phát triển trò chơi.

Tôi đã làm việc với WPF hoạt hình rộng rãi và nó là một nỗi đau tuyệt đối để có được bất cứ điều gì để hoạt động trơn tru trong WPF (nếu bạn muốn làm điều này tôi đã viết xuống một vài best practices ở đây).

Tôi chắc chắn có nhiều lý do khác khiến WPF không tốt cho phát triển trò chơi. Một ví dụ là bạn không thể tạo một ứng dụng toàn màn hình trong WPF vì các ứng dụng WPF luôn được cửa sổ. Điều này có nghĩa rằng bạn không thể thay đổi độ phân giải cho trò chơi của bạn để làm cho nó mượt mà trên toàn màn hình có nghĩa là bạn không thể tạo ra một trò chơi toàn màn hình trong WPF và mong đợi kết quả tốt.

Nếu bạn nghiêm túc về việc phát triển trò chơi hoặc trò chơi nói chung và đây không chỉ là mẫu thử nghiệm hay chỉ để giải trí thì tôi khuyên bạn nên bỏ WPF và sử dụng cái gì khác, nếu không bạn sẽ tự đặt mình lên vì thất vọng và chất lượng phụ.

+0

trong những thực hành tốt nhất bạn nói: "Sự kiện CompositionTarget.Rendering nguyên nhân WPF để Nếu bạn sử dụng sự kiện này, hãy tách nó ra mọi cơ hội. " Bạn có ý gì khi tách sự kiện? Cảm ơn – Nicolas

+0

nó chỉ có nghĩa là hooking lên đến CompositionTarget.Rendering không phải là tối ưu vì nó có thể ảnh hưởng đến hiệu suất ngay cả khi bạn không làm bất cứ điều gì trong xử lý sự kiện. MS khuyên bạn nên tách/hủy đăng ký (CompositionTarget.Rendering- = Foo) bất cứ khi nào nó không thực sự cần thiết để nghe sự kiện này. –

+0

lời khuyên này xuất phát trực tiếp từ MS: http://msdn.microsoft.com/en-us/library/bb613584.aspx –

2

Thậm chí nếu bạn không muốn đi với XNA để phát triển trò chơi, hãy xem xét cách quản lý thời gian ở đó - tốc độ khung hình cố định không cần thiết hoặc cần thiết cho thời gian trò chơi ổn định. Cố gắng cơ sở vật lý của bạn về thời gian trò chơi (có thể giống như thời gian thực hoặc được tính dựa trên thời gian thực - nghĩa là nếu bạn muốn có chế độ "tua đi nhanh" hoặc tạm dừng trò chơi) thay vì tốc độ khung hình.

Có 2 liên kết thảo luận về "thời gian trò chơi", "thời gian thực" và các khái niệm liên quan: http://blogs.msdn.com/shawnhar/archive/2007/07/25/understanding-gametime.aspx, http://blogs.msdn.com/shawnhar/archive/2007/11/23/game-timing-in-xna-game-studio-2-0.aspx

Các vấn đề liên quan