脚本进阶教程 位置导航:首页 > 资料中心 > 脚本进阶教程
   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

.
公司介绍  |  由我博客  |  招聘信息  |  商务合作 |  媒体合作  |  联系我们  |  新浪微博  |  开心多尼
优万科技(北京)有限公司 版权所有 京ICP证08336号 ISBN 978-7-900648-32-7 《网络文化经营许可证》编号:文网文[2009]076号 新出网证(京)字099号
Copyright (C)2007-2010 UOneNet CO., LTD. All Rights Reserved.