접이식 기기를 휴대용 게임기처럼 펼치기
접이식 기기의 넓은 화면에 맞춰 게임 화면과 조작 버튼을 위아래로 나눴습니다. 닌텐도 DS처럼 터치스크린을 버튼 사이에 배치하고, 펼쳤을 때의 버튼 위치도 따로 저장합니다.
접이식 기기를 펼치면 일반 스마트폰과는 화면 비율이 크게 달라집니다. 기존 N-EMU는 창이 가로로 넓은지 세로로 긴지만 보고 배치를 선택했습니다. 하지만 정사각형에 가까운 안쪽 화면에는 어느 쪽도 잘 맞지 않아, 펼친 상태에 맞는 배치를 따로 만들었습니다.
배치는 닌텐도 DS를 참고했습니다. 위쪽에는 게임 화면을, 아래쪽에는 조작 버튼을 놓는 구조입니다. 접히는 방향과 관계없이 화면을 위아래로 나누고, 반쯤 접어 세웠을 때는 접히는 위치에 맞춰 두 영역의 경계를 조정합니다.
L과 R은 두 영역의 경계 바로 아래에, 십자키와 버튼은 아래쪽 영역의 중앙에, Select와 Start는 맨 아래에 배치했습니다. 닌텐도 DS의 터치스크린은 아래쪽 버튼 사이에 4:3 비율로 표시합니다. 가로로 펼쳤을 때는 아래쪽 공간의 높이에 맞춰 터치스크린을 줄이되, 두 화면을 위쪽에 함께 표시할 때보다 작아지지 않도록 했습니다.
펼친 상태에서 옮긴 버튼 위치는 일반 세로 화면이나 가로 화면과 별도로 저장합니다. 기존 저장 형식에 펼친 화면용 항목을 추가해, 이전 버전에서도 세로 화면과 가로 화면의 배치를 읽을 수 있도록 했습니다. 다만 이전 버전은 펼친 화면의 배치를 읽지 못하며, 그 버전에서 다시 저장하면 버튼 배치 정보가 사라질 수 있습니다.
접히는 위치와 상태는 운영체제가 제공하는 정보를 사용합니다. Android에서는 Jetpack WindowManager를, iOS 27.1 SDK로 빌드한 앱에서는 iOS의 접힘 정보를 읽습니다. 해당 정보를 받을 수 없는 iOS 환경에서는 창의 가로와 세로 크기 분류로 펼친 상태를 판단합니다. 배치 계산은 자동 테스트로 확인했고, iOS 시뮬레이터와 Android 에뮬레이터에서도 화면을 확인했습니다. Android에서는 테스트용 접힘 정보를 사용했으며, 실제 기기 검증은 아직 남아 있습니다.
기기를 접거나 펼쳐도 게임은 계속 실행됩니다. 다만 누르고 있던 버튼의 입력은 해제합니다. 화면이 바뀌면서 버튼 위치도 달라지므로, 이전 입력이 눌린 상태로 남는 문제를 막기 위해서입니다.
함께 읽을 개발 이야기
- 개발 이야기v1.1.1클로즈 베타 테스트
책처럼 펼친 기기에서 닌텐도 DS 화면을 넓힌 이유
접이식 기기를 책처럼 들면 기존 배치에서는 닌텐도 DS의 터치스크린이 작아졌습니다. 두 화면을 가운데로 모으고 버튼을 양옆에 둬 터치할 공간을 넓혔습니다.
- 개발 이야기v1.0.8클로즈 베타 테스트
컨트롤러를 연결했을 때 게임 화면을 넓힌 이유
터치 버튼이 사라져도 게임 화면은 기존 크기로 남아 있었습니다. 버튼이 차지하던 공간을 활용하도록 바꾸고, 닌텐도 DS는 조작 방식에 맞춰 두 화면을 배치하도록 개선했습니다.
- 개발 이야기v0.2.0초기 개발
여러 게임기를 한 앱에 담기
기종이 달라도 같은 보관함에서 게임을 고르고 저장 데이터를 관리할 수 있도록 여러 에뮬레이터 코어를 연결했습니다.