Event Listeners

μ†Œκ°œ

ν”Œλ ˆμ΄μ–΄κ°€ μ§€μ •λœ μ±„νŒ…μ„ μž…λ ₯ν•˜κ±°λ‚˜, νŠΉμ •ν•œ 였브젝트λ₯Ό 곡격할 와 같이 ZEP μŠ€νŽ˜μ΄μŠ€μ—μ„œ λ°œμƒν•˜λŠ” νŠΉμ • 상황에 λ°˜μ‘ν•˜μ—¬ λ™μž‘ν•˜λŠ” ν•¨μˆ˜λ“€ μž…λ‹ˆλ‹€.

EventListenerκ°€ λΉ„μ •μƒμ μœΌλ‘œ 많이 μΆ”κ°€λ˜λŠ” 경우 앱이 μ’…λ£Œλ  수 μžˆμŠ΅λ‹ˆλ‹€.

onUpdateλ¬Έ λ˜λŠ” 반볡적으둜 μ‹€ν–‰λ˜λŠ” λ¬Έμ—μ„œ EventListenerλ₯Ό λ“±λ‘ν•˜λŠ” 것을 μ§€μ–‘ν•΄μ£Όμ„Έμš”.

이름
μ„€λͺ…

onSay

ν”Œλ ˆμ΄μ–΄κ°€ μ±„νŒ…μ„ μž…λ ₯ν•  λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onPlayerTouched

캐릭터듀끼리 μΆ©λŒν•  λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onObjectTouched

캐릭터가 μ˜€λΈŒμ νŠΈμ™€ μΆ©λŒν•  λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onAppObjectTouched

ν”Œλ ˆμ΄μ–΄κ°€ ν‚€ 값을 가진 μ˜€λΈŒμ νŠΈμ™€ μΆ©λŒν•  λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onUnitAttacked

곡격 ν‚€(Z)둜 λ‹€λ₯Έ 캐릭터λ₯Ό 곡격할 λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onObjectAttacked

곡격 ν‚€(Z)둜 였브젝트λ₯Ό 곡격할 λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onSidebarTouched

ν”Œλ ˆμ΄μ–΄κ°€ μ‚¬μ΄λ“œλ°” 앱을 클릭(ν„°μΉ˜)ν•  λ•Œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onTriggerObject

μ˜€λΈŒμ νŠΈμ™€ F μƒν˜Έμž‘μš© μ‹œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

onAppObjectAttacked

ν”Œλ ˆμ΄μ–΄κ°€ ν‚€ 값을 가진 였브젝트λ₯Ό 곡격(Zν‚€) ν•  λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

πŸ“š API μ„€λͺ… 및 예제

Event Listener ν•¨μˆ˜ ν•œ λˆˆμ— 보기

// ν”Œλ ˆμ΄μ–΄λ“€μ΄ μ±„νŒ…μ°½μ— μž…λ ₯ν•˜λŠ” λͺ¨λ“  μ±„νŒ…μ— λŒ€ν•΄ 호좜 λ˜λŠ” 이벀트
// !둜 μ‹œμž‘ν•˜λŠ” ν…μŠ€νŠΈλŠ” μ±„νŒ…μ°½μ— λ‚˜μ˜€μ§€ μ•ŠμœΌλ‚˜, onSay ν•¨μˆ˜μ—λŠ” μ‚¬μš© κ°€λŠ₯
App.onSay.Add(function(player, text) {
});

// ν”Œλ ˆμ΄μ–΄κ°€ λ‹€λ₯Έ ν”Œλ ˆμ΄μ–΄μ™€ λΆ€λ”ͺν˜”μ„ λ•Œ 호좜 λ˜λŠ” 이벀트
App.onPlayerTouched.Add(function(sender, target, x, y){
});

// ν”Œλ ˆμ΄μ–΄κ°€ μ˜€λΈŒμ νŠΈμ™€ λΆ€λ”ͺν˜”μ„ λ•Œ 호좜 λ˜λŠ” 이벀트
App.onObjectTouched.Add(function(sender, x, y, tileID, obj) {  
});

