Làm thế nào để tạo ra một hệ thống kiểm kê thế giới người chơi?


11

Tôi đang gặp vấn đề về việc cố gắng triển khai hệ thống kiểm kê trong XNA (không thực sự quan trọng, có thể là bất kỳ nền tảng nào) nhưng cho đến nay. Đây là vấn đề tôi đang cố gắng quấn đầu:

Làm thế nào tôi có thể lấy một vật phẩm từ thế giới (nghĩ rằng khi bạn giết một con quái vật, nó làm rơi áo giáp) và đưa nó vào kho của người chơi của tôi?

Nếu kho đồ chỉ là một danh sách các vật phẩm, về mặt kỹ thuật, làm thế nào tôi có thể đưa Thanh kiếm thép từ thế giới vào kho đồ của người chơi mà không cần một lớp làm nhiều hơn một thứ?

Tôi hiện có một cấu trúc vật phẩm, chứa một giá trị hex duy nhất, đếm xem có bao nhiêu vật phẩm (đối với ngăn xếp, như mũi tên) và Texture để hiển thị trong kho và một số thuộc tính không quan trọng khác (tên, mô tả, v.v.) .

Sẽ là một thiết kế tồi nếu tôi phải sửa đổi lớp vật phẩm hiện có của mình để giữ vị trí thế giới, cùng với việc phát hiện va chạm (không muốn vật phẩm rơi xuống trái đất).

Cảm ơn cho bất kỳ cân nhắc!


4
Bạn không thể có một WorldItemcái riêng biệt với bạn InventoryItem? (Có thể WorldItemcó một InventoryItemmẫu được đưa vào hàng tồn kho của người chơi khi được bế lên).
George Duckett

1
@GeorgeDuckett Bạn nên đưa ra câu trả lời này .. có lẽ nên có một số phương pháp trong Inventoryđó có một WorldItemvà thêm nó dưới dạng InventoryItem. Vì vậy, nó cũng có thể xử lý các trường hợp các mục cần xếp chồng (ví dụ: Mũi tên).
bummzack

@bummzack: Xong rồi.
George Duckett

Câu trả lời:


17

Cách tiếp cận tôi sẽ làm là có 2 cấu trúc (hoặc các lớp) khác nhau. WorldItemInventoryItem.

Sau đó, bạn có thể thêm InventoryItemmột tài sản / lĩnh vực của mình WorldItem, đó là thứ được đặt trong kho của người chơi khi vật phẩm thế giới được chọn.

Bạn muốn có một phương thức ở đâu đó (trên lớp người chơi hoặc lớp vật phẩm) xử lý việc thêm một vật phẩm tồn kho vào kho của người chơi, để xử lý việc xếp chồng như vật phẩm.


Tôi thực sự thích câu trả lời này, cảm ơn bạn rất nhiều, nó rất có ý nghĩa! Một suy nghĩ cuối cùng, giả sử người đó muốn bỏ một vật phẩm, liệu hàng tồn kho cũng cần một WorldItem trong đó chứ?
Ross

Nếu cần 2 chiều, tôi muốn có một lớp 'tra cứu' riêng biệt lưu trữ các cặp vật phẩm thế giới và vật phẩm tồn kho. Sau đó, bạn sẽ sử dụng cái đó để tra cứu cái này, cái kia.
George Duckett

Ohhh tốt đẹp, không bao giờ nghĩ về điều đó. Đó là một ý tưởng rất thú vị. Vì tất cả các mặt hàng đều cụ thể, nên có ý nghĩa tìm kiếm chúng.
Ross

2
Tôi sẽ phá hủy WorldItem khi nó được nhặt và tạo một cái mới khi vật phẩm bị rơi.
Simon Richter

Đã đồng ý. Không có nghĩa là ngụ ý khác.
George Duckett

0

Như đã đề cập trước khi chia thành nhiều lớp hoặc mảng sẽ là lựa chọn tốt nhất của bạn. Tôi sẽ tạo 3 lớp, Thế giới, Người chơi và Vật phẩm Lớp thế giới sẽ có Danh sách Thế giới trong đó, lớp Người chơi cũng được đặt tên là Danh sách kho Khi người chơi nhặt một vật phẩm, bạn di chuyển nó từ danh sách trong Thế giới lớp vào danh sách trong lớp Player.

Trong vòng rút thăm của trò chơi, bạn có thể tạo một vòng lặp rút tất cả các Vật phẩm trong danh sách WorldItems ra màn hình, nhưng tất nhiên sẽ bỏ qua danh sách Khoảng không quảng cáo trên đối tượng người chơi.


Phương thức hiện tại của tôi bây giờ là tôi có một lớp WorldItem gói gọn một InventoryItem, cả hai đều liên quan đến cùng một mục. Trong phương pháp Cập nhật của trò chơi, tôi quay vòng qua tất cả các vật phẩm trên thế giới và kiểm tra ranh giới va chạm với người chơi. Nếu hai người va chạm, WorldItem sẽ bị xóa khỏi danh sách WorldItem và được đưa vào kho của người chơi (đó là Danh sách <> của InventoryItem)
Ross
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.