-
[개발] #01 스테이지 정보 업데이트활동/Arkhive 2023. 3. 23. 23:20

<Fig. 01> 
<Fig. 02> 
<Fig. 03> 스테이지 정보 화면 업데이트 완료했습니다.
단, 적 등장 정보는 추가하지 않았습니다.
그 이유는, 적 정보가 스테이지 별 json 정보로 저장되어 있는데, 그 json 파일이 너무 많아서 시간적 여유가 되지 않았기에 생략했습니다.
양해 부탁드립니다.
또한, 현재 아이템의 목록은 날것의 데이터 형태로만 출력하고 있는데,
추후에 아이템 부분의 개발이 완료되면 순차적으로 디자인 할 예정입니다.
아래의 내용은 개발에 대한 내용입니다.
소스 데이터
위의 정보는 아래의 데이터를 기반으로 출력됩니다.
https://github.com/Kengxxiao/ArknightsGameData/blob/master/ko_KR/gamedata/excel/activity_table.json
https://github.com/Kengxxiao/ArknightsGameData/blob/master/ko_KR/gamedata/excel/zone_table.json
https://github.com/Kengxxiao/ArknightsGameData/blob/master/ko_KR/gamedata/excel/stage_table.json
구현 방법
데이터가 분산되어 있어 아래와 같은 작업을 거쳐 분류, 그룹화 했습니다.
stage_table에 있는 스테이지 데이터를zone에 따라 분류.a.
zone이MAINLINE인 경우, 메인 스테이지 취급.b.
zone이ACTIVITY인 경우, 이벤트 스테이지 취급.여기서 메인 스테이지의 경우에는
zone_table에 이름이 기재되어 있지만,이벤트 스테이지의 경우에는 이벤트 이름이 아닌, 말 그대로
zone의 이름이 기재되어 있습니다.따라서 이벤트의 이름을 받아오기 위해
activity_table의 데이터를 활용하게 됩니다.하지만,
activity의 key는zone_table의zoneID의 값으로는 받아올 수 없습니다.따라서
acrtivity_table의zoneToActivity의 데이터를 활용하여zoneID를activity 키값으로 변환하는 과정이 필요합니다.위 과정을 거치면 데이터를 이벤트(챕터)이름 \ Zone \ 스테이지로 그룹화 할 수 있습니다.
하지만 여기서 문제점이 2가지 발생했습니다.
TroubleShooting
1. 로딩 시간 최적화
첫 번째 문제점은 불러와야 하는 스테이지의 수가 너무 많다는 것입니다.
이 스테이지를 한 번에 모두 로드할 경우 로딩시간이 지나치게 길어지는 문제가 발생했습니다.
따라서 이 경우에는 애플리케이션을 업데이트를 할 때, 동시에 스테이지를
zone과 함께 인덱싱하도록 구현했습니다.그렇게 하면 각각의
zone 키에는stage id의 배열이 인덱싱되어특정 zone에 해당하는stage의 리스트를 빠르게 불러올 수 있게 되었습니다.그 후, 스테이지 리스트 화면에서는 모든 스테이지를 로딩하는 대신
activity 이름을 key값으로 받는 map을 생성하고내부에
zone의 리스트를 담을zones배열을 만들어 처리하였습니다.따라서 처음 로딩시에는
activity의 리스트와 그에 맞는zone의 배열만 로드하게 되고,특정 이벤트, 챕터를 터치하여 오픈했을 때
zones 배열에 담긴zone을 참고해미리 인덱싱 해놓았던 데이터를 바탕으로 스테이지를 로드하게 됩니다.로딩 시점을 분산시킴으로서 로딩 시간을 절반 이하로 줄일 수 있었습니다.
2. 재개방 이벤트 중복 이슈
두 번째 문제점은 재개방 이벤트가 존재하는 경우,
stage_table의zoneID의 값이 재개방 버전의zoneID로 설정이 되어 있습니다.즉,
마리아 니어 (재개방)에는 스테이지가 존재하지만,마리아 니어에는 스테이지가 존재하지 않는 문제가 발생합니다.저는 첫 이벤트 출시 순서로 정렬하고 싶었기에 이 문제를 아래와 같이 해결했습니다.
재개방 버전의 경우에는
isReplicate의 값이true로 설정되어 있습니다.따라서
isReplicate의 값이true인 activity의zones 배열을(재개방)을 제외한 이름과 같은activity의 zones 배열로 복사를 하고,(재개방)이 붙은 activity는제거하는 방식으로 처리했습니다.ToDo
우선 아이템 관련 부분을 구현하고 난 뒤 아래의 스테이지도 추가 구현할 예정입니다.
- 요일별 파밍 스테이지
- 섬멸전
- 보안 파견
참고로 위에서 언급했지만, 적 정보는 분리된 json 파일이 너무 많아서 개발 우선순위를 가장 맨 뒤로 미뤄둔 상태입니다.
하지만, 만약 하게 된다면 아래의 기능도 추가로 구현 가능하게 됩니다.
- 적 정보
- 스테이지 타일(맵)
- 적 웨이브 정보
+ 로그라이크 (사실 로그라이크는 바로 구현할 수 있지만, 제공하는 정보의 가치가 없어 제외했습니다)
'활동 > Arkhive' 카테고리의 다른 글
[개발] #04 다크모드, 즐겨찾기 업데이트 (0) 2023.08.24 [개발] #03 richText(+@) 업데이트 (0) 2023.08.22 [개발] #02 아이템 정보 업데이트 (0) 2023.08.01 [계획] 230618 - 여름방학 개발 계획 (3) 2023.06.18 [개발] #00 Arkhive 프로젝트 개요 (0) 2023.03.05