// ν”Œλ ˆμ΄μ–΄κ°€ ν‚€ 값을 가진 μ˜€λΈŒμ νŠΈμ™€ λΆ€λ”ͺν˜”μ„ λ•Œ 호좜 λ˜λŠ” 이벀트
App.onAppObjectTouched.Add(function(key, sender, x, y){});

// ν”Œλ ˆμ΄μ–΄κ°€ λ‹€λ₯Έ ν”Œλ ˆμ΄μ–΄λ₯Ό 곡격할 λ•Œ (Zν‚€) 호좜 λ˜λŠ” 이벀트
App.onUnitAttacked.Add(function(sender, x, y, target) {
});

// ν”Œλ ˆμ΄μ–΄κ°€ 였브젝트λ₯Ό 곡격(Zν‚€)ν–ˆμ„ λ•Œ 호좜 λ˜λŠ” 이벀트
App.onObjectAttacked.Add(function(sender, x, y){
});

// ν”Œλ ˆμ΄μ–΄κ°€ μ‚¬μ΄λ“œλ°” 앱을 클릭(ν„°μΉ˜)ν•  λ•Œ 호좜 λ˜λŠ” 이벀트
App.onSidebarTouched.Add(function(player){
}); 

// μ˜€λΈŒμ νŠΈμ™€ F μƒν˜Έμž‘μš© μ‹œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.onTriggerObject.Add(function(player, layer, x, y){
});

// ν”Œλ ˆμ΄μ–΄κ°€ ν‚€ 값을 가진 였브젝트λ₯Ό 곡격할 λ•Œ (Zν‚€) 호좜 λ˜λŠ” 이벀트
App.onAppObjectAttacked.Add(function (sender, x, y, layer, key) {
});

onSay

App.onSay.Add(function(player, text){});

ν”Œλ ˆμ΄μ–΄κ°€ μ±„νŒ…μ„ μž…λ ₯ν•  λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

player

Player

player νŒŒλΌλ―Έν„°λŠ” μ±„νŒ…μ„ μž…λ ₯ν•œ ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄ player νŒŒλΌλ―Έν„°μ˜ 이름은 μž„μ˜λ‘œ λ³€κ²½ κ°€λŠ₯

text

String

textλŠ” μž…λ ₯ν•œ μ±„νŒ… λ‚΄μš©μ„ κ°€λ₯΄ν‚΄ text νŒŒλΌλ―Έν„°μ˜ 이름은 μž„μ˜λ‘œ λ³€κ²½ κ°€λŠ₯

예제

μ΄ˆμ„±ν€΄μ¦ˆ - μ±„νŒ…μœΌλ‘œ μ •λ‹΅ λ§žμΆ”λŠ” κΈ°λŠ₯ λ§Œλ“€μ–΄λ³΄κΈ°

_answer = "ZEP" // μ •λ‹΅
// ν”Œλ ˆμ΄μ–΄κ°€ μ±„νŒ…μ„ μΉ  λ•Œ μ‹€ν–‰
App.onSay.add(function(player, text) {
    if(_answer == text){
        App.showCenterLabel(player.name + 'λ‹˜ μ •λ‹΅!\n정닡은 ' + _answer);
    }
});

onPlayerTouched

App.onPlayerTouched.Add(function(sender, target, x, y){});

캐릭터듀끼리 μΆ©λŒν•  λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

sender

Player

senderλŠ” λΆ€λ”ͺ힌 주체자λ₯Ό κ°€λ₯΄ν‚΄

target

String

target은 λΆ€λ”ͺνž˜μ„ λ‹Ήν•œ ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

x, y

Number

x, yλŠ” μΆ©λŒν•œ x, y μ’Œν‘œλ₯Ό κ°€λ₯΄ν‚΄

sender, target, x, y νŒŒλΌλ―Έν„°μ˜ 이름은 μž„μ˜λ‘œ λ³€κ²½ κ°€λŠ₯

예제

캐릭터끼리 λΆ€λ”ͺ힐 λ•Œ λ©”μ‹œμ§€ 좜λ ₯해보기

