Trong trò chơi xếp gạch 2D, NPC và gạch nên tham chiếu lẫn nhau như thế nào?


9

Tôi đang tạo một công cụ gạch cho các trò chơi 2D từ trên xuống. Về cơ bản thế giới bao gồm một mạng lưới gạch.

Bây giờ tôi muốn đặt các NPC chẳng hạn có thể di chuyển trên bản đồ.

Bạn nghĩ gì là tốt nhất:

  1. mỗi ô có một con trỏ tới NPC nằm trên ô của nó hoặc con trỏ NULL
  2. có một danh sách các NPC và chúng có tọa độ của ô mà chúng đang nằm.
  3. thứ gì khác?

tôi nghĩ

  1. nhanh hơn để phát hiện va chạm nhưng nó sẽ sử dụng nhiều dung lượng bộ nhớ hơn và chậm hơn để tìm thấy tất cả các NPC trong bản đồ.
  2. Là ngược lại.

Câu trả lời:


11

Tại sao không phải cả hai? Đôi khi bạn sẽ muốn xem liệu có NPC nào trên một ô cụ thể không (chẳng hạn như để phát hiện va chạm, như bạn đã đề cập) và những lần khác khi bạn muốn lặp lại tất cả các NPC trên thế giới ( chẳng hạn như để chạy các phương thức AI của họ mọi khung hình).

Một con trỏ trên mỗi ô không có nhiều bộ nhớ trừ khi bạn làm việc trên nền tảng bị giới hạn bộ nhớ hoặc bạn có một bản đồ thực sự lớn.


5
+1 Tôi có xu hướng đồng ý với điều này, tuy nhiên @lezebulon, tôi khuyên bạn nên gói gọn bất kỳ logic nào cần cập nhật cả hai cùng nhau, càng sớm càng tốt. Đó là, khi một người chơi rời khỏi một ô, cần có một thao tác nguyên tử (gọi hàm) để loại bỏ cả hai con trỏ, từ người chơi sang người chơi và người chơi xếp gạch cùng một lúc. Và tương tự như vậy khi người chơi đến trên một ô, thực hiện hai phép gán con trỏ với nhau. Điều này sẽ tiết kiệm cho bạn một số hỗn loạn tiềm năng trong đó các tài liệu tham khảo không đồng ý với nhau, tức là cái này tồn tại trong khi cái kia thì không.
Kỹ sư

0

Làm thế nào để bạn xử lý va chạm với bản đồ? Nếu bạn có lớp va chạm, trước tiên, một cách rất dễ dàng là tạo một danh sách các NPC có tọa độ cho biết chúng đang ở trên ô nào và sau đó lặp qua danh sách đó và đánh dấu ô xếp lớp va chạm bên dưới NPC là ô xếp. Theo cách đó, các va chạm với NPC sẽ được xử lý cùng lúc với phần còn lại của bản đồ. Tất nhiên, đó là nếu các NPC không di chuyển ...

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.