• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

공격키를 연속으로 누를때 처리하는 방법 질문 드립니다

21.09.09 02:39 작성 조회수 610

0

안녕하세요 수업 잘 듣고 있습니다

제공해주신 캐릭터가 아닌 직접 그린 그림을 사용하려고 하는데 제 캐릭터는 총을 들고 뛰다가 공격키 눌렀을때 총을 들어 쏘는 방식입니다. 

이때 attack 키를 누를때 발생시키는 이벤트에서 

1.누르고 있으면 계속 공격이 나감

2.연타하면 계속 공격이 나감(키를 눌러 공격한후 한동작이 끝나자마자 바로 다시 키를 누를 경우)

두가지 방법 중 하나로 응용해보고 싶습니다.

또 뛰거나/대기모드 상태에서 처음 공격키를 누르면 총을 들고 쏘는 모션이 들어가있는데 이미 공격 상태일때 연속으로/혹은 지속적으로 공격키를 누를 경우 모션은

1.총을 드는 모션을 삭제하고 쏘기만 하는 애니메이션을 추가한 클래스를 추가

2.동일한 공격 애니메이션의 클래스를 계속 나타내기

두가지로 생각하고 있는데 혹시 조언해주실 수 있을까요? 지금은 bulletComProp.launch가 false일때만 공격이 나가고 바로 true로 상태가 바뀐뒤 attack키를 누르지 않을때만 false상태가 되어 연속 공격이 부자연스럽네요 ㅜㅜ 초보라 이해가 다소 느리고 설명도 이상하게 한듯 하지만 도와주신다면 정말 감사하겠습니다

답변 2

·

답변을 작성해보세요.

1

다양한 방법을 시도해보세요~! 키를 때지 않아도 수리검을 연속으로 날리고 싶다면

간단하게 다음과 같은 방법으로도 처리할 수 있습니다. :D

 

Hero클래스에 keyMotion메소드 - 수정

 

if(key.keyDown['attack']){

if(!bulletComProp.launch){

this.el.classList.add('attack');

bulletComProp.arr.push(new Bullet());

bulletComProp.launch = true;

setTimeout(()=>{

bulletComProp.launch = false;

},200)

}

}

 

다음과 같이 셋타임아웃을 활용해 raunch값이  false로 바뀌는 시간을 조절해 키를 때지 않아도 수리검이 다시 발사될 수 있도록하는거죠^^; 수업을 자세히보면 반복되는 패턴이 많으니 잘 응용해보면 좋을것 같습니다. :)

 

yeochijam님의 프로필

yeochijam

질문자

2021.09.10

생각보다 간단했네요..ㅠㅠ 감사합니다!! 

0

안녕하세요 :)

질문주신 내용이 조금 이해하기 힘들어 추측해 답변드리겠습니다. 만약 다른 문제라면 다시 질문을 올려주세요.:)

 

문제)

1.공격키를 연속으로 누르고 땔때 공격 모션의 부자연 스러움이 문제가 되는것인가요??

2.히어로가 공격을할 때 bulletComProp.launch 값을 이용해 수리검이 생성되는걸 제어하지 않을경우 총알이 너무 많이발사되는게 문제인게 맞는지요?

 

제가 이해한게 맞다면 이부분은  섹션4-1 히어로가 슬라이드하도록 구현하는 부분을 참고해 구현해보면 좋을것 같습니다 :) 

 

히어로가 슬라이드 하는 부분을 보면

히어로가 슬라이드를 할 때 키를 때지 않아도 히어로가 일어나도록 구현하는 부분이 있습니다. 이부분을 역으로 이용하거나 참고해보면 좋을것 같네요 :)

그리고 공격 딜레이 같은 부분은 setTimeout을 활용해 보아도 좋을것 같습니다. 다양한 방법을 응용해 적용해보면 좋을것 같네요 :)

그럼 또다른 궁금증이 생기면 언제든 문의해 주세요 :)

 

 

 

 

yeochijam님의 프로필

yeochijam

질문자

2021.09.09

앗 감사합니다! 제 자신도 아직 이해를 잘 못해서 너무 모호하게 말씀 드렸네요! 오늘 더 공부하다가 좀 더 명확해졌습니다 !
말씀해주신 것 중 2번이 제일 문제가 되는 것 같습니다 공격키를 계속 누르고 있으면 주기적으로 공격이 계속 되길 원하는데 이때 수리검이 생성되는 걸 제어하기가 어려워 총알이 굉장히 많이 발사 되고 있습니다 

 

 

if(key.keyDown['attack']){

if(!bulletComProp.launch){

this.el.classList.add('attack');

setTimeout(function(){

bulletComProp.arr.push(new Bullet()); 

bulletComProp.launch = true;

},400)

}

else if(bulletComProp.launch){

bulletComProp.launch = false;

setTimeout(function(){

bulletComProp.arr.push(new Bullet());

},600)

}

 

}

 

여러방법을 시도하다가 지금은 이 상태인데 해결이 어렵네요ㅠㅠ 요 부분도 섹션 4-1에서 응용할 수 있을까요?