// ν”Œλ ˆμ΄μ–΄λΌλ¦¬ λΆ€λ”ͺ힐 λ•Œ μ‹€ν–‰
App.onPlayerTouched.Add(function (sender, target, x, y) {
	App.showCenterLabel(
		`${sender.name}λ‹˜κ³Ό ${target.name}λ‹˜μ΄ μ’Œν‘œ: (${x}, ${y}) μ—μ„œ λΆ€λ”ͺν˜”μŠ΅λ‹ˆλ‹€.`
	);
});

onObjectTouched

App.onObjectTouched.Add(function(sender, x, y, tileID, obj){});

캐릭터가 μ˜€λΈŒμ νŠΈμ™€ 좩돌 λ˜λŠ” μƒν˜Έμž‘μš© ν•  λ•Œ ν•œ 번 μ‹€ν–‰λ©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

sender

Player

senderλŠ” μ˜€λΈŒμ νŠΈμ™€ λΆ€λ”ͺ힌 ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

x, y

Number

μ˜€λΈŒμ νŠΈμ™€μΆ©λŒν•œ x, y μ’Œν‘œλ₯Ό κ°€λ₯΄ν‚΄

tileID

Number

였브젝트의 타일 ID μž…λ‹ˆλ‹€.

obj

Object

였브젝트 객체

예제

⭐ overlap: true 속성이 μ—†λŠ” μ˜€λΈŒμ νŠΈλŠ” μΆ©λŒν•΄λ„ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

let testObject = App.loadSpritesheet("object.png");
// μ‚¬μš© κ°€λŠ₯ν•œ ObjectEffectType
const ObjectEffectType = {
    NONE = 0,
    SHOW_NOTE = 1,
    SHOW_IMAGE = 2,
    PASSWORD_DOOR = 3,
    LINK_WEBSITE = 4,
    EMBED_WEBSITE = 5,
    API_CALL = 6,
    REPLACE_IMAGE = 7,
    NFT_GIVEAWAY = 8,
    NFT_DOOR = 9,
    POST_MESSAGE = 10,
    SHOW_CHAT_BALLOON = 11,
    FT_DOOR = 12,
    POST_MESSAGE_TO_APP = 13,
    DONATION_DOOR = 14,
    IMPASSABLE = 15,
    STAMP = 16,
    TOKEN_DONATION_DOOR = 17,
    CHANGE_OBJECT = 18,
    ANIMATION = 19,
    NFT_DOOR_MOVE = 20,
    INTERACTION_WITH_ZEPSCRIPTS = 21,
    MULTIPLE_CHOICE = 22,
}

App.onStart.Add(function () {
	Map.putObject(5, 5, testObject, { overlap: true });
});

// ν”Œλ ˆμ΄μ–΄μ™€ μ˜€λΈŒμ νŠΈκ°€ λΆ€λ”ͺ힐 λ•Œ μ‹€ν–‰
App.onObjectTouched.Add(function (sender, x, y, tileID, obj) {
	Map.putObject(x, y, null);
	App.showCenterLabel(
		`${sender.name}λ‹˜μ΄ μ’Œν‘œ: (${x}, ${y}) μ—μ„œ μ˜€λΈŒμ νŠΈμ™€ λΆ€λ”ͺν˜”μŠ΅λ‹ˆλ‹€.(νƒ€μž…: ${obj.type})`
	);
});

onAppObjectTouched

App.onAppObjectTouched.Add(function(sender, key, x, y){});

️ 캐릭터가 ν‚€ 값을 가진 μ˜€λΈŒμ νŠΈμ™€ μΆ©λŒν•  λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

sender

Player

senderλŠ” μ˜€λΈŒμ νŠΈμ™€ λΆ€λ”ͺ힌 ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

key

String

였브젝트의 Key κ°’

x, y

Number

x, yλŠ” μΆ©λŒν•œ x, y μ’Œν‘œλ₯Ό κ°€λ₯΄ν‚΄

예제

라벨 좜λ ₯ 예제

⭐ overlap: true 속성이 μ—†λŠ” μ˜€λΈŒμ νŠΈλŠ” μΆ©λŒν•΄λ„ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

let blueman_dance = App.loadSpritesheet(
	"blueman.png",
	48,
	64,
	[20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37],
	8
);

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(81, function (player) {
	App.sayToAll("ν‚€ 값을 가진 였브젝트 좩돌 ν…ŒμŠ€νŠΈ");
	Map.putObjectWithKey(8, 5, blueman_dance, { overlap: true, key: "blueman" });
});

