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


11

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

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

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

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

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

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


4
당신 WorldItem은 당신과 분리 된 것을 가질 수 InventoryItem없습니까? (아마이 WorldItemInventoryItem획득시 플레이어의 인벤토리에 넣어 것 템플릿).
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.