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
ํ๋ ์ด์ด๊ฐ ์ฑํ ์ ์ ๋ ฅํ ๋ ๋์ํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
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
์บ๋ฆญํฐ๋ค๋ผ๋ฆฌ ์ถฉ๋ํ ๋ ๋์ํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
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
์บ๋ฆญํฐ๊ฐ ์ค๋ธ์ ํธ์ ์ถฉ๋ ๋๋ ์ํธ์์ฉ ํ ๋ ํ ๋ฒ ์คํ๋ฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
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
๏ธ ์บ๋ฆญํฐ๊ฐ ํค ๊ฐ์ ๊ฐ์ง ์ค๋ธ์ ํธ์ ์ถฉ๋ํ ๋ ๋์ํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
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
ํ๋ ์ด์ด๊ฐ ๊ณต๊ฒฉ ํค(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
ํ๋ ์ด์ด๊ฐ ๊ณต๊ฒฉ ํค(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
ํ๋ ์ด์ด๊ฐ ์ฌ์ด๋๋ฐ ์ฑ์ ํด๋ฆญ(ํฐ์น) ํ ๋ ๋์ํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
player
Player
์ฌ์ด๋๋ฐ ์ฑ์ ํด๋ฆญํ player๋ฅผ ๊ฐ๋ฅดํด
์์
์ฌ์ด๋๋ฐ ์ฑ ํด๋ฆญ ์ ์ฑํ ์ฐฝ ๋ฉ์์ง ์ถ๋ ฅํ๊ธฐ.
App.onSidebarTouched.Add(function (player) {
App.sayToAll(`${player.name}๋์ด ์ฌ์ด๋๋ฐ ์ฑ์ ํด๋ฆญํ์ต๋๋ค.`)
});
๊ด๋ จ ํ์ด์ง
onTriggerObject
์ค๋ธ์ ํธ์ 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
ํ๋ ์ด์ด๊ฐ ๊ณต๊ฒฉ ํค(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
Was this helpful?