App.onAppObjectTouched.Add(function (player, key, x, y) {
	App.sayToAll(
		`${player.name}이 ν‚€ 값이 ${key}인 μ˜€λΈŒμ νŠΈμ™€ ${x},${y}μ—μ„œ 좩돌!`
	);
});

onUnitAttacked

App.onUnitAttacked.Add(function(sender, x, y, target){});

ν”Œλ ˆμ΄μ–΄κ°€ 곡격 ν‚€(Z)둜 λ‹€λ₯Έ 캐릭터λ₯Ό 곡격할 λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

sender

Player

senderλŠ” κ³΅κ²©ν•œ ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

x, y

Number

x, yλŠ” κ³΅κ²©ν•œ ν”Œλ ˆμ΄μ–΄μ˜ x, y μ’Œν‘œ 값을 κ°€λ₯΄ν‚΄

target

Player

target은 곡격 받은 ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

sender, x, y, target νŒŒλΌλ―Έν„°μ˜ 이름은 μž„μ˜λ‘œ λ³€κ²½ κ°€λŠ₯

예제

ν”Œλ ˆμ΄μ–΄λ₯Ό 곡격 ν•  λ•Œ λ©”μ‹œμ§€ 좜λ ₯해보기

// Z ν‚€λ‘œ ν”Œλ ˆμ΄μ–΄λ₯Ό 곡격할 λ•Œ μ‹€ν–‰
App.onUnitAttacked.Add(function (sender, x, y, target) {
	App.showCenterLabel(`${sender.name}λ‹˜μ΄ ${target.name}λ‹˜μ„ κ³΅κ²©ν–ˆμŠ΅λ‹ˆλ‹€.`);
	App.sayToAll(`(${x}, ${y})`);
});

onObjectAttacked

App.onObjectAttacked.Add(function(sender, x, y){});

ν”Œλ ˆμ΄μ–΄κ°€ 곡격 ν‚€(Z)둜 였브젝트λ₯Ό 곡격할 λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

sender

Player

senderλŠ” κ³΅κ²©ν•œ ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

x, y

Number

x, yλŠ” 였브젝트의 x, y μ’Œν‘œ 값을 κ°€λ₯΄ν‚΄

sender, x, y νŒŒλΌλ―Έν„°μ˜ 이름은 μž„μ˜λ‘œ λ³€κ²½ κ°€λŠ₯

예제

였브젝트λ₯Ό 곡격할 λ•Œ λ©”μ‹œμ§€ 좜λ ₯해보기

⭐ overlap: true 속성이 μ—†λŠ” μ˜€λΈŒμ νŠΈλŠ” 곡격해도 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

let testObject = App.loadSpritesheet("object.png");

App.onStart.Add(function () {
	Map.putObject(5, 5, testObject, { overlap: true });
});
// Z ν‚€λ‘œ 였브젝트λ₯Ό 곡격할 λ•Œ μ‹€ν–‰
App.onObjectAttacked.Add(function(sender, x, y){
	App.showCenterLabel(
		`${sender.name}λ‹˜μ΄ μ’Œν‘œ: (${x}, ${y})에 μœ„μΉ˜ 였브젝트λ₯Ό κ³΅κ²©ν–ˆμŠ΅λ‹ˆλ‹€.`
	);
})

onSidebarTouched

App.onSidebarTouched.Add(function(player){});

ν”Œλ ˆμ΄μ–΄κ°€ μ‚¬μ΄λ“œλ°” 앱을 클릭(ν„°μΉ˜) ν•  λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

player

Player

μ‚¬μ΄λ“œλ°” 앱을 ν΄λ¦­ν•œ playerλ₯Ό κ°€λ₯΄ν‚΄

예제

μ‚¬μ΄λ“œλ°” μ•± 클릭 μ‹œ μ±„νŒ…μ°½ λ©”μ‹œμ§€ 좜λ ₯ν•˜κΈ°.

