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

Fork님의 프로필 이미지
Fork

작성한 질문수

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

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

addAttackEvent 속도가 너무 빠르면 이런 오류가 발생하네요

해결된 질문

작성

·

151

0

  addAttackEvent(this, "beam", 3, 1, 100)


속도를 위처럼 빠르게 하면 몹이 한마리 죽으면서 아래 오류가 나오는데 이런 경우는 어떻게 해야하나요?

beam.js:31 Uncaught RangeError: Maximum call stack size exceeded

at Beam.setVelocity (beam.js:31:19)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

at Beam.setVelocity (beam.js:32:18)

답변 2

0

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

안녕하세요.

일반적으로 Maximum call stack size exceeded라는 에러는 무한루프 또는 반복 호출로 인해 콜스택 크기가 초과되었을 때 발생합니다. 코드에서 Beam.setVelocity가 여러 번 반복 호출되면서 에러가 난 것 같습니다.

수업 자료대로라면 setVelocity 메서드에서 무한 루프가 발생하진 않을 것 같은데, 이벤트가 너무 짧은 시간 안에 계속해서 발생해서 콜스택 크기를 초과한 것으로 보입니다. 콜스택의 크기를 직접 변경할 수는 없으니 repeatGap을 조금씩 늘려서 콜스택이 터지지 않는 범위를 찾는 것이 최선일 것 같습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

Fork님, 질문하신 내용과 관련하여 직접적인 답변을 드리기가 어렵습니다. 해당 질문은 강의 내용이나 진도와는 별개의 프로그래밍 관련 질문으로 보입니다.

Uncaught RangeError: Maximum call stack size exceeded 오류는 특정 함수가 자기 자신을 너무 많이 호출하여 호출 스택 크기가 초과되었을 때 발생합니다. 이는 대개 재귀 함수에서 종료 조건이 제대로 설정되지 않아 무한 재귀 호출이 발생하거나, 함수가 너무 많은 연산을 하도록 설계되어 스택 오버플로우가 발생한 경우에 나타납니다.

해결 방안으로는,
1. Beam.setVelocity 함수 내에서 재귀 호출이 발생하고 있지 않은지 확인해보세요.
2. 각 호출 시에 종료 조건을 명확히 하여 무한 재귀 호출이 발생하지 않도록 조치해야 합니다.
3. 호출 스택이 크게 증가하지 않도록 함수의 로직을 최적화하거나 반복문 등을 이용하여 재귀 호출 대신 다른 방법을 사용하는 것도 고려해볼 수 있습니다.

더 자세한 도움이 필요하시면 해당 게임 프로그래밍 강의 질문 섹션을 활용하거나 자바스크립트 관련 커뮤니티에 질문을 올리는 것도 좋은 방법입니다.

Fork님의 프로필 이미지
Fork

작성한 질문수

질문하기