클라이언트에서 현재 최고로 높은 스코어의 정보가 필요하여서 이를 처리하려고 했지만... 슬프게도 서버가 실행되어 URL에 정보를 실는 속도가 기존의 레디스 클라이언트를 불러오는 속도보다 더 빨라서 이를 제대로 처리하지 못하고 있었다.
이를 검색하고 생각해보면서 굳이 이 레디스 클라이언트를 실을 필요가 없이 그 밑에 있는 redisClient.v4를 담고있는 redisCli를 보내면 된다고 생각을 하게 되었다.
이런식으로 호출을 하게 됨으로써 서버가 불려서 레디스가 연결이 되고 난 후에 해당 레디스의 정보를 얻어서 서버에 보내게 되었다.
이렇게 연결된 레디스 정보는 기존에 records.js를 얻고 있던 newGameAssets 클래스에서 얻어서 처리하게 된다.
이렇게 레디스 정보를 불러올 수 있었다.
추가로 레디스 정보를 불러오면서 async await를 쓴 이유는 비동기로 불러오지 않았을 때 정보를 먼저 읽지 못하는 경우가 생겨버렸기 때문이다.
일반적으로 html에서 GIF를 등록한다는 것은 superGIF와 같은 API들을 사용하면 되겠지만 이는 html 파일에 직접 등록할 때의 이야기이다.
현재 기본적으로 되어있는 공룡의 경우에는 코드 레벨에서 호출 및 처리되고 있는 경우였으므로 우리는 html에 등록하는 것이 아닌 코드 레벨에서 이를 호출 및 처리해야만 했다.
어느정도 검색을 동반해본 결과 gif 파일을 프레임 별로 사진을 나누어 이를 images 배열에 등록한 후 연속적으로 출력하면 된다는 결론이 나왔다.
이것은 노가다였다...
이런식으로 하얀색으로 이미지가 처리되어 있던 달리기 gif를 사용할려고하니 캐릭터의 내부조차 흰 배경색이라서 배경화면을 지워주는 곳에서 선을 제외한 모든 것이 다 투명하게 바뀌어버렸기 때문에 나는 이를 직접 메디방으로 지워버렸다.
전부 다 깔끔하게 처리하는 것은 어려웠기에 위의 이미지 2개와 마찬가지로 깔끔하지 못하게 남아버린 부분이 있지만 달리고 있다고 생각하면 이정도 수준은 괜찮을 것이라고 생각했다.(실제로도 괜찮았다.)
이렇게 처리한 것들을 이제 코드 레벨에서 직접 다뤄볼 차례이다.
먼저 이런식으로 꽤나 하드 코딩으로 불러오게 되는 부분이 있는데,
이렇게 접근한 이유 중에 하나는 먼저 서버레벨로 내려가게 되면 서버에서 직접 클라이언트에 정보를 찾아서 이를 또다시 클라이언트에 보내주어야하는 복잡하기도하고 파일을 읽고 보내는 동안에 시간이 걸리게 될 수도 있을 것 같아서 직접 클라이언트에서 전부다 불러오도록 처리를 했다. (fs을 써서 해당 폴더에 몇개의 파일이 있는지 알 수 있다면 좀 더 쉽게 처리할 수 있지 않았을까 라고 생각한다.)
이렇게 불러온 이미지 파일들을 이제 직접 넣어주기만 하면 되는데 여기서 기존의 walkAnimationTimer는 음수로 계속 나아가는 값이었다.
그렇기에 이미지를 넣고 돌려보았을 때 우사인볼트도 이길만한 기세로 엄청난 속도를 내기 시작하기에... 이를 달리는 속도를 조정하고자 양수로 직접 처리하여 4로 나누어 떨어지는 것일 때만 애니메이션 변경을 허용하여 애니메이션 속도가 꽤나 조절되기는 했다.
게임을 진행하면서 게임을 시작,끝 또는 게임 내에 특수한 상태 이상을 불러일으키는 아이템을 먹을 시에 로그를 출력하고자 했다.
먼저 이 로그를 추가하기 위해서는 html에 태그가 필요했다.
이렇게 태그를 달았다면 id를 받아와서 처리하면 된다.
이런식으로 직접 내부에 넣는 방식으로 게임 상태를 표시하기로 했다.
아이템을 획득하였을 때 해당하는 스테이지보다 높은데서 얻을 수 있는 물건을 획득하였다면 부정적으로 획득을 한 것일 것이다.
아이템을 부정 획득했다면 랭킹에 등록하지 못하도록 아이디를 지워버리는 방식을 사용했다.
이렇게 지워둔 아이디는 record.handler.js에서 처리하여 자동으로 부정유저임을 처리하게 된다.
그렇기에 아이템을 획득 할 때 이를 처리하고자 했지만... 하다보니까 아이템을 먹었는데도 불구하고 로그가 계속 사라지는 것이다.
이를 확인해보니 return 문이 밖에 있더라...
이런식으로 수정을 함으로써 아이템의 부정획득은 막았다.
그렇지만 왠걸?..
스테이지가 종료가 되고 나서도 아이템만 그대로 남아있게 되더라...
기존에 구현되어 있던 아이템 리셋 기능을 추가하여 아이템도 리셋되게끔해서 에러가 뜨지 않도록 처리 했다.