Tôi có nên viết công cụ vật lý của riêng mình, vì tích hợp mạng?


11

Tôi hiện đang phát triển một game bắn súng zombie từ trên xuống, thời gian thực. Tôi đang mã hóa cái này trong Java, sử dụng JBox2D làm công cụ vật lý của tôi. Tôi đã được mã hóa mạng trong tuần này, và bây giờ đến lúc đồng bộ hóa vật lý.

Tôi dự định sử dụng mô hình máy khách dự đoán / máy chủ có thẩm quyền, nơi máy khách có thể tự do di chuyển, miễn là máy chủ chấp thuận mô hình đó sau này. Điều này liên quan đến việc khách hàng gửi các gói chứa dữ liệu chuyển động đến máy chủ và máy chủ tính toán độ trễ và mô phỏng lại thế giới từ trạng thái cũ hơn.

Vấn đề của tôi là, công cụ vật lý hiện tại của tôi, JBox2D (về cơ bản là một cổng của Box2D), không hỗ trợ khôi phục thế giới và dường như không dễ dàng để xâu chuỗi dữ liệu thế giới. Tôi có 2 giải pháp, tôi có thể sửa đổi / mở rộng công cụ vật lý hiện tại của mình hoặc tự viết.

Lý do viết công cụ vật lý của riêng tôi -

  • Tôi có thể loại bỏ các tính năng không cần thiết. Trong một trò chơi từ trên xuống, tôi chỉ thực sự cần cơ chế va chạm và lực lượng xử lý. Không có trọng lực có liên quan.
  • Tôi có thể hiểu mã tốt hơn và [rất có thể] sẽ dễ dàng thực hiện các hàm quay lại hơn

Lý do mở rộng / sửa đổi JBox2D

  • Viết công cụ vật lý của riêng tôi, sẽ là một khối lượng công việc đáng kể, có thể là cồng kềnh
  • JBox2D có một cộng đồng hỗ trợ rộng rãi, có thể giúp tôi với nhà phát triển của mình
  • JBox2D, có các tối ưu hóa cụ thể, cho những thứ như phát hiện va chạm, làm cho nó hữu ích
  • Một số công việc đã được thực hiện về điều này, nhưng ít mã đã được chia sẻ

Vậy ý kiến ​​của bạn là gì. Đây là trò chơi đầu tiên của tôi, và tôi không phải là một nhà phát triển trò chơi chuyên nghiệp. Nếu bất cứ ai cũng có thể cung cấp một số liên kết để hoạt động trong khu vực (tốt nhất là sử dụng JBox2D / Box2D / Java).


Cũng lưu ý rằng nếu bạn sử dụng JBox2D, bạn sẽ cần sử dụng strictfpở mọi nơi, điều này sẽ ảnh hưởng nghiêm trọng đến hiệu suất. Nếu không, máy chủ và máy khách có thể không nhận được kết quả chính xác như nhau. Tôi sẽ khuyên bạn nên sử dụng điểm cố định thay thế.
sam hocevar

Câu trả lời:


7

Phát hiện va chạm trong 2D rất đơn giản Tôi không biết tại sao bạn thậm chí còn bận tâm sử dụng một công cụ vật lý ở nơi đầu tiên. Và vì tất cả các lực xử lý đều thẳng về phía trước hoặc trên một đường cong (không bị ngã, thay đổi chẩn đoán, v.v.) Cá nhân tôi không nên suy nghĩ nhiều về bạn mà bạn nên chọn. Làm của riêng bạn là đơn giản. Va chạm:

chiếm 3 sự va chạm có thể xảy ra trong 2 hình chữ nhật:

  1. Cạnh với cạnh: Khá đơn giản, bạn có trục của một cạnh và một cạnh khác và bạn quyết định xem chúng có chiếm cùng một không gian hoặc gần đủ với nó không.
  2. Edge to angle: Điều này sẽ dễ dàng là phổ biến nhất nếu bạn có hình dạng xoay. May mắn thay, nó cũng khá đơn giản để thực hiện.
  3. Góc tới góc: Điều này sẽ hiếm khi xảy ra đến mức nó thậm chí không đáng để thực hiện. Lý do cho điều đó, là 2 thứ sẽ phải di chuyển theo hai hướng hoàn toàn ngược lại trên cùng một trục chính xác xuống động cơ của bạn được tính thập phân cuối cùng. Bây giờ, nếu mọi thứ xoay 45 hoặc 90 độ, điều này CÓ THỂ (thậm chí có thể không) có giá trị bao gồm

