전 세계 플레이어 인벤토리 시스템을 만드는 방법은 무엇입니까?


11

XNA 내에서 인벤토리 시스템을 구현하려는 문제에 직면하고 있습니다 (실제로 중요하지는 않지만 모든 플랫폼 일 수 있음). 여기 내 머리를 감싸려고하는 문제가 있습니다.

어떻게 세상에서 아이템을 얻을 수 있습니까 (몬스터를 죽일 때 갑옷을 떨어 뜨린다 고 생각하면 어떻게됩니까?)

인벤토리가 단지 아이템 목록 일 경우, 기술적으로 클래스가 두 가지 이상의 작업을 수행하지 않고 어떻게 세계에서 스틸 소드를 플레이어의 인벤토리로 가져올 수 있습니까?

현재 고유 한 16 진수 값, 항목 수 (화살표와 같은 스택 가능) 수 및 인벤토리 내 렌더링을위한 텍스처 수 및 기타 중요하지 않은 속성 (이름, 설명 등)을 포함하는 item struct가 있습니다. .

충돌 탐지와 함께 월드 위치를 수용하기 위해 기존 아이템 클래스를 수정해야하는 경우 나쁜 디자인이 될 것입니다 (아이템이 지구를 통해 떨어지고 싶지 않음).

고려해 주셔서 감사합니다!


4
당신 WorldItem은 당신과 분리 된 것을 가질 수 InventoryItem없습니까? (아마이 WorldItem가 InventoryItem획득시 플레이어의 인벤토리에 넣어 것 템플릿).
— George Duckett

1
당신이 대답해야 @GeorgeDuckett .. 아마도 몇 가지 방법이 있어야한다 Inventory소요 그 WorldItem와 같이 추가합니다 InventoryItem. 또한 물품을 쌓아야하는 경우도 처리 할 수 ​​있습니다 (예 : 화살표).
— bummzack

@bummzack : 완료.
— George Duckett

답변:


17

내가 갈 접근법은 2 개의 다른 구조체 (또는 클래스)를 갖는 것입니다. WorldItem그리고 InventoryItem.

그런 다음 월드 아이템을 가져올 때 플레이어의 인벤토리에 배치되는 InventoryItem속성 / 필드로 속성 을 추가 할 수 있습니다 WorldItem.

플레이어의 인벤토리에 인벤토리 아이템을 추가하는 것을 처리하는 어딘가 (플레이어 클래스 또는 아이템 클래스의) 메소드가 필요합니다.


나는이 답변을 정말 좋아합니다. 정말 감사합니다. 마지막 생각, 그 사람이 아이템을 떨어 뜨리고 싶다고하자. 인벤토리 아이템도 그 안에 월드 아이템이 필요할까요?
— Ross

양방향이어야하는 경우 세계 항목과 인벤토리 항목 쌍을 저장하는 별도의 '검색'클래스를 갖고 싶어합니다. 그런 다음이를 사용하여 다른 것을 찾으십시오.
— George Duckett

오, 좋은 생각은 없었어요 그것은 매우 흥미로운 아이디어입니다. 모든 항목이 구체적이므로 해당 항목을 찾아 보는 것이 좋습니다.
— Ross

2
WorldItem을 집어들 때 파괴하고 아이템을 떨어 뜨릴 때 새로운 아이템을 만듭니다.
— Simon Richter

동의했다. 달리 암시한다는 의미는 아닙니다.
— George Duckett

0

앞에서 언급했듯이 여러 클래스 또는 배열로 나누는 것이 가장 좋습니다. 월드, 플레이어, 아이템 3 개의 클래스를 만들었습니다. 월드 클래스에는 List 월드 아이템이 포함되어 있습니다. 플레이어 클래스도 있지만 목록 인벤토리라는 이름입니다. Player 클래스의 목록에

게임의 드로우 루프에서 WorldItems 목록의 모든 항목을 화면에 그리는 루프를 만들 수 있지만, 물론 플레이어 오브젝트의 인벤토리 목록은 무시합니다.


현재 내 방법은 동일한 항목과 관련된 InventoryItem을 캡슐화하는 WorldItem 클래스를 가지고 있다는 것입니다. 게임의 업데이트 방법에서는 모든 월드 아이템을 순환하고 플레이어와의 충돌 경계를 테스트합니다. 두 항목이 충돌하면 WorldItem이 WorldItem 목록에서 제거되고 플레이어의 인벤토리 (InventoryItem의 List <>)에 추가됩니다.
— Ross
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.