오늘 구현해야 할 부분으로 필수 과제에 해당한다.
해당 기능을 구현하기 위해 테이블을 약간 수정해서, item_id를 배열로 갖도록 했다.
이렇게 하면 stage_id에 해당하는 등장 item_id를 명시하기 쉬워진다.
이제 아이템을 생성하는 ItemController 으로 가서, 해당 부분을 수정하면 된다.
기존에는 스테이지에 관계 없이 Item.json 에 있는 데이터중 랜덤하게 생성이 됐었다.
json을 import 하는 과정에서 1차로 헤맸다.
수정한 아이템 생성 부분 !
첫 번째 문제
스테이지는 Score.js 에서 변화하고 관리됐기 때문에, 거기서 사용한 stageId 를 가져와야한다.
그렇다면, createItem을 호출하는 부분을 찾아보자.
바로 아래에 있었다.
위 이미지에는 해결 방법으로 선택한 score 를 운반하는 모습이 나타나있다.
그러면, update를 호출하는 부분을 찾아보자.
index.js
클라이언트의 초기 세팅에 관한내용이 있는 index.js 에서 찾아볼 수 있었다.
이 index.js 윗부분에서는,
setScreen 이라는 함수가 호출이 되고있고, (기본 canvus의 범위를 지정하는듯 하다)
또, 그 내부에서 호출하는 createSprites 함수 에서
거의 모든 Class 객체를 생성하는 관경을 목격할 수 있다.
그렇다면 ,
위의 부분은,
gameLoop 함수 내에 있고,
해당 함수의 호출은 index.js 에서 가장 마지막에 이뤄지기 때문에,
score 객체는 이미 생성된지 오래라는 말이 된다.
따라서, 이미 이미지에 표시되어있는 것 처럼,
score가 생성된 score 를 ItemController 에서 참조할 수 있도록 운반해 주었다.
잘 운반했다면, score가 알려준 stage 와 일치하는 값을 item_unlock.json 에서 찾아서
해당 스테이지에 포함되는 item_id 의 배열 중 랜덤하게 하나를 뽑도록 만들었다.
ID 가 들어갈 위치에 getRandomItem 으로 뽑은 숫자를 가져오면 된다.
두 번째 문제
여기에서, 아이템 종류 별 획득 스테이지 검증 부분이다.
검증 로직 자체는 만들기 어려운것이 아니다.
문제는, 아이템이 생성될 당시에 스테이지 와 획득할 당시 스테이지가 상이할 수 있다는 점..
1스테이지 에서 생성된 아이템인데, 먹을 때는 2스테이지가 되어있을 수 있다는 말이다.
따라서, payload 가 아이템을 획득하는 시점의 stage 를 가지고 있다면,
검증하는 과정에서 문제가 생길 수 있다.
(1스테이지에서만 나오는 아이템이 1스테이지에서 생성됨
-> 먹을 때 쯤, 2스테이지가 되었음
-> 2스테이지에서는 나올 수 없는 아이템을 획득함 )
해결법?
payload 가 아이템 획득 시점이 아닌, 아이템 생성 시점의 id를 뱉도록 만들어 주면 된다.
문제는... 어떻게?
Score 가 갖는 stage 는 즉각 변경이 되기 때문에, 해당값을 payload로 보내면
아이템을 획득하는 시점의 stage 에 해당하게된다.
생성된 아이템으로부터 각각 생성된 시점의 stage를 얻어오려면,
item 자체가 stage 를 갖게 할 수 밖에?
Item Class 가 stage 를 갖도록 만들어 주었다 .
위와 비슷한 방법으로 아이템 객체의 stage 를 가져와서
currentStage 에 보내주면, 이제 아이템은 생성된 시점의 stageId를 갖고있고,
그 stageId를 통해 검증을 진행하게 된다.
'내일배움캠프' 카테고리의 다른 글
24.10.04TIL 리얼타임 과제 (0) | 2024.10.04 |
---|---|
24.10.02 TIL 리얼타임 과제 (0) | 2024.10.02 |
24.09.30 TIL 리얼타임 과제 (0) | 2024.09.30 |
24.09.27 TIL 웹 소켓 입문 (0) | 2024.09.27 |
24.09.26 TIL 웹 소켓 입문 (0) | 2024.09.26 |