EDIT: Như đã nhận xét, tôi ít quen thuộc với vấn đề này và không nên hỏi ý kiến ​​về vụ va chạm đạn / đạn.

Khi tôi làm việc với đạn trong không gian 2D, tôi đã sử dụng một loại đường dẫn hoạt động theo cả đường thẳng và đường cong, nơi tôi sẽ ném đạn bằng động cơ vật lý (mà tôi không tạo ra từ đầu) và sử dụng va chạm tiêu chuẩn.

Đọc về xây dựng này từ đầu trong các ý kiến.


EDIT: * Tin tôi đi, * bất kể trong số đó, bạn sẽ cần một số hình thức tính toán chết trong công cụ trò chơi của mình, vì các viên đạn và có bao nhiêu quả đạn có thể xuất hiện trên màn hình tại bất kỳ thời điểm nào. Bạn TUYỆT ĐỐI không muốn cập nhật từng viên đạn trên màn hình trên mỗi khung hình tại vị trí đã cho. Nhưng đó là một cách tuyệt vời để làm cho trò chơi chậm một cách khó tin: D! Bạn chỉ nên cập nhật những điều sau:

  • Một viên đạn đang được ném
  • Hướng nó bị ném vào
  • Có hay không nó cong
    • Và nếu vậy, chức năng của đường cong là gì
  • Nó là gì (Đây là tài khoản cho đồ họa, hiệu ứng, thiệt hại, tất cả mọi thứ)

Bây giờ hãy cập nhật dữ liệu trong công cụ phù hợp với dữ liệu đó, thay vì trên máy chủ cho từng viên đạn chết tiệt đó và gửi dữ liệu gói cho mỗi viên đạn. (Hãy tưởng tượng làm điều đó chỉ với 2 khẩu súng máy trên màn hình! Chúa ơi!)


Tất nhiên nó tương đối dễ thực hiện, nhưng tôi cũng quan tâm đến việc tối ưu hóa phát hiện va chạm, điều mà tôi không biết làm thế nào để thực hiện.
liamzebedee

Phương pháp tôi mô tả thực sự sẽ không yêu cầu tối ưu hóa nếu bạn thực hiện như mô tả. Tối ưu hóa duy nhất có thể cần thiết, là thời gian bạn thực hiện kiểm tra trước và tần suất thực sự va chạm được cập nhật. Vd: Họ thực sự chỉ cần được cập nhật khi có khả năng va chạm.
Joshua Hedges

Để mở rộng dựa trên những gì tôi đã nêu cuối cùng. Bạn chỉ thực sự cần kiểm tra va chạm xây dựng chẳng hạn, khi nhân vật của bạn di chuyển ở nơi đầu tiên. Bạn chỉ cần kiểm tra xung đột đơn vị, khi bạn thậm chí có các đơn vị trong tầm nhìn không phải là nhân vật của bạn. Bạn chỉ cần kiểm tra va chạm đạn, khi chúng còn tồn tại (tại thời điểm đó). Bạn có thể bỏ qua bất kỳ hình thức phát hiện loại va chạm nào (nó có cạnh này từ góc này sang góc kia không? V.v.) sau khi bạn biết rằng một cái gì đó thậm chí còn chạm vào một cái gì đó khác hoặc gần với nó. Nếu không, bỏ qua nó tổng thể.
Joshua Hedges

Ngoại trừ khi tôi xử lý va chạm phía máy chủ, trong đó tôi cần phát hiện va chạm cho nhiều người chơi, v.v.
liamzebedee

4
@MadPumpkin: sự tự tin thái quá của bạn phản ánh không tốt đến câu trả lời của bạn; bạn đang nói về việc phát hiện va chạm, nhưng bạn không đề cập đến phát hiện va chạm quét, đó là cốt lõi tuyệt đối của việc xử lý đạn thích hợp trong một game bắn súng 2D. Ngoài ra, ngay cả khi quét, độ phân giải cũng quan trọng như phát hiện vì bạn cần quyết định va chạm nào xảy ra trước, giải quyết xung đột tiềm ẩn và có thể bắt đầu lại toàn bộ độ phân giải trong trường hợp các thực thể bị xóa. Chắc chắn không phải là vấn đề tầm thường mà bạn dường như đang ám chỉ nó.
sam hocevar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.