2013-02-25 33 views
8

Đây là câu hỏi nhiều hơn để yêu cầu một số lời khuyên về mẫu/phương pháp tôi nên sử dụng. Tôi đã thực hiện một số điều tra về vấn đề này - với kết quả kém.XNA - Mô phỏng tuyết

Về cơ bản, tôi có ý tưởng về trò chơi, trong đó cơ chế chơi trò chơi chính dựa trên tuyết rơi - hoặc trong trường hợp của các hạt rơi xuống trò chơi ý tưởng này.

Tuyết/hạt cần phải rơi xuống màn hình - nhưng tích lũy thành cọc. Vấn đề là, tôi cần tuyết để 'chảy xuống' các cạnh của cọc, khi chúng là góc nhất định, và tiếp tục tích lũy. Có thể là các lỗ mở bên dưới đống tuyết, và tuyết rơi ra - nghĩ như cát rơi qua một chiếc đồng hồ cát.

Tôi đã thử đây là Box2d - rõ ràng là Box2d không phải là lựa chọn đúng cho 10.000 hạt nhỏ xíu - kéo dài trong một thời gian dài. Hộp 2D chugged đến chết khá nhanh chóng.

Tôi đã thử vẽ các ảnh bitmap 1px lên màn hình, nhưng xử lý 10.000 lần va chạm mỗi lần cập nhật được chứng minh là hoạt động kém.

Bất kỳ ý tưởng nào cũng sẽ được đánh giá cao.

Cheers

+0

Bạn có thể sẽ kết thúc với một đối thủ cạnh tranh 3DMark ... 10000s của hạt dai dẳng âm thanh như một công việc cho CUDA anyway – Alex

+0

bạn có thể làm rõ - là nó 2d hoặc 3d, không chỉ tuyết accumualte bằng cách rơi từ trên cao và những gì kích thước nếu bạn chơi khu vực? – Stuart

+0

Tôi đang tạo một trò chơi platformer 2d dựa trên nền gạch và khi tôi vẽ 200'000 hình thu nhỏ ở độ phân giải đầy đủ, nó cho tôi 60 khung hình trên giây trên máy tính để bàn tầm thường 2008, vì vậy tôi không nghĩ rằng 10 nghìn lần sprites phải mối quan ngại. Logic xung đột có thể thiếu sót cho kết quả kém, ví dụ như OP có thể chạy kiểm tra giữa tất cả các bông tuyết, khi một số trong chúng quá xa để đủ điều kiện kiểm tra. – user1306322

Trả lời

1

Vâng, giống như bạn phát hiện ra, không có thư viện hiện có sẽ giúp bạn trừ khi nó hướng rất đặc biệt đối với kịch bản của mình. Với XNA tiếc là không có nhiều thứ để lựa chọn, và có vẻ như không ai trong số các thư viện hệ thống hạt hiện có hỗ trợ vật lý hạt.

Vì vậy, bạn sẽ cần phải tự mình làm rất nhiều việc. Đầu tiên và quan trọng nhất bạn cần phải suy nghĩ của tất cả các tối ưu hóa bạn có thể có thể làm. Giống như một bình luận cho biết, bạn không nên chạy kiểm tra giữa tất cả các hạt mỗi khung hình. Bạn nên sử dụng một kiểm tra va chạm dựa trên điểm thay vì các công cụ fancier thường được sử dụng bởi các công cụ vật lý. Bạn nên đảm bảo rằng các hạt luôn có cùng kích thước, trong trường hợp này (liên quan đến hệ tọa độ tham chiếu, điều đó không có nghĩa là bạn không thể thu phóng). Và tất nhiên bạn cần phải bỏ qua càng nhiều lần kiểm tra va chạm càng tốt - các hạt bạn biết đang nghỉ ngơi sẽ không bao giờ được kiểm tra, giống như những hạt có các hạt liền kề ở tất cả các bên - dẫn tôi nghĩ về lưới. Có lẽ bạn có thể đại diện cho toàn bộ 'thế giới' như một mạng lưới, và đơn giản hóa logic từ quan điểm này - khá giống với Minecraft, bạn có đồng ý không?

Dù sao, tôi nhận ra tôi đang lan man một chút nhưng đó là một chủ đề mở như vậy ... :)

1

Có thể giám sát các hạt thực sự đang được xử lý bởi công cụ vật lý không? Nếu vậy, có cách nào bạn có thể ngừng xử lý vật lý của họ, hoặc hạn chế nghiêm trọng những gì được xử lý, nếu vận tốc của họ là ít hơn 0,01 hoặc một cái gì đó như thế nào?

Nếu bạn chỉ xử lý các hạt cần xử lý, thì bạn có thể có bao nhiêu tùy thích, giả sử rằng chúng không phải là tất cả di chuyển cùng một lúc!

Nếu điều này vẫn còn là một vấn đề, có vẻ như một giải pháp động lực học chất lỏng có thể phù hợp hơn, vì động lực học về cơ bản là rất nhiều hạt chuyển động nhỏ.

Dưới đây là một số thông tin thú vị về động lực học chất 2D:

http://www.ibiblio.org/e-notes/webgl/gpu/fluid.htm

engine vật lý của bạn có thể đã chứa những gì bạn cần.

+0

Thật không may - tuyết là người dùng tương tác - cảm ơn câu trả lời của bạn :) –

+0

OK, tôi đã cập nhật câu trả lời của mình cho phù hợp. – rhughes

+0

@DaveBish Bạn đã tham gia như thế nào? – rhughes