> 神唱K歌 > 【脚本学习】自动切换照片的相册2——点击输入切换时间

【脚本学习】自动切换照片的相册2——点击输入切换时间

这次我们来做一个更智能化的相册,自动切换照片,并且点击会弹出一个输入框,根据输入的时间不同,相册自动更改切换照片的时间。感觉还不错吧,哈,脚本如下:

MyTable =
{
EntryInfo = {ONLOADED, "state1"};
StateList = {"state1"};
state1 =
{
Timer = 1000, --当这里为1000时,表示每1000毫秒执行一次下面的onTimer(args)函数。
TimeOut = -1,
NextState = "nil",
EventList = {ONTOUCH,ONCLIENTINPUT};
};
}

function MyTable.state1.OnEnter(args)
counter1=0; --设置变量用以计数。
counter2=0; --设置变量用以计数。
uAddItemProperty("时间","5",uGetItemId());--给物品添加一个名为“时间”的属性,属性值为“5”。
end
function MyTable.state1.OnExit(args)
end

function MyTable.state1.OnTouch(args) --左键点击执行此函数。
uSendMsgBoxThree(uGetToucherId(),"时间","请设置相片切换的时间(只能从1~99选择)","");--向用户弹出输入框,具体请看后文思路说明。
end

function MyTable.state1.OnClientInput(args) --此函数将根据用户输入情况进行反应。
if args. m_nOptType==0 then --若用户取消输入则回到状态1。args. m_nOptType是uSendMsgBoxThree的返回值之一,具体请看后文思路说明。
uTransState("state1");
end
if args. m_nOptType==1 then --若用户确认输入,则进行以下判断。
time_sz=args.text;
time_z= uTonumber(time_sz)
if uTonumber(args.text)==nil then --若输入不合法,则。。。
uSayChannel("输入不合法,请输入一个数字")
uTransState("state1")
elseif time_z<1 or time_z>99 then --若输入超出范围,则。。。
uSayChannel("时间超出范围,请重新输入")
uTransState("state1")
else --若是其他情况,则。。。
uSetItemProperty("时间",time_sz,uGetItemId());--将用户输入信息存入物品的“时间”属性。
uSayChannel("输入已成功。");
end
end
end

function MyTable.state1.OnTimer(args)--每1秒执行一次此函数。
counter1=counter1+1;
time=uGetItemProperty("时间",uGetItemId());--读取物品的“时间”属性值,请赋值给time。
h=uTonumber(time);
if counter1>hthen
counter1=0;
end
--uSayChannel("time="..time);
--uSayChannel("counter1="..counter1);
--uSayChannel("counter2="..counter2); --有兴趣的同学可以把uSayChannel前面的两杆去掉,看看脚本是如何通过计数来控制语句的。
h=uTonumber(time);
if counter1==h then
counter1=0;
counter2=counter2+1;
if counter2==1 then
uSetItemTexture(uGetItemId(),"uw://chljffor@163.com/3659175051821856_穿透云雾.dds");--当counter2值为1时使用这张贴图。
elseif counter2==2then
uSetItemTexture(uGetItemId(),"uw://chljffor@163.com/3659175051821855_伤心.dds");--当counter2值为2时使用这张贴图。
elseif counter2==3then
counter2=0;
uSetItemTexture(uGetItemId(),"uw://chljffor@163.com/3659175051821858_猎户座.dds");--当counter2值为3时使用这张贴图。
end
end
end

将紫色字体部分换上自己的相片地址就能正常使用咯~

脚本思路讲解:
要想实现预想的功能,有三个大问题要解决:
1.物品如何向玩家弹出输入框,并接收到输入的信息?
uWorld提供了专门的API,如下:(另外还有几种不同的框体,游戏帮助里也有详细说明)
函数:
uSendMsgBoxThree(playerId,MsgboxName,MsgTextName,MsgTextValue);
参数:
(1) playerId:字符串,目标用户id。
(2) MsgboxName:字符串,输入输出框名称。
(3) TextName:字符串,输入输出内容标题。
(4) TextValue:字符串,输入输出框内初始内容。
返回值:
通过局部变量args返回操作内容。其中:args.m_toucherType返回触发者的类型,args.m_toucherId来得到触发者的id,args.m_nType返回框体类型,值为3;args.m_nOptType返回用户点击的框体按钮,0-取消、1-确定;args.text返回用户输入内容,值为输入的字符串。
备注:
(1) 当用户完成输入后会触发ONCLIENTINPUT事件。
Eg:
(1) uSendMsgBoxThree(uGetToucherId(),"输入输出框","输入输出框内容","输出框里文本框的内容");
--向脚本触发者弹出输入输出框,名称为“输入输出框”,内容标题为“输入输出框内容”,初始内容为“输出框里文本框的内容”。
2.如何触发这个输入框呢?
这个脚本选择的是左键点击触发,结构如下:
state1 = {
。。。。。。
EventList = {ONTOUCH,ONCLIENTINPUT}; --ONTOUCH即,在状态1(state1)时左键点击执行后文function MyTable.state1.OnTouch(args)函数。
};
3.如何通过输入的数值控制照片的切换时间呢?
在上一篇http://3d-ktv.com/html/shenchang/322.html简易相册2里,我们提供了一种通过计数循环来控制播放照片的结构,但是那里的时间间隔是固定的。所以我们借用结构的时候,需要在播放结构外面加一层if判断来接收我们输入的时间。
--uSayChannel("time="..time);
--uSayChannel("counter1="..counter1);
--uSayChannel("counter2="..counter2);

文中这三句,只要把前面的两杆“--”去掉,就可以在游戏聊天栏里很清晰的看到脚本如何通过计数来控制照片的播放。