ZEP Guidebook (KR)
  • πŸ‘‹Hello ZEP Script
  • ZEP Script κ°€μ΄λ“œ
    • ZEP Script 개발 κ°€μ΄λ“œ
      • μ‰¬μš΄ 개발 κ°€μ΄λ“œ
      • Javascript 개발 κ°€μ΄λ“œ
      • Typescript 개발 κ°€μ΄λ“œ
      • ZEP Script 배포 κ°€μ΄λ“œ
    • ZEP Script λ”°λΌν•˜κΈ°
      • 기초 예제 μ½”λ“œ
        • βœ‰οΈλ©”μ‹œμ§€ 좜λ ₯해보기
        • ♻️ZEP APP lifecycle μ΄ν•΄ν•˜κΈ°
        • πŸ‘€μΊλ¦­ν„° 이미지 λ°”κΎΈκΈ°
        • πŸ–ΌοΈλ‚˜λ§Œμ˜ UI λ§Œλ“€κΈ°
        • πŸ’’2초 μŠ€ν„΄ 효과 λ§Œλ“€μ–΄λ³΄κΈ°
      • ZEP Script 예제 μ½”λ“œ
        • ⏰타이머
        • β±οΈλ°©νƒˆμΆœ 타이머
        • πŸ€›μ‚¬μ΄λ“œλ°” μ•±
        • πŸ§Ÿβ€β™‚οΈμ’€λΉ„ κ²Œμž„
        • 🎨페인트맨 κ²Œμž„
        • πŸ™†β€β™€οΈμ΄ˆμ„± ν€΄μ¦ˆ
        • πŸ’©λ˜₯ν”Όν•˜κΈ° κ²Œμž„
        • πŸ₯Šκ²°νˆ¬ κ²Œμž„
        • πŸƒβ€β™‚οΈλ‹¬λ¦¬κΈ°
      • Custom Label 예제 μ½”λ“œ
        • Type-A
        • Type-B
        • Type-C
        • Type-D
        • Type-E
        • Type-F
        • Type-G
        • Type-H
        • Type-I
        • Type-J
      • μ‚¬μ΄λ“œ λ°” μ•± 예제 μ½”λ“œ
        • πŸ”ΉImage List
        • πŸ”ΉText List
        • πŸ”ΉText Button List
        • πŸ”ΉRanking List
        • πŸ”ΉSelect List
    • ZEP Script FAQ
    • 뢀둝
      • 🎑ZEP 슀크립트 ν™œμš© 사둀
      • πŸ—ΊοΈμŠ€νŽ˜μ΄μŠ€μ™€ λ§΅ μ΄ν•΄ν•˜κΈ°
      • βŒ¨οΈμžλ°”μŠ€ν¬λ¦½νŠΈ ν‚€μ½”λ“œ ν‘œ
      • πŸŽ¨μŠ€ν”„λΌμ΄νŠΈμ‹œνŠΈ μ΄ν•΄ν•˜κΈ°
      • πŸŒ€TileEffectType 상세 μ„€λͺ…
      • πŸ“ŒκΈ°μ€€ μ’Œν‘œ
      • πŸ›°οΈμ™ΈλΆ€ API ν†΅μ‹ ν•˜κΈ°
      • πŸ”°URL 쿼리슀트링 ν™œμš©ν•˜κΈ°
      • πŸͺ§μœ„μ ―μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ 문법
      • πŸ”˜λͺ¨λ°”μΌλ²„νŠΌ 이미지 λ³€κ²½ν•˜κΈ°
      • ✳️ZEP 슀크립트 μƒν˜Έμž‘μš© 였브젝트 κ°€μ΄λ“œ
      • πŸ“‡μ˜€λΈŒμ νŠΈ npcProperty
  • ZEP SCRIPT API
    • πŸ“˜ZEP Script API
      • API Summary
      • ScriptApp
        • Lifecycle
        • Field
        • Storage
        • Event Listeners
        • Callbacks
        • Methods
      • ScriptMap
        • Field
        • Methods
      • ScriptPlayer
        • Field
        • Methods
      • ScriptWidget
        • Field
        • Event Listeners
        • Methods
      • UtilityClass
        • Time
Powered by GitBook
On this page
  • μ†Œκ°œ
  • App 생애 μ£ΌκΈ°(Lifecycle) μ΄ν•΄ν•˜κΈ°
  • 1️⃣ Enter 단계 ν•¨μˆ˜
  • onInit
  • onJoinPlayer
  • onStart
  • 2️⃣ Update
  • onUpdate
  • 3️⃣ Exit 단계 ν•¨μˆ˜
  • onLeavePlayer
  • onDestroy

Was this helpful?

  1. ZEP SCRIPT API
  2. ZEP Script API
  3. ScriptApp

Lifecycle

PreviousScriptAppNextField

Last updated 1 year ago

Was this helpful?

μ†Œκ°œ

앱이 μ‹œμž‘λ˜μ–΄, μ‹€ν–‰λ˜κ³  μ’…λ£Œλ  λ•ŒκΉŒμ§€λ₯Ό ν•˜λ‚˜μ˜ 생애 μ£ΌκΈ°(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("κ²Œμž„ 블둝이 νŒŒκ΄΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€.")
});

πŸ“˜
Enter 단계 ν•¨μˆ˜λ“€μ΄ μˆœμ„œλŒ€λ‘œ λ™μž‘ν•˜λŠ” λͺ¨μŠ΅.