관리 메뉴

도드넷

JAVASCRIPT#61 - jQuery setInterval VS clearInterval 본문

창고/JS KING 포니 [중단]

JAVASCRIPT#61 - jQuery setInterval VS clearInterval

도드! 2016. 7. 6. 12:24
반응형



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을 날려버리게 된다.


mygame.zip



 




반응형
Comments