Lifecycle

์†Œ๊ฐœ

์•ฑ์ด ์‹œ์ž‘๋˜์–ด, ์‹คํ–‰๋˜๊ณ  ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€๋ฅผ ํ•˜๋‚˜์˜ ์ƒ์•  ์ฃผ๊ธฐ(Lifecycle)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ ํ•จ์ˆ˜๋“ค์„ ์ด์šฉํ•˜์—ฌ ์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ, ์‹คํ–‰ ์ค‘์ผ ๋•Œ ๊ทธ๋ฆฌ๊ณ  ์ข…๋ฃŒ๋  ๋•Œ ๋“ฑ์˜ ์ƒํ™ฉ์—์„œ ํ•„์š”ํ•œ ๋™์ž‘๋“ค์„ ์‹คํ–‰ํ•ด ์ „์ฒด์ ์ธ ์•ฑ์˜ ์ƒ์• ์ฃผ๊ธฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„์„ค๋ช…

onInit

App์ด ์ตœ์ดˆ๋กœ ์‹œ์ž‘๋  ๋•Œ ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

onJoinPlayer

onInit์ด ํ˜ธ์ถœ๋œ ํ›„, ์ ‘์†ํ•ด ์žˆ๋Š” ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ž…์žฅ ์‹œํ‚ค๊ณ , ์ดํ›„ ์ž…์žฅํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

onStart

๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ onJoinPlayer๋ฅผ ํ†ตํ•ด ์ž…์žฅํ•œ ํ›„ ํ•œ ๋ฒˆ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค.

onUpdate

์•ฝ 20ms ๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

onLeavePlayer

ํ‡ด์žฅํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„, ๋‹ค๋ฅธ App์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•œ Game Block์ด ํŒŒ๊ดด๋  ๋•Œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ‡ด์žฅ์‹œํ‚ต๋‹ˆ๋‹ค.

onDestroy

๋‹ค๋ฅธ App์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•œ Game Block์ด ํŒŒ๊ดด๋  ๋•Œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

App ์ƒ์•  ์ฃผ๊ธฐ(Lifecycle) ์ดํ•ดํ•˜๊ธฐ

Lifecycle ํ•จ์ˆ˜๋“ค์€ ์ƒ์•  ์ฃผ๊ธฐ์— ๋งž๊ฒŒ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ•„์ˆ˜์ ์ธ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ๋Š” Enter ๋‹จ๊ณ„์˜ ํ•จ์ˆ˜๋“ค์ด ๋™์ž‘ํ•˜๊ณ , ์•ฑ์ด ์‹คํ–‰ ์ค‘ ์ผ๋•Œ๋Š” Update ๋‹จ๊ณ„์˜ ํ•จ์ˆ˜๋“ค์ด ์ฃผ๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ์•ฑ์ด ์ข…๋ฃŒ๋  ๋•Œ๋Š” Exit ๋‹จ๊ณ„์˜ ํ•จ์ˆ˜๋“ค์ด ๋™์ž‘ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์•ฑ์ด ์‹คํ–‰๋˜์–ด ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ฐ ๋‹จ๊ณ„์˜ ํ•จ์ˆ˜๋“ค์„ ์ž˜ ํ™œ์šฉํ•ด ์ƒ์•  ์ฃผ๊ธฐ์— ๋งž๊ฒŒ App์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.

Lifecycle ํ•จ์ˆ˜ ํ•œ ๋ˆˆ์— ๋ณด๊ธฐ

// App ์‹คํ–‰ ์‹œ์— ์ตœ์ดˆ๋กœ ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ (์œ ์ € ์ง„์ž… ์ „)
// Normal App๊ณผ Sidebar App์€ Script ์ ์šฉ ํ›„ ๋งต์ด ์‹คํ–‰๋  ๋•Œ ํ˜ธ์ถœ [ Enter ]
App.onInit.Add(function(){
});

// ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ด ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด App์— ์ง„์ž…์‹œํ‚ด [ Enter ]
// ์ดํ›„ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ž…์žฅ ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ [ Events ]
App.onJoinPlayer.Add(function(player) {
});

// ํ”Œ๋ ˆ์ด์–ด ๋ชจ๋‘ ์ง„์ž… ์‹œ ์ตœ์ดˆ๋กœ ์‹œ์ž‘๋˜๋Š” ์ด๋ฒคํŠธ [ Enter ]
App.onStart.Add(function(){
});

// 20ms ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋Š” ์ด๋ฒคํŠธ
// dt: deltatime(์ „ ํ”„๋ ˆ์ž„์ด ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„) [ Update ]
App.onUpdate.Add(function(dt){
});

// ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ ํ›„ ๋‹ค์‹œ onUpdate

// App ์ข…๋ฃŒ ์‹œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ App์—์„œ ๋‚˜๊ฐ€๊ฒŒ ํ•จ [ Exit ]
App.onLeavePlayer.Add(function(player){
});

// App ์ข…๋ฃŒ ์‹œ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ˜ธ์ถœ [ Exit ]
// Normal App๊ณผ Sidebar App์€ ๋ณ„๋„์˜ ์ข…๋ฃŒ
App.onDestroy.Add(function(){
});

1๏ธโƒฃ Enter ๋‹จ๊ณ„ ํ•จ์ˆ˜

App์˜ ์‹คํ–‰๊ณผ ํ•จ๊ป˜ ํ˜ธ์ถœ๋˜๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด Enter ๋‹จ๊ณ„์—์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

onInit

App.onInit.Add(function(){})

App์ด ์ตœ์ดˆ๋กœ ์‹œ์ž‘๋  ๋•Œ ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ

  • ์—†์Œ

์˜ˆ์ œ

onInit ์—์„œ ์ฑ„ํŒ… ์ถœ๋ ฅํ•ด๋ณด๊ธฐ. ( ๋ฏธ๋‹ˆ๊ฒŒ์ž„์œผ๋กœ ๋งŒ๋“ค์–ด ํ™•์ธํ•ด๋ณด์„ธ์š”. )

App.onInit.Add(function(){
	App.sayToAll("-- onInit --")
	App.sayToAll("   ready..  ")
	App.sayToAll("------------")
});

onJoinPlayer

App.onJoinPlayer.Add(function(player){})

onInit์ด ํ˜ธ์ถœ๋œ ํ›„, ์ ‘์†ํ•ด ์žˆ๋Š” ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ž…์žฅ์‹œํ‚ค๊ณ , ์ดํ›„ ์ž…์žฅํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ

์ด๋ฆ„ํƒ€์ž…์„ค๋ช…

player

Player

player๋Š” ์ž…์žฅํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฐ€๋ฅดํ‚ด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ๊ฐ€๋Šฅ

์˜ˆ์‹œ

ํ”Œ๋ ˆ์ด์–ด ์ž…์žฅ์‹œ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•ด๋ณด๊ธฐ

App.onJoinPlayer.Add(function(player){
	App.showCenterLabel(`${player.name}๋‹˜์ด ์ž…์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.`)
});

onStart

App.onStart.Add(function(){})

๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๊ฐ€ onJoinPlayer๋ฅผ ํ†ตํ•ด ์ž…์žฅํ•œ ํ›„ ํ•œ ๋ฒˆ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ

  • ์—†์Œ

์˜ˆ์ œ

onStart์—์„œ ์ฑ„ํŒ… ์ถœ๋ ฅํ•ด๋ณด๊ธฐ ( ๋ฏธ๋‹ˆ๊ฒŒ์ž„์œผ๋กœ ๋งŒ๋“ค์–ด ํ™•์ธํ•ด๋ณด์„ธ์š”. )

App.onStart.Add(function(){
	App.sayToAll("-- App Start --")
});

