라이프사이클이란(Lifecycle)

액터와 씬은 라이프사이클이란 개념이 있습니다.
액터와 씬은 생성되고, 필요가 없어지면 파괴됩니다.

가령 액터를 예로 들어보겠습니다.
액터가 생성되었을 때, 내가 돌아왔다! 라고 외치게 만들고 싶습니다.
그렇다면 우리는 액터가 생성되었을 때를 알 수 있어야 합니다.
그 때 필요한 것이 라이프사이클입니다.

스크립트를 이용하자

가령 액터를 예로 들어봅시다.
액터에 새로운 스크립트 파일을 추가해보면 아래와 같은 코드가 보입니다.

/**
 *  액터가 생성되었을 때 호출될 함수입니다.
 */
export function OnActorStart(this: Actor): void {

}

이름에서도 알 수 있듯이, 이 함수는 액터가 생성되었을 때 작동할 함수입니다.
따라서 우리는 이렇게 프로그래밍 할 수 있습니다.

export function OnActorStart(this: Actor): void {
    // 내가 돌아왔다!
    this.bubble.of('message').say('내가 돌아왔다!')
}

라이프사이클은 스크립트에서 지원합니다

주의! 이 방식은 권장하지 않습니다

원한다면 직접 액터에서 라이프사이클을 작성할 수도 있습니다.
하지만 이 경우 몇 가지 주의점이 있습니다.

가령 this.runScript 메서드를 지우면 안된다는 점입니다.
이 메서드는 스크립트가 올바르게 동작하기 위해 필요한 구문이기 때문입니다.

class MyActor extends BaseActor {
    start(): void {
        this.runScript(this.__starts) // 건들지 마세요

        // 내가 돌아왔다!
        this.bubble.of('message').say('내가 돌아왔다!')
    }
}

이는 예시이고, 액터가 생성되었고 씬에 등장했을 때 작동하는 코드입니다.
start 메서드는 생성과 동시에 자동으로 호출됩니다.
따라서 액터가 생성되었을 때 작동할 내용을, start 메서드 내부에 구현할 수 있습니다.

반대로 액터가 파괴될 때, 파괴되는 파티클 효과를 줘보도록 할까요?

class MyActor extends BaseActor {
    end(): void {
        this.runScript(this.__ends) // 건들지 마세요

        // 파티클 효과를 보여줍니다
        this.particle.explode('dead')
    }
}

이번에는 end 메서드 내에서 구현하였습니다.
마찬가지로 end 메서드는 액터가 파괴될 때 자동으로 호출되는 메서드이며,
액터가 파괴되었을 때 작동할 내용을 이 메서드에 구현하면 됩니다.

라이프사이클 종류

액터와 씬은 각자 다른 라이프사이클을 가지고 있습니다.

액터

start

액터가 생성되었을 때 호출될 메서드입니다.
딱 한번만 실행됩니다.

update

게임이 매 프레임 업데이트 될 때 마다 호출될 메서드입니다.
기본적으로 60프레임의 게임이므로, 대략 0.016초 마다 호출될 메서드입니다.
따라서 너무 무거운 코드를 담지 마세요.

end

액터가 파괴될 때 호출될 메서드입니다.
딱 한번만 실행됩니다.

create

씬이 생성되었을 때 호출될 메서드입니다.
딱 한번만 실행됩니다.

update

게임이 매 프레임 업데이트 될 때 마다 호출될 메서드입니다.
기본적으로 60프레임의 게임이므로, 대략 0.016초 마다 호출될 메서드입니다.
따라서 너무 무거운 코드를 담지 마세요.

주의하세요

씬은 destroy 메서드를 라이프사이클로 사용하지 않습니다.
destroy 메서드를 사용하면, 씬은 그 즉시 파괴됩니다.
요컨데 이건 파괴를 실행하는 메서드이지, 라이프사이클이 아니니까 주의하세요.

만일 씬이 파괴되었을 때 작동할 내용을 담고 싶다면, 스크립트를 이용하세요.

홈으로 뒤로가기