2024. 10. 2. 22:13ㆍ[Node.js_6기 본캠프 TIL]
🗺️ 아이템에 맞는 점수 부여하기
item.json 파일에 정의한 데이터를 사용하기 위해, 에셋 정보를 불러오는 코드를 활용하고자 했다.
export const loadGameAssets = async () => {
try {
const [stages, items, itemUnlocks] = await Promise.all([
readFileAsync('stage.json'),
readFileAsync('item.json'),
readFileAsync('item_unlock.json'),
]);
gameAssets = { stages, items, itemUnlocks };
return gameAssets;
} catch (error) {
throw new Error('Failed to load game assets: ' + error.message);
}
};
export const getGameAssets = () => {
return gameAssets;
};
다른 파일에서도 해당 코드를 활용하고 있기 때문에, Score.js 파일에도 적용할 수 있으리라 믿었다. 그러나 import만 해도 게임이 먹통이 되는 현상이 발생했다.
공룡도 선인장도 없이 깨끗하게 청소된 하얀 상자만 둥둥 떠 있는 모습을 보며, 뭔가 단단히 잘못 되었음을 알 수 있었다. 아이템을 먹으면 점수를 올려주는 getItem() 함수를 한참 뜯어본 결과, 매개변수로 사용되고 있는 itemId가 실제 인게임에서 먹은 아이템의 id 값으로 자동 치환된다는 것을 알 수 있었다.
이 값을 사용해서 json에 있는 item을 조회하고, score를 반환해주는 코드를 짜야할 것 같아서 또 한참 테스트를 반복했다. 그러던 중 stage를 넘겨주는 update() 함수의 구조를 다시 보게 되었다.
update(deltaTime) {
this.score += deltaTime * 0.001;
if (Math.floor(this.score) === 100 && this.stageChange) {
this.stageChange = false;
sendEvent(11, { currentStage: 1000, targetStage: 1001 });
}
}
기본적으로 제공된 코드를 보고, 마지막 단계까지 넘어갈 수 있게 가공까지 해놓고... 같은 방식으로 매핑할 수 있다는 생각을 못하고 있었던 것이다.
item의 id값은 바로 받아올 수 있으니, if 문으로 각 id 값에 맞는 score 값을 매핑해주기로 했다.
getItem(itemId) {
if (itemId === 1) {
this.score += 10;
}
if (itemId === 2) {
this.score += 20;
}
if (itemId === 3) {
this.score += 40;
}
if (itemId === 4) {
this.score += 80;
}
if (itemId === 5) {
this.score += 160;
}
if (itemId === 6) {
this.score += 320;
}
if (itemId === 7) {
this.score += 640;
}
}
테스트 결과, 각 아이템에 맞는 점수가 추가되는 것을 확인할 수 있었다. 하드코딩을 해버린 것 같아, score 값을 매핑하는 다른 좋은 방법이 있을지는 다시 한번 더 고민해봐야 할 것 같다.
'[Node.js_6기 본캠프 TIL]' 카테고리의 다른 글
[CH 4 타워 디펜스 게임 프로젝트] 트러블슈팅 1014 (0) | 2024.10.15 |
---|---|
[CH 4 리얼 타임 과제] 트러블슈팅 - 1007 (0) | 2024.10.07 |
[CH 4 리얼 타임 과제] 트러블슈팅 - 1001 (3) | 2024.10.01 |
socket.io 사용해보기 (1) | 2024.09.30 |
[개념정리] 웹소켓이란? (0) | 2024.09.27 |