인프런 커뮤니티 질문&답변

ACACIA님의 프로필 이미지
ACACIA

작성한 질문수

[JS] Phaser 게임 제작 - 뱀파이어 서바이벌 클론

레벨에 따라 Attack을 강화 및 추가해보자 3

[참고] 33강 캣닢어택 강화시 버그 관련

해결된 질문

작성

·

517

·

수정됨

2


재현경로

  • 게임 시작

  • 레벨 4 도달

  • 캣닢 범위 강화

  • 몬스터 타격

현재결과

  • 캣닢 범위는 넓어지나 몬스터에게 데미지가 들어가지 않음. (피격판정 O 데미지 X)

기대결과

  • 캣닢 범위가 넓어지더라도 몬스터에게 데미지가 들어가야 함.

재현빈도

  • Always

테스트환경

 

 

 

 



상황

https://paullabworkspace.notion.site/3-23-d2df6742dd0141d6bcad23902b9c3c20

현재 강의 자료에서 공격 이벤트를 추가하기 위해 addAttackEvent()선언 시 아래와 같은 로직으로 캣닢을 m_attackEvents에 담고 있습니다.

이후 공격 범위를 증가시키는 로직은 아래와같이 정의되어 있습니다.


강의 자료 내에서는 레벨 4에 캣닢 공격의 스케일을 확장합니다.

 

현상

강의 자료 내에서는 레벨 4에 캣닢 공격의 스케일을 확장합니다.

이때 catnip이라는 class 구성에는 damage 값이 없어서 문제가 발생합니다. 공격 범위 증가 로직 작동 시 아래의 값이 undefined가 되게 됩니다.

scene.m_attackEvents.catnip.damage

 

캣닢에서의 데미지는 m_damage로 선언되어 있기 때문입니다. 이는 오버레이 등 여러 로직과 엮여있는 컨벤션이므로 건들기 난해합니다.

다른 공격 액션 또한 m_damage로 class가 구성되어 있으나, 다른 액션들은 이벤트 등록 시 damage가 있는 객체로 전달해서 큰 문제가 없습니다.

결국 damage를 undefined 로 받은 캣닢은 레벨 4 이후 범위를 확장시키면서 데미지가 사라지는 현상이 나타나게 됩니다. 아무리 맞춰도 죽지 않습니다. 뼈를 내어주고 살을 얻습니다.

JS인지라 damage가 undefined라고 에러는 나타나지 않지만 버그입니다.
첫 강의 소개당시 왕까지 어렵게 가신 가장 큰 이유가 아닐까 싶습니다.


해결

방법이야 많겠지만 일단 무식하게 damage를 포함한 객체로 전달했습니다.(겸사겸사 동일한 에러를 도출할 것으로 보이는 scale과 repeatGap도 포함합니다.)

/attackManager.js

이 상태에서는 기존 catnip 자체를 저장하던 때와 비교하여 destroy() 메서드를 사용 할 수 없게 되므로 사이드이펙트 해소를 위해 아래와 같이 수정했습니다.

객체에 destroy 함수만 넘길지 고민 많이 되더군요.

/attackManager.js

답변 1

4

ahracho816님의 프로필 이미지
ahracho816
지식공유자

안녕하세요 하준님. 먼저 버그로 인해 학습에 불편함을 드린 점 죄송합니다.
해당 버그 확인하였으며, 해결법 또한 제시해주셔서 감사드립니다.
빠른 시일 내로 적절한 수정법을 찾아 버그 수정 강의로 업데이트하고 알려드리도록 하겠습니다. 감사합니다!

해결법은아직일까요?

ahracho816님의 프로필 이미지
ahracho816
지식공유자

안녕하세요 오일님, 해결법 제공이 늦어져 죄송합니다.
해당 파트 강의 자료 하단에 버그 수정법을 업데이트 하였습니다.
감사합니다.
https://paullabworkspace.notion.site/3-23-d2df6742dd0141d6bcad23902b9c3c20

ACACIA님의 프로필 이미지
ACACIA

작성한 질문수

질문하기