이번 주차의 과제는 웹소켓을 사용하여 리얼타임 러닝 게임을 만드는 것이었다. 다른 주차의 과제와는 다르게 지급된 강의를 보며 뼈대를 만들고, 뼈대에서 추가하는 것이 과제였다.
약 10일 이상의 과제 기간이 있었기에, 저번 개인 과제에서 벼락치기로 수명을 갉아먹었기에 이번 만큼은 꼭 여유롭게 하기로 다짐했었다.
인간은 망각의 동물이던가...
돌이켜 생각해보면 미루기 위해 농땡이를 부리진 않았으나(과제 주간에 꽂혀 있는 관심사가 있어서 여기에 할애한 듯 하다), 어느샌가 과제 제출까지 2일이 남은 상황...
이번에도 벼락치기로 진행했으나, 저번과 달리 웹소켓은 벼락치기로 해결될 문제가 아니었다. 우선 강의 내용을 따라 진행하였으나, 그것은 나의 지식으로 코딩을 한 것이 아닌 따라 한 것이었기에 과제를 하려 폴더를 열자마자 당황했다.
어느 부분이 어디에 연결되어 있는지 전혀 모르겠던 것...!
우선은 주어진 과제 내용 안에서 최대한 구현해보려 노력했고, 다음에 개인과제가 또 주어진다면 꼭 미리 할 것이다!
본래 블로그 내에 사설을 길게 넣진 않으나, 이번엔 각오를 다지기 위해 사설을 추가해 본다...⭐️
Score라는 클래스가 제대로 작동하지 않았다. gameAssets라는 중요한 데이터가 null로 나와서, 스테이지 정보를 불러오지 못했다.Socket.js라는 파일에서 서버에서 데이터를 받아오는 타이밍과 Score 클래스를 생성하는 타이밍이 맞지 않은 것으로 보였다. // 문제가 시작된 부분
import { gameAssets } from './Socket.js';
class Score {
constructor() {
// gameAssets가 아직 로드되지 않았을 수도 있다.
if (gameAssets?.stages?.data) {
this.stages = gameAssets.stages.data;
}
}
}
Socket.js 수정socket.on('assets', (data) => {
gameAssets = data;
console.log('gameAssets: ', gameAssets);
// 데이터 로드가 끝난 후 초기화 함수 호출
if (window.onAssetsLoaded) {
window.onAssetsLoaded(gameAssets);
}
});
export { gameAssets };
index.js 수정// Socket.js에서 데이터를 받을 때 실행될 콜백
let onAssetsLoaded = null;
function initGame(assets) {
setScreen();
window.addEventListener('resize', setScreen);
if (screen.orientation) {
screen.orientation.addEventListener('change', setScreen);
}
requestAnimationFrame(gameLoop);
window.addEventListener('keyup', reset, { once: true });
}
// Socket.js에서 호출하는 콜백 함수 설정
onAssetsLoaded = (assets) => {
if (assets?.stages?.data) {
initGame(assets);
}
};
// Socket.js에 콜백 등록
window.onAssetsLoaded = onAssetsLoaded;