간단한 블록 기반 퍼즐 게임을 만들고 있습니다.
게임 플레이는 게임 영역에서 움직이는 블록으로 구성되어 있으므로 사소한 물리 시뮬레이션입니다. 그러나 내 구현은 이상과는 거리가 멀고 더 잘 수행하는 방법에 대한 조언을 줄 수 있는지 궁금합니다.
많은 퍼즐 게임에서와 마찬가지로 코드를 게임 로직과 UI의 두 영역으로 나누었습니다.
- 게임 로직은 게임의 일반적인 규칙 (예 : 체스의 공식 규칙 시스템)을 담당합니다.
- UI는 게임 영역과 조각 (예 : 체스 판 및 조각)을 표시하고 애니메이션 (예 : 체스 조각의 애니메이션 움직임)을 담당합니다.
게임 로직은 게임 상태를 논리적 그리드로 나타내며, 여기서 각 유닛은 그리드에서 하나의 셀 너비 / 높이입니다. 너비 6의 그리드의 경우 경계와 충돌 할 때까지 너비 2의 블록을 네 번 이동할 수 있습니다.
UI는이 그리드를 가져 와서 논리 크기를 픽셀 크기로 변환하여 (즉, 상수를 곱하여) 그립니다. 그러나 게임에는 게임 로직이 거의 없기 때문에 내 게임 로직 레이어 [1]는 충돌 감지 외에는 할 일이 없습니다. 작동 방식은 다음과 같습니다.
- 플레이어가 조각을 드래그하기 시작합니다
- UI는 게임 로직에 해당 부분의 법적 이동 영역을 요청하고 플레이어가 해당 영역 내에서 드래그하도록합니다.
- 플레이어는 조각을 놓을 수 있습니다
- UI가 조각을 그리드에 스냅합니다 (올바른 논리적 위치에 있도록)
- UI는 게임 로직에 새로운 논리적 위치를 알려줍니다 (돌연변이 방법을 통해)
나는 그것에 만족하지 않습니다.
- 내 게임 로직 레이어에 대한 단위 테스트를 작성하고 있지만 UI는 아닙니다. 모든 까다로운 코드는 UI에 있습니다. 조각이 다른 사람이나 경계와 충돌하는 것을 막고 그리드에 스냅합니다.
- UI가 게임 로직에 새로운 상태에 대해 알려주는 사실이 마음에 들지 않습니다.
movePieceLeft()
다른 게임과 마찬가지로 메소드 또는 이와 유사한 메소드를 호출하고 싶지만 그 접근 방식에 대해서는별로 멀지 않았습니다. 게임 로직은 UI에서 가능한 드래그 앤 스냅에 대해 아무것도 모릅니다.
가장 좋은 방법은 내 게임 로직 레이어를 없애고 대신 물리 레이어를 구현하는 것입니다. 나는 그것에 대해 몇 가지 질문이 있습니다.
- 이러한 물리 계층이 일반적입니까, 아니면 게임 논리 계층이이를 수행하는 것이 더 일반적인가요?
- 그리드 및 조각 끌기 코드에 스냅하는 것이 UI 또는 물리 계층에 속합니까?
- 그러한 물리 계층은 일반적으로 게임 크기와 같은 픽셀 크기 또는 어떤 종류의 논리 단위에서 작동합니까?
- 게임 코드베이스에서 이벤트 기반 충돌 감지를 한 번 보았습니다. 즉, 플레이어가 조각을 드래그하면 UI가이를 순종적으로 렌더링하고 물리 시스템에 알리고 물리 시스템은 onCollision () 메서드를 호출합니다. 충돌이 감지되면 조각에. 더 일반적인 것은 무엇입니까? 이 접근 또는 법적인 운동 영역을 먼저 요청?
[1] 레이어 는 아마도 내가 의미하는 바에 맞는 단어는 아니지만 각 레이어가 여러 클래스로 구성 될 수 있기 때문에 서브 시스템이 과장되어 클래스 가 잘못 안내됩니다.