| API说明—事件说明 |
● 前置说明
● OnEnter
● OnExit
● OnLoaded
● OnClick
● OnTouch
● OnSensor
● OnEquip
● OnKeyInput
● OnClientInput
● OnObjInput
● 自定义事件
前置说明
l 所有事件的格式:关注事件的地方需要用全大写,事件的函数处用首字母大写。如OnClick在EntryInfo = {ONCLICK, "state1"}处用全大写,在function MyTable.state1.OnClick(args)处用首字母大写
OnEnter
触发方式
(1) 进入状态时触发。
触发结果
(1) 执行MyTable.state1.OnEnter(args)函数。
Eg:
(1) 见脚本结构说明部分。
OnExit
触发方式
(1) 离开状态时触发。
触发结果
(1) 执行MyTable.state1.OnExit(args)函数。
Eg:
(1) 见脚本结构说明部分。
OnLoaded
触发方式
(2) 加载时触发。
触发结果
ONLOADED只能是首次进入脚本关心的事件,使用脚本编辑器加载脚本后,进入脚本状态。
Eg:
MyTable =
{
EntryInfo = {ONLOADED, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = -1,
NextState = "nil",
EventList = { };
};
}
function MyTable.state1.OnEnter(args)
uSayChannel("onloaded enter");
end
function MyTable.state1.OnExit(args)
end
OnClick
触发方式
(1) 通过选择物品右键菜单中的“使用”选项触发事件。
触发结果
(1) 如果ONCLICK是首次进入脚本关心的事件,则选择物品右键菜单中的“使用”后,进入脚本状态。
(2) 如果ONCLICK是状态内关心的事件,则选择物品右键菜单中的“使用”后,可触发MyTable.state1.OnClick(args)函数。
Eg:
MyTable =
{
EntryInfo = {ONCLICK, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = 10000,
NextState = "nil",
EventList = {ONCLICK};
};
}
function MyTable.state1.OnEnter(args)
uSayChannel("onclick enter");
end
function MyTable.state1.OnExit(args)
end
function MyTable.state1.OnClick(args)
uSayChannel("Click me!");
end
OnTouch
触发方式
(1) 通过左键点击物体触发事件。
触发结果
(3) 如果ONTOUCH是首次进入脚本关心的事件,则左键点击物体后,进入脚本状态。
(4) 如果ONTOUCH是状态内关心的事件,则左键点击物体后,可触发MyTable.state1.OnTouch(args)函数。
Eg:
MyTable =
{
EntryInfo = {ONTOUCH, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = 10000,
NextState = "nil",
EventList = {ONTOUCH};
};
}
function MyTable.state1.OnEnter(args)
uSayChannel("ontouch enter");
end
function MyTable.state1.OnExit(args)
end
function MyTable.state1.OnTouch(args)
uSayChannel("touch me!");
end
OnSensor
触发方式
(1) 通过扫描api触发事件。相关api有uScan、uScanLandUnit、uScanPersonalLand、uScanPoint。
触发结果
(1) 如果扫描条件满足,即扫描到了指定类型的指定id,可触发MyTable.state1.OnSensor(args) 函数。
(2) 可通过args.m_toucherType返回触发者的类型,args.m_toucherId来得到触发者的id,
Eg:
MyTable =
{
EntryInfo = {ONCLICK, "state1"};
StateList = {"state1"};
state1 =
{
Timer = 1000,
TimeOut = 10000,
NextState = "nil",
EventList = {ONSENSOR};
};
}
function MyTable.state1.OnEnter(args)
end
function MyTable.state1.OnExit(args)
end
function MyTable.state1.OnTimer(args)
uScan(4, "NULL");--4为物体类型
end
function MyTable.state1.OnSensor(args)
uSayChannel("hello");
end
OnEquip
触发方式
(1) 通过穿戴饰品触发事件。
触发结果
(1) 如果ONEQUIP是首次进入脚本关心的事件,则穿戴绑定该脚本的饰品后,进入脚本状态。
(2) 如果ONEQUIP是状态内关心的事件,则穿戴绑定该脚本的饰品后,可触发MyTable.state1.OnEquip(args)函数。
Eg:
MyTable =
{
EntryInfo = {ONEQUIP, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = 3000,
NextState = "nil",
EventList = {ONEQUIP};
};
}
function MyTable.state1.OnEnter(args)
uSayChannel("onequip enter");
end
function MyTable.state1.OnExit(args)
end
function MyTable.state1.OnEquip(args)
uSayChannel("I am not naked!");
end
OnKeyInput
触发方式
(1) 使用uSetPlayerEvent(playerId,0)命令开启事件。
触发结果
(1) 按下小键盘1-9后,触发MyTable.state1.OnKeyInput(args)函数。
(2) 通过args.key返回按下的是哪个键。
Eg:
MyTable =
{
EntryInfo = {ONCLICK, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = 10000,
NextState = "nil",
EventList = {ONKEYINPUT};
};
}
function MyTable.state1.OnEnter(args)
uSetPlayerEvent(uGetToucherId(),0);
end
function MyTable.state1.OnExit(args)
end
function MyTable.state1.OnKeyInput(args)
uPrintf(args.key);
--将OnKeyInput事件的返回值表赋值给inputArgs,其中表示按下键盘号的成员为inputArgs.key,输出此成员。如按下小键盘“5”,则会输出一个字符串”5”。
end
OnClientInput
触发方式
(1) 通过标准输入输出框触发事件,打开标准输入输出框的api有uSendMsgBoxOne、uSendMsgBoxTwo、uSendMsgBoxThree。
触发结果
(1) 按下输入输出框确定或取消按钮后,收到来自标准输入输出框的用户输入信息,触发MyTable.state1.OnClientInput(args)函数。
(2) args.m_toucherType返回触发者的类型,args.m_toucherId来得到触发者的id,通过args. m_nOptType返回按钮类型,通过args.text返回输入输出框用户的输入值。
(3) 按钮类型,0为“取消”、1为“确定”。
Eg:
MyTable =
{
EntryInfo = {ONCLICK, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1;
TimeOut = -1;
NextState = "nil";
EventList = {ONCLIENTINPUT} ;
};
};
function MyTable.state1.OnEnter(args)
uSendMsgBoxOne(uGetToucherId(),"输入框","请输入0-9的数字","");
end
function MyTable.state1.OnClientInput(args)
uPrintf(args.m_nOptType);
uPrintf(args.text) ;
end
function MyTable.state1.OnExit(args)
end
OnObjInput
触发方式
(1) 通过另一个脚本的uSendEventToItem(ONOBJINPUT, "物体id","参数1")向脚本发送消息,触发此事件。
触发结果
(1) 收到消息后,触发MyTable.state1.OnObjInput(args)函数,并通过tolua.cast(args,"const uWorldServer::OnInputEventArgs").text返回uSendEventToItem(ONOBJINPUT, "物体id","参数1")中的“参数1”。
Eg:
MyTable =
{
EntryInfo = {ONCLICK, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1;
TimeOut = -1;
NextState = "nil";
EventList = {ONOBJINPUT} ;
};
}
function MyTable.state1.OnEnter(args)
end
function MyTable.state1.OnObjInput(args)
uPrintf(args.text) ;
end
function MyTable.state1.OnExit(args)
end
自定义事件
触发方式
(1) 通过脚本的自定义右键菜单项,触发此事件。右键菜单中留有4个空槽支持自定义事件,所以同一时间只有四个自定义事件有效。
(2) 通过MyEventList = {"1,string1,自定义1","2,string2,自定义2","3,string3,自定义3","4,string4,自定义4"};进行定义,其中各项参数含义为:
l 1代表是第一个自定义事件菜单槽,
l string1是自定义事件处理函数的名称,
l 自定义1代表在菜单中显示的中文
触发结果
(1) 收到对应的自定义消息后,触发自定义函数。
Eg:
MyTable =
{
EntryInfo = {ONLOADED, "state1"};
StateList = {"state1"};
state1 =
{
Timer = -1,
TimeOut = -1,
NextState = "nil",
EventList = { };
MyEventList = {"1,string1,自定义1","2,string2,自定义2","3,string3,自定义3","4,string4,自定义4"};
};
}
function MyTable.state1.string1(args)
uPrintf("自定义1");
end
function MyTable.state1.string2(args)
uPrintf("自定义2");
end
function MyTable.state1.string3(args)
uPrintf("自定义3");
end
function MyTable.state1.string4(args)
uPrintf("自定义4");
end
function MyTable.state1.OnEnter(args)
end
function MyTable.state1.OnExit(args)
end