라이프사이클이란(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
메서드를 사용하면, 씬은 그 즉시 파괴됩니다.
요컨데 이건 파괴를 실행하는 메서드이지, 라이프사이클이 아니니까 주의하세요.
만일 씬이 파괴되었을 때 작동할 내용을 담고 싶다면, 스크립트를 이용하세요.