오늘 구현해야 할 부분으로 필수 과제에 해당한다.

 

item_unlock.json

해당 기능을 구현하기 위해 테이블을 약간 수정해서,  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 으로 뽑은 숫자를 가져오면 된다.

 

 

 

두 번째 문제 

 

여기에서, 아이템 종류 별 획득 스테이지 검증   부분이다.

 

 

 

검증 로직 자체는 만들기 어려운것이 아니다. 

문제는, 아이템이 생성될 당시에 스테이지 와 획득할 당시 스테이지가 상이할 수 있다는 점..

 

먹을 때 쯤이면 2스테이지가 된다.

 

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

+ Recent posts