간단한 배틀 힐링

김민재·2024년 8월 15일
0

Passive Skill의 구현


user의 현재 정보를 받아와서 HP를 지속적으로 회복하는 BattleHealing 함수를 만들어보았다.

이것을 만드는 중에 여러가지 궁금증이 생겼었는데,
1.setInterval이나 setTimeout의 구분점
setInterval은 계속 돌아가는 것이고, setTimeout은 계속 돌아가는 것이 아닌 한번만 돌아가게 되는 것이다.
나는 Interval을 사용함으로써 도중에 Interval이 종료가 되어야 되는 부분이 필요했고 처음에는 let interval 과 clearInterval(interval)로 처리를 했으나 this로 처리를 해보니 this가 제대로 잡고있다는 걸 알수 있었다.

2.이렇게 만들어진 함수 안에서 user를 참조하는 방법이 무엇일까?
나는 bind로써 해결을 해보고자 했다.
function () {}.bind(객체명)의 방식으로 함수에 직접 binding을 하는 방식으로 했고

interval에 해당하는 함수안에 직접 binding하여 이를 처리하면서 에러가 하나 발생 했었는데 바로 clearInterval에서 였다.

기존 clearInterval처럼 this로써 처리를 하게 되었을 때 이 this는 user를 가르키게 되기 때문에 Interval이 끝나질 않는 것이다.
그렇기에 처음에 했던 interval을 직접 넣는 방식으로 처리를 했다.

3.체력이 3000이상이 넘어갔을 경우엔?!
보면 알겠지만 체력이 3000이상 넘어가고 나서 Interval을 반복하고 이를 확인하고 나서 변경하는 경우가 생겨버리고 만다.
그렇지만 우리는 HP를 지정해놓고 있기때문에 만약에 이런 것들을 인터페이스로 표시를 하게 된다면

user의 HP의 량만큼만 HP바를 할당을 하게되면 current_hp가 3050으로 HP바를 넘어가더라도 우리가 보는 입장에서는 HP가 3000으로 보일것이다.
물론 문제점이 아예 없는 것은 아니겠지만(HP가 3050이 되었을때 갑자기 데미지가 들어와서 처리가 된다거나..) this를 확인하고 처리를 하는 입장에서 괜찮은 것 같다.

Last.그냥 보기엔 함수 호출하는거 같은데 이거 맞나요?

듣고보니 맞는말이다.

실제로 호출할때는 이런 방식을 채용하는 것이 괜찮아보인다.

느낀점

this를 위주로 사용을 해볼려고했으나 생각보다 쉽지는 않았고, this를 관련해서 많이 찾아보면서 알아본 점이 많은 것 같았다.

this 관련 참조

https://velog.io/@minbr0ther/JavaScript-This-%EB%B0%94%EC%9D%B8%EB%94%A9-%EB%A3%B0-%ED%99%94%EC%82%B4%ED%91%9C-%ED%95%A8%EC%88%98

profile
ㅇㅇ

0개의 댓글