갬쿠
개미 개발
갬쿠
전체 방문자
오늘
어제
  • ALL (137)
    • React (20)
    • JS & CSS & HTML (29)
    • Algorithm (62)
    • 웹 보안 (11)
    • 달리는 까까: 쿠키런 팬게임 (10)
    • Python (0)
    • 기타 (5)
    • 비공개 플젝 (0)

블로그 메뉴

  • GitHub
  • 방명록
  • 관리자 메뉴

공지사항

인기 글

태그

  • 게임
  • EventListener
  • 백준
  • 크롬 공룡 게임
  • HTML
  • node.js
  • 쿠키런 팬게임
  • 리액트
  • 쿠키런 모작
  • useReducer
  • 모의 해킹
  • useState
  • 쿠키런
  • transform
  • 게임 개발
  • 크롬 공룡게임
  • 객체
  • BEAKJOON
  • Baekjoon
  • Programmers
  • JavaScript
  • Object
  • useEffect
  • js
  • Best of the Best
  • Python
  • CSS
  • 달리는 까까
  • REACT
  • SQL Injection

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갬쿠

개미 개발

[달리는 까까] 점프, 슬라이드로 장애물 피하기
달리는 까까: 쿠키런 팬게임

[달리는 까까] 점프, 슬라이드로 장애물 피하기

2022. 5. 23. 23:19
  • keyMotion

쿠키 클래스에는 키눌림에 반응하도록 하는 메서드 keyMotion()이 있다. 이 메서드는 game.js의 renderGame에서 무한히 호출됨으로써 딜레이 없이 키눌림에 즉각 반응하도록 했다.

  keyMotion() {
    if (!gameProp.paused && !gameProp.gameOver && !gameProp.gameClear) {
      // 슬라이드
      if (this.jumpState === 0 && key.keyDown["slide"]) {
        this.el.classList.add("slide");
      }
      if (!key.keyDown["slide"]) {
        this.el.classList.remove("slide");
      }

      //점프
      if (this.jumpState > 0) {
        //jumpState = 1 or 2 or 3일 때

        //점프 타임 만료 시 내려오기
        if (this.jumpTimer >= this.jumpTime) {
          // debugger;
          this.el.classList.remove("double");
          this.el.classList.add("down");

          if (this.movey < 0) {
            // 땅에 닿기 전까지 내려오기
            this.movey += this.jumpSpeed;
          } else if (this.movey === 0) {
            //다 내려오면 점프 상태 초기화, 타이머 초기화
            this.el.classList.remove("jump");
            this.el.classList.remove("down");

            this.jumpState = 0;
            this.jumpTimer = 0;
          }
        } else {
          //점프 타임 만료 전, 즉 점프 중일 때 위로 이동
          if (this.jumpState === 1) {
            this.el.classList.add("jump");
          }
          if (this.jumpState === 2) {
            this.el.classList.add("double");
            this.el.classList.remove("down");
          }
          this.movey -= this.jumpSpeed;
          this.jumpTimer++;
        }
      }
    }
  }

이 게임을 만들면서 제일 고생했던 부분이다.. 바로 점프와 이단점프ㅠㅠ

 

점프를 구현하는 원리는

jumpTime이 jumpTimer미만인 동안 프레임당 jumpSpeed만큼 movey 증가(화면 위쪽 기준이기 때문에 코드상에선 감소) -> jumpTimer 만료시 movey 바닥까지 감소

였는데, 문제는 점프 횟수였다.

 

완벽한 점프 구현을 위해선 다음과 같은 처리가 필요했다.

  • 달리는 중 점프 키를 누르면 1단 점프
  • 1단 점프 중 점프 키를 누르면 2단 점프
  • 2단 점프 중 어떤 키를 눌러도 변화 없음(3단, 4단 점프 등 안돼야 함) <- 이 부분이 문제: 무한 점프
  • 다음 스테이지 시작 시 점프 상태 초기화(점프 상태로 게임이 끝났을 경우) <- Stage 클래스에서 처리

 

이 문제를 해결하기 위해 현재 상태와 점프 가능 여부를 저장하는 jumpState라는 변수를 도입했다.

최종 점프 매커니즘은 다음과 같다.

  • jumpState

     0: 점프 가능(점프 안하는중)

     1:1단 점프중

     2: 2단 점프중(점프 불가능)

     3: 2단 점프중인데 또 눌렀을 때

 

  • 점프 키 눌렀을 때

     jumpState: 0->1, 1이상 -> 2 (윈도우 이벤트에서 완료)

 

  • keyMotion

     jumpState = 0일 경우

     달리기

     jumpState = 1일 경우
     점프 타이머 만료 전: 1단 점프
     점프 타이머 만료 후: 내려오기

     jumpState = 2일 결경우
     점프 타이머 만료 전: 2단 점프
     점프 타이머 만료 후: 내려오기

     jumpState 1 or 2면 점프타이머 ++ (2면 윈도우이벤트에서 타이머 초기화)

 

슬라이드 키가 눌리면 쿠키 클래스에 slide 클래스를 추가한다. 점프 중 슬라이드를 눌렀을 경우에는 반응하지 않는다.

 

  • 장애물 추가

Obstacle 객체는 자신의 위치와 데미지, className(=장애물 종류)를 가진다.

class Obstacle {
  constructor(x, y, damage, className) {
		...
  }
	...
}

 

쿠키와 장애물의 충돌은 쿠키와 젤리의 충돌을 체크할 때와 같은 방식으로 구현했다.

쿠키가 장애물에 충돌하면 cookie의 crashed가 true로 변해 1초간은 추가 피해를 받지 않으며 장애물이 가진 데미지만큼 체력이 깎인다. 체력이 0 이하로 내려가면 쿠키가 죽고 게임이 끝난다.

 


🔻모든 코드 보기🔻

https://github.com/mkthebea/CCKK_Run.git

 

GitHub - mkthebea/CCKK_Run: A fangame of [CookieRun: Ovenbreak]

A fangame of [CookieRun: Ovenbreak]. Contribute to mkthebea/CCKK_Run development by creating an account on GitHub.

github.com

🔻게임 하기🔻

https://mkthebea.github.io/CCKK_Run/

 

DAL GGA

Loading... No Record Bronze Silver Gold Ruby Diamond Rainbow

mkthebea.github.io

 

728x90

'달리는 까까: 쿠키런 팬게임' 카테고리의 다른 글

[달리는 까까] 이미지 사전 로드와 로딩 페이지  (0) 2022.05.31
[달리는 까까] 메인 화면을 로비로 만들기  (0) 2022.05.31
[달리는 까까] 점수와 쿠키 체력 업데이트 및 인게임 UI  (0) 2022.05.31
[달리는 까까] 달리면서 젤리 먹기  (0) 2022.05.23
[달리는 까까] 쿠키런 팬게임 제작!  (0) 2022.05.23
    '달리는 까까: 쿠키런 팬게임' 카테고리의 다른 글
    • [달리는 까까] 메인 화면을 로비로 만들기
    • [달리는 까까] 점수와 쿠키 체력 업데이트 및 인게임 UI
    • [달리는 까까] 달리면서 젤리 먹기
    • [달리는 까까] 쿠키런 팬게임 제작!
    갬쿠
    갬쿠
    보안&소프트웨어 전공 프론트엔드 개발자

    티스토리툴바