主站
首页
案例中心
UI编辑 - 抽奖转盘
UI编辑 - 抽奖转盘
树林花园 更新时间: 2022-08-16 09:57:42

效果演示:

 

 

本攻略讲解触发器共3个,可分别命名为“转盘程序”、“指针快速旋转”和“角度判定”。

根据转盘原理我们可以把攻略划为两部分:在系统里运行的转盘开始都会旋转一会,最后才会让指针停留在某个奖项的区域里。开始的旋转其实对结果判定没有影响的,这么做的意义是先吊一下你的胃口,最后指针落在哪完全是按照概率来判定的。下面是正式教学。

(本篇攻略部分内容与“制作动画”相似,所以这里就不再详细讲述相似部分;另外本转盘在同一地图中每次仅支持一人抽奖,玩家可按需修改触发器内容实现多人同时开抽)

 

先添加一些抽奖项元件和开始按钮还有指针图案对UI进行布局(注意指针的位置,最好把指针元件的左上点对齐转盘的中心点,因为元件旋转是以元件的左上点作为圆心旋转的)

 

接着通过“开始”按钮新增一个UI触发器“转盘程序”,然后直接添加动作“隐藏元件”,把“点击开始”这个按钮隐藏起来,防止玩家多次点击。

 

 

 

继续添加动作“循环运行触发器”,但暂不设置参数

 

新建一个数值变量“指针旋转度数”,用来记录指针每次旋转的度数。

 

新建触发器“指针快速旋转”,添加动作“设置数值”,参数设置可参照图示,这个动作是用来增加指针的度数的,后面的“5”那里不用要太大的数值,360的因数里面取个位数的填上去就行了,不然不连贯

 

接着添加动作“旋转元件”,用于让指针旋转。

 

 

因为程序的执行速度是非常快的,为了让玩家看得清楚那个指针,所以我们要加一个短暂的等待时间(1~3毫秒,也就是001~0.003秒就行了,太长的话就不自然了)作为停顿

 

回到“转盘程序”触发器的“循环运行触发器”动作的参数页里,起始值我们默认为1方便设置,结束值的设置可以通过公式“360÷旋转角度(就是“指针快速旋转”触发器里指针的单次旋转度数)×想要旋转的圈数(2~4就行了,太多会显得累赘)”计算得来

 

因为一个圆角的角度是360°,当我们的变量的值增加到大于等于360时我们要让这个变量的值重新归0,否则程序就会运行不了了。新建触发器“角度判断”,然后添加动作“数值对比”,添加完成后如图所示设置参数

 

接着添加动作“设置数值”,设置变量“指针旋转度数”的值归0

 

回到触发器“指针快速旋转”,点击第一条动作旁边的三个点,选择“插入新动作”,在“设置数值”这个动作之前插入一个动作“运行触发器”,用来在下面增加数值之前先判定变量的值是否达到360

 

 

“障眼法”结束后就到了指针随机抽奖了。新建一个数值变量“奖项序号”,用来记录最终的开奖结果

 

我们一共设置了8个奖项,按照普通抽奖的原理我们只需要给“奖项序号”变量设为1~8的随机数就好了。添加动作“设置数值”,然后如图所示设置动作参数

 

 

再添加一个“循环运行触发器”动作,不过这次这个动作是用来让指针落在指定区域里用的。参数设置可参照图示。

 

最后为了保障每次都是让指针从0°开始旋转,我们可以让指针先等待1秒之后让指针的角度回到0°。

 

后面的获得奖励的部分就交给大家自己完成啦,这里就不详细讲述了,大家也可以按照自己的设置来增减/修改触发器的内容。(别忘了抽奖结束后要重新显示“点击开始”按钮哦)

 

完整触发器:

 

 

 

成品展示:

 

LUA脚本

--替换下列初始变量中的ID为地图中对应元件的ID以及把数值改成自己想要的数值即可使用

local awards_elementID={"6988406237123547577_29","6988406237123547577_30","6988406237123547577_31","6988406237123547577_32","6988406237123547577_33","6988406237123547577_34","6988406237123547577_35","6988406237123547577_36"}--奖项元件
local start_elementID="6988406237123547577_39"--开始按钮
local pointer="6988406237123547577_38"--指针
degree=0--默认指针度数为0无需修改
local turns=3--初始指针旋转的圈数
local angle=45--奖项与奖项之间的夹角度数
local rotation=5--指针每次顺时针旋转的度数
local nu=8--总的奖项数

local function prog(e)
    Customui:hideElement(e.eventobjid,e.CustomUI,start_elementID)
    for p=1,360/rotation*turns do--可按需增加延时程序
        if degree==360 then
            degree=0
        end
        degree=degree+rotation
        Customui:rotateElement(e.eventobjid,e.CustomUI,pointer,degree)
end
    local awards=math.random(1,nu)
    for r=1,angle/rotation do
        Customui:rotateElement(e.eventobjid,e.CustomUI,pointer,degree)
    end
    --后面部分自行补充(例如发奖励之类的),这里就不写下去了
end
ScriptSupportEvent:registerEvent([=[UI.Button.Click]=],prog)

 

站点有内容要更新是否更新。
更新
忽略