App.onSidebarTouched.Add(function (player) {
	App.sayToAll(`${player.name}λ‹˜μ΄ μ‚¬μ΄λ“œλ°” 앱을 ν΄λ¦­ν–ˆμŠ΅λ‹ˆλ‹€.`)
});

κ΄€λ ¨ νŽ˜μ΄μ§€

μ‚¬μ΄λ“œλ°” μ•± 예제

onTriggerObject

App.onTriggerObject.Add(function(player, layerID, x, y, key){});

μ˜€λΈŒμ νŠΈμ™€ F μƒν˜Έμž‘μš© μ‹œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§΅μ—λ””ν„°λ‘œ μ„€μΉ˜ν•œ 였브젝트 λ˜λŠ” μŠ€ν¬λ¦½νŠΈμ—μ„œ type을 INTERACTION_WITH_ZEPSCRIPTS(21)둜 μ„€μΉ˜ν•œ μ˜€λΈŒμ νŠΈμ™€ μƒν˜Έμž‘μš© μ‹œ λ™μž‘ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

player

Player

μ˜€λΈŒμ νŠΈμ™€ μƒν˜Έμž‘μš©ν•œ playerλ₯Ό κ°€λ₯΄ν‚΄

layerID

Number

μ˜€λΈŒμ νŠΈκ°€ μ„€μΉ˜λœ λ ˆμ΄μ–΄ ID 였브젝트인 경우 layerID = 3 상단 였브젝트인 경우 layerID = 5

x, y

Number

μƒν˜Έμž‘μš©ν•œ 였브젝트의 x, y μ’Œν‘œ

key

String

μƒν˜Έμž‘μš©ν•œ 였브젝트의 key κ°’

예제

μ˜€λΈŒμ νŠΈμ™€ F μƒν˜Έμž‘μš©μ‹œ λ©”μ‹œμ§€ 좜λ ₯ν•˜κΈ°

let blueman = App.loadSpritesheet("blueman.png");

App.onJoinPlayer.Add(function (player) {
	Map.putObjectWithKey(player.tileX + 1, player.tileY, blueman, {
		type: ObjectEffectType.INTERACTION_WITH_ZEPSCRIPTS,
		impassable: true,
		key: "objectKey",
	});
});


App.onTriggerObject.Add(function (player, layerID, x, y, key) {
	App.sayToAll(`playerName: ${player.name} / layer: ${layerID} / coordinates:(${x}, ${y}) / key: ${key}`);
});

onAppObjectAttacked

App.onAppObjectAttacked.Add(function (sender, x, y, layer, key) {});

ν”Œλ ˆμ΄μ–΄κ°€ 곡격 ν‚€(Z)둜 ν‚€ 값을 가진 였브젝트λ₯Ό 곡격할 λ•Œ λ™μž‘ν•©λ‹ˆλ‹€.

κ΄€λ ¨ λ¬Έμ„œ: 였브젝트 npcProperty

νŒŒλΌλ―Έν„°

이름
νƒ€μž…
μ„€λͺ…

sender

Player

senderλŠ” κ³΅κ²©ν•œ ν”Œλ ˆμ΄μ–΄λ₯Ό κ°€λ₯΄ν‚΄

x, y

Number

x, yλŠ” 였브젝트의 x, y μ’Œν‘œ 값을 κ°€λ₯΄ν‚΄

layer

Number

μ˜€λΈŒμ νŠΈκ°€ μ„€μΉ˜λœ λ ˆμ΄μ–΄

key

String

κ³΅κ²©ν•œ 였브젝트의 ν‚€ κ°’

예제

ν‚€ 값을 가진 였브젝트λ₯Ό 곡격할 λ•Œ λ©”μ‹œμ§€ 좜λ ₯해보기

⭐ collide: true 속성이 μ—†λŠ” ν‚€ κ°’ μ˜€λΈŒμ νŠΈλŠ” 곡격해도 ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

App.onAppObjectAttacked.Add(function (sender, x, y, layer, key) {
    App.showCenterLabel(
        `sender: ${sender.name} 
        coordinates: (${x}, ${y})
        layer: ${layer}
        key: ${key}`
    );
});

κ΄€λ ¨ νŽ˜μ΄μ§€

μ‚¬μ΄λ“œλ°” μ•± 예제

Last updated