本帖最后由 StarShine 于 2011-9-29 16:50 编辑
看到有童鞋提到菜单的使用,下面分享一个我喜欢的配置方式。结合一个我自己本打算实用的实例和大家说说。
就从大家最熟悉的4MM事件开始吧。原本4MM是随机的,实现代码如下
- local r;
- if JY.Thing[202][WZ7]==1 then --判断游戏难度,1表示简单,2普通,3困难
- r=math.random(2) -- 简单难度2个
- else -- 普通难度以上
- r=math.random(4) -- 四个随机
- end
复制代码
有一段时间,我打算做周芷若的增强补丁,调试时不能总随机阿,于是咱做了一个菜单,事件的完整代码如下。 (纯玩家不想学代码也没关系,你可以把它复制下来,在招4mm前使用,不用SL你想要的了)
- OEVENTLUA[1082]=function() --4MM
- say("你理想中的女孩,是什么样的?",92,0,"???") -- 询问玩家
- local menu = {
- {"千娇百媚", nil, 1}, -- menu的使用格式,注意第二项,如果不是函数的话,就写nil
- {"英姿飒爽", nil, 1}, -- 我们这里不需要子菜单函数,直接写nil
- {"纯真无邪", nil, 1},
- {"野蛮女友", nil, 1}}
- local x1 = (CC.ScreenW - 4*CC.StartMenuFontSize) / 2 -- 新人一个很大的障碍在于,很难选到自己喜欢的菜单位置。比如,你知道让菜单出现在屏幕中间,该如何写吗?
- local y1 = (CC.ScreenH - 4*CC.StartMenuFontSize) / 2 -- 这个就是我多次尝试的心得,这个位置就会让菜单出现在中间,是既简洁又美观的,大家如果不熟悉的话,可以参考这个写法
- local r = ShowMenu(menu, 4, 0, x1, y1, 0, 0, 1, 0, CC.DefaultFont, C_ORANGE, C_WHITE)
- --ShowMenu函数,参数比较多,这里挑重点说一下
- --第一个,菜单项
- -- 第二个 总菜单项个数
- -- 第三个 显示菜单项目,=0表示显示全部菜单项
- -- (x1,y1),(x2,y2) 菜单区域的左上角和右下角坐标,如果x2,y2=0,则根据字符串长度和显示菜单项自动计算x2,y2
- -- 是否绘制边框,0 不绘制,1 绘制。若绘制,则按照(x1,y1,x2,y2)的矩形绘制白色方框,并使方框内背景变暗
- -- Esc键是否起作用 0 不起作用,1起作用
- -- 最后三个就是字体了
- -- 这里我们需要返回值 >0 选中的菜单项(1表示第一项)
- -- 如果不需要返回值的话,可以直接使用
- local bdnl={"姓名", "头像代号", "生命最大值", "内力最大值",
- "内力性质", "攻击力", "轻功","防御力",
- "拳掌功夫", "御剑能力", "耍刀技巧", "特殊兵器",
- "资质","武功1" }
- local mm4={};
- mm4[1]={"周芷若",301,350,600,0,60,50,50,30,30,0,0,71,41};
- mm4[2]={"赵敏",302,270,500,1,70,40,50,0,40,0,0,78,37};
- mm4[3]={"郭襄",303,200,500,2,40,40,40,20,20,20,20,73,12};
- mm4[4]={"陆无双",304,400,700,0,70,40,60,0,0,40,0,64,54};
- -- 这里不再是随机量,而是我们选择的值
- for i=1,14 do
- JY.Person[92][bdnl[i]]=mm4[r][i]
- end
- -- 下面的大家应该比较熟悉了,没必要多写了
- JY.Person[92]["等级"]=1
- for i=1,5 do
- JY.Person[92]["出招动画帧数"..i]=0
- JY.Person[92]["出招动画延迟"..i]=0
- JY.Person[92]["武功音效延迟"..i]=0
- end
- local avi={ {14,6,7},{8,3,4},{0,0,0},{7,4,5}, }
- JY.Person[92]["出招动画帧数1"]=avi[r][1]
- JY.Person[92]["出招动画延迟1"]=avi[r][3]
- JY.Person[92]["武功音效延迟1"]=avi[r][2]
- if r==3 then
- local s={ {0,0,0},{9,2,3},{8,3,4},{8,3,4},{9,5,6}, }
- for i=1,5 do
- JY.Person[92]["出招动画帧数"..i]=s[i][1]
- JY.Person[92]["出招动画延迟"..i]=s[i][3]
- JY.Person[92]["武功音效延迟"..i]=s[i][2]
- end
- end
- say(CC.EVB205,JY.Person[92]["头像代号"],0,"???")
- if instruct_9(57,0) ==false then -- 9(9):是否要求加入?是则跳转到:Label0
- instruct_3(-2,-2,0,0,0,0,0,0,0,0,-2,-2,-2);
- say(CC.EVB206,JY.Person[92]["头像代号"],0,"???")
- return;
- end --:Label0
- if instruct_20(20,0) ==false then -- 20(14):队伍是否满?是则跳转到:Label3
- instruct_14(); -- 14(E):场景变黑
- instruct_3(-2,-2,0,0,0,0,0,0,0,0,0,0,0); -- 3(3):修改事件定义:当前场景:当前场景事件编号
- instruct_0(); -- 0(0)::空语句(清屏)
- instruct_13(); -- 13(D):重新显示场景
- instruct_10(92); -- 10(A):加入人物[李沅芷]
- do return; end
- end --:Label3
- instruct_0(); -- 0(0)::空语句(清屏)
- instruct_14(); -- 14(E):场景变黑
- instruct_3(-2,-2,0,0,0,0,0,0,0,0,0,0,0); -- 3(3):修改事件定义:当前场景:当前场景事件编号
- instruct_3(70,1,1,0,199,0,0,7266,7266,7266,-2,-2,-2); -- 3(3):修改事件定义:场景[小村]:场景事件编号 [1]
- instruct_0(); -- 0(0)::空语句(清屏)
- instruct_13(); -- 13(D):重新显示场景
- end
复制代码
好了,试一下效果吧!
|