도드넷
JAVASCRIPT#61 - jQuery setInterval VS clearInterval 본문
My little pony wife AJ.. i will gladly let her be my beginning and the end.
JAVASCRIPT#61 - 애니메이션 함수 객체화해서 체계적이게 만들기
1. 객체 만들기
방법1) 직접 만들기
- 매우 간단함
var walk = {
startframe: 0,
endframe: 3,
speed: 120
};
var stand = {
startframe: 0,
endframe: 0,
speed: 120
};
방법2) 생성자 함수를 통해서 만들기
- 사용자와 소통 가능, 값 설정 가능
function character(divId, animqueue, frameWidth)
{
this.divId = divId;
this.animqueue = new Array();
this.frameWidth = frameWidth;
}
var AJ = new character("AJ",null,640);
2. setInterval VS clearInterval
- clearInterval을 하려면 setInterval을 만들때 객체로 만들어서 Interval ID를 지정해야한다.
var WTF = setInterval(함수, 반복간격);
clearInterval(WTF);
이런식으로 setInterval 반복문을 취소, 캔슬할수있다.
만약 여러개의 WTF 개체가 생성된다면 외부의 배열에 setInterval ID를 저장해서 관리해야 한다.
무턱대고 그냥 전에 쓰던놈 clearIntverval 하라고 시키면 여러 오류가 발생하더라 ㅠ
gameFramework.playanimation = function(obj, whatanim, loop)
{
// 진행중인 다른 애니메이션 중단
for(var i=0; i<2; i++)
{
clearInterval(obj.animqueue[i]);
if(i == 1)
{
obj.animqueue = [];
}
}
var totalNumberOfFrame = whatanim.endframe - whatanim.startframe + 1;
var frameNumber = whatanim.startframe;
var animterval = setInterval(function(){
gameFramework.setFrame(obj.divId, frameNumber, obj.frameWidth);
if(loop == false && frameNumber == whatanim.endframe)
{
for(var i=0; i<2; i++)
{
clearInterval(obj.animqueue[i]);
if(i == 1)
{
obj.animqueue = [];
}
}
gameFramework.setFrame(obj.divId, 0, obj.frameWidth); // 캐릭터 상태 초기화
}
frameNumber = (frameNumber + 1) % totalNumberOfFrame;
}, whatanim.speed);
obj.animqueue.push(animterval); // 캐릭터 오브젝트안에 있는 animqueue라는 외부배열에 저장하기
}
애니메이션 실행 함수로 만약 애니메이션 시작 커맨드를 받으면 이전에 재생중이던 애니메이션 Interval을 중단시키고
명령받은 애니메이션을 실행하게 된다. 기묘한 버그를 잡기위해 for문을 이용해서 저장된 모든 애니메이션 Interval을 날려버리게 된다.
'창고 > JS KING 포니 [중단]' 카테고리의 다른 글
JAVASCRIPT#63 - 프리로드 .inArray (0) | 2016.07.08 |
---|---|
JAVASCRIPT#62 - 자바스크립트 물체 움직이기, 다중 객체 제어 (0) | 2016.07.07 |
JAVASCRIPT#60 - 스프라이트 시트 GIMP! (0) | 2016.07.04 |
JAVASCRIPT#59 - jQuery .on() detach에 대해여 (0) | 2016.07.03 |
JAVASCRIPT#58 - 제이쿼리에 대하여 Revisit (0) | 2016.07.02 |