Để biểu đồ cảnh hay không để biểu đồ cảnh?


10

Tôi đã vật lộn với một quyết định liên quan đến việc có thực hiện biểu đồ cảnh trong trò chơi của mình hay không. Tôi có một số trường hợp sử dụng yêu cầu một công cụ như vậy, nhưng tôi chưa thể xem qua một số chi tiết triển khai.

Một số nền tảng: Tôi đang viết một trò chơi thuộc thể loại game bắn súng không gian nhắm vào nền tảng di động (chủ yếu là Android) và mã của tôi gần như hoàn toàn là C ++. Tôi không sử dụng bất kỳ phần mềm trung gian nào; các công cụ kết xuất và vật lý nói riêng là những sáng tạo của riêng tôi. Động cơ vật lý của tôi cập nhật vị trí của các vật thể dựa trên lực và xung lực. Tôi chưa có hệ thống hoạt hình nào nhưng có thể truy cập vào lúc này (có thể có hoặc không có gì để làm với cuộc thảo luận này).

Đầu tiên, tôi sẽ mô tả một trường hợp sử dụng tốt. Tôi muốn có một ông chủ được tạo thành từ nhiều phần riêng biệt, mỗi phần có thể bị phá hủy / phá hủy một cách độc lập. Ví dụ, tôi có thể có một ông chủ có một cánh tay có thể nhận sát thương độc lập với phần còn lại của thực thể ông chủ. Khi cánh tay bị phá hủy, hiệu ứng hạt lửa nằm ở vai của các ông chủ có thể chỉ ra rằng cánh tay giờ đã bị phá hủy.

Vì vậy, tôi đã quyết định thử giải quyết các vấn đề như vậy bằng các ràng buộc trong động cơ vật lý của mình để giữ các đối tượng ghép như vậy lại với nhau. Một ràng buộc như vậy cung cấp 0 độ tự do và về cơ bản là một ma trận biến đổi. Đây thực sự là một nỗ lực để khắc phục một vấn đề mà cuối cùng đã khiến tôi tắt đồ thị cảnh ở nơi đầu tiên, được mô tả dưới đây.

Lý do chính khiến tôi không sử dụng biểu đồ cảnh là vì tôi không thể tìm ra cách hiệu quả để giữ các đối tượng lồng nhau (các đối tượng kế thừa một phép biến đổi từ cha mẹ của chúng) trong cả thế giới vật lý và cảnh dựng hình. Thế giới vật lý cần các vật thể ở trong không gian thế giới (hoặc ít nhất là cùng một không gian) trong khi cảnh kết xuất cần các vật thể trong không gian cha mẹ. Theo dõi các vị trí trong cả hai không gian có thể giúp ích (và không thể tránh khỏi) nhưng làm tăng mối lo ngại của riêng nó, không phải là ít nhất liên quan đến hiệu suất.

Tuy nhiên, với các trường hợp sử dụng như mô tả ở trên, tôi nghĩ rằng việc có thể 'làm việc' trong không gian cha mẹ sẽ trở nên rất quan trọng và cố gắng buộc động cơ vật lý của tôi duy trì các mối quan hệ này thông qua việc sử dụng các ràng buộc sẽ trở thành vấn đề.

Với trường hợp sử dụng và tình trạng khó khăn được mô tả ở trên, tôi có nên sử dụng cấu trúc biểu đồ để chuyển các phép biến đổi từ đối tượng này sang đối tượng khác không? Nếu vậy, công cụ vật lý của tôi nên tính toán vị trí mới và thực hiện các thử nghiệm giao nhau cho các đối tượng trong các không gian khác nhau như thế nào?

Câu trả lời:


11

Bạn đã thực sự thử một biểu đồ phân cấp và đo hiệu suất?

Bạn đã điều tra các công cụ vật lý đơn giản để xem cách chúng xử lý vấn đề, thậm chí một công cụ 2D có mối liên kết giữa các đối tượng sẽ giúp hướng dẫn bạn theo hướng đã được chứng minh.

Tôi sẽ không cố chạy vật lý của bạn trong nhiều không gian, sự phức tạp sẽ rất đáng ngại. Chạy vật lý trong không gian thế giới và thêm chức năng để tạo ra các biến đổi của hệ thống phân cấp của bạn để di chuyển các đối tượng không gian cục bộ ra ngoài không gian thế giới và trở lại. Các ràng buộc của bạn, cần thiết, phải ở trong không gian cục bộ so với đối tượng cha.

Như một ghi chú bên cạnh, ngay cả một mảng các đối tượng thuần túy là một "biểu đồ cảnh", chỉ là một biểu đồ rất đơn giản. Đừng ngại tổ chức dữ liệu theo cách để giải quyết vấn đề và đặc biệt là không quyết định rằng hiệu suất của tổ chức dữ liệu đó là một yếu tố mà thậm chí không đo được hiệu suất đó.


Tôi cố gắng làm việc xung quanh không phải vì hiệu suất mà vì thời gian. Khi bạn độc lập, bị mắc kẹt trong một cái gì đó trong một thời gian dài có thể gây bất lợi cho sự tiến bộ và suy nghĩ. Tôi đã xem qua công cụ Spring RTS một chút nhưng không tìm thấy thứ tôi đang tìm kiếm. Vì vậy, nếu tôi đưa ra biểu đồ, trong công cụ vật lý, tôi sẽ cần cập nhật các vị trí đối tượng trong không gian cục bộ, sau đó tính toán định hướng không gian thế giới và sử dụng để phát hiện va chạm. Bạn đề cập đến "và trở lại", mặc dù - điều đó đòi hỏi phải tính toán ma trận nghịch đảo, phải không? Khi nào tôi cần làm điều đó?
thịt

Tôi đã hình dung rằng nếu thời gian là vấn đề thì việc sử dụng thư viện vật lý sẽ nhanh hơn, để tiết kiệm rất nhiều thời gian gỡ lỗi. Nếu bạn chỉ làm 2D thì box2d.org có thể? Tôi đề nghị "và quay lại" bởi vì nó chỉ là một nghịch đảo, như bạn đã đoán. Tại một số điểm, bạn có thể muốn lấy một cái gì đó trong không gian thế giới và gắn nó vào một mô hình khác, sẽ cần điều đó.
Patrick Hughes
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.