Enter ๋‹จ๊ณ„ ํ•จ์ˆ˜์˜ ํ๋ฆ„ ์ดํ•ดํ•˜๊ธฐ

Lifecycle Enter ๋‹จ๊ณ„์˜ ํ๋ฆ„์„ ์ฝ”๋“œ๋กœ ํ™•์ธํ•ด๋ณด์„ธ์š”. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ฏธ๋‹ˆ๊ฒŒ์ž„์œผ๋กœ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ•ด๋ณด์„ธ์š”!

// main.js
App.onInit.Add(function(){
	App.sayToAll("-- onInit --")
	App.sayToAll("   ready..  ")
	App.sayToAll("------------")
});

App.onJoinPlayer.Add(function(player){
	App.sayToAll(`${player.name}๋‹˜์ด ์ž…์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.`)
});

App.onStart.Add(function(){
	App.sayToAll("-- App Start --")
});

2๏ธโƒฃ Update

Update์—๋Š” ์•ฝ 20ms ๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜ onUpdate๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

onJoinPlayer, onLeavePlayer ๋“ฑ์˜ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ›„ ๋‹ค์‹œ onUpdate๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

onUpdate

App.onUpdate.Add(function(dt){})

์•ฝ 20ms ๋งˆ๋‹ค ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ

์ด๋ฆ„ํƒ€์ž…์„ค๋ช…

dt

Number

deltatime (์ „ ํ”„๋ ˆ์ž„์ด ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„, ์•ฝ 20ms) dt ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

์˜ˆ์‹œ

onUpdate ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด 10์ดˆ ์นด์šดํŠธ๋‹ค์šด ๋งŒ๋“ค์–ด๋ณด๊ธฐ

let countdown = 10;
let timer = 0;
App.onUpdate.Add(function(dt){
	timer += dt;
	if(timer >=1){
		if(countdown >= 0)
		{
			App.showCenterLabel(countdown--);
		}
		else{
			App.showCenterLabel("Time Over");
		}
		timer = 0;
	}
})

3๏ธโƒฃ Exit ๋‹จ๊ณ„ ํ•จ์ˆ˜

์•ฑ์ด ์ข…๋ฃŒ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

onLeavePlayer

App.onLeavePlayer.Add(function(player){})

ํ‡ด์žฅํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„, ๋‹ค๋ฅธ App์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•œ Game Block์ด ํŒŒ๊ดด๋  ๋•Œ ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด๋ฅผ ์ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ‡ด์žฅ์‹œํ‚ต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ

์ด๋ฆ„ํƒ€์ž…์„ค๋ช…

player

Player

player ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ‡ด์žฅํ•˜๋Š” ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ฐ€๋ฅดํ‚ด player ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„์€ ์ž„์˜๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

์˜ˆ์‹œ

ํ”Œ๋ ˆ์ด์–ด ํ‡ด์žฅ ์‹œ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•ด๋ณด๊ธฐ

// ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ‡ด์žฅํ•  ๋•Œ ์‹คํ–‰
App.onLeavePlayer.Add(function(player){
	App.showCenterLabel(`${player.name}๋‹˜์ด ํ‡ด์žฅํ•˜์…จ์Šต๋‹ˆ๋‹ค.`)
});

onDestroy

App.onDestroy.Add(function(){})

๋‹ค๋ฅธ App์ด ์‹คํ–‰๋˜๊ฑฐ๋‚˜, ์„ค์น˜ํ•œ Game Block์ด ํŒŒ๊ดด๋  ๋•Œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ

  • ์—†์Œ

์˜ˆ์ œ

Game Block ํŒŒ๊ดด ์‹œ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•ด๋ณด๊ธฐ ( ๋ฏธ๋‹ˆ๊ฒŒ์ž„ )

// Game Block ํŒŒ๊ดด ์‹œ ์‹คํ–‰
App.onDestroy.Add(function(){
	App.showCenterLabel("๊ฒŒ์ž„ ๋ธ”๋ก์ด ํŒŒ๊ดด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
});

Last updated