主站
首页
案例中心
UI编辑 - 签到功能
UI编辑 - 签到功能
云梦 更新时间: 2022-07-12 17:58:03

今天我们来讲一下如何运用UI实现签到的功能。首先先弄个UI:

 

对勾表示玩家已经签到过了,当然你也可以改成其它形式。之后打开触发器。

打开这个页面一般会在玩家进入游戏的时候打开。所以先打开页面

 

之后呢,就是让对勾隐藏了。如果这一天没有签到就将对勾隐藏,签到了就让对勾显示。

那么怎么做呢?首先得有个容器存储玩家哪一天签了,哪一天没签。那么这个容器就是字符串组了

 

这里呢,编号几就是代表第几天,然后将默认值输入“无”,代表这一天还没有签到。如果这一天签到了,字符串会是签到的日期。

接下来就是对勾的问题了。我们可以先让对勾隐藏,然后再逐一判断字符串之后显示。

 

下面要判断字符串了,如果这一天已经签到了那就显示对勾。上面说了字符串在没有签到的时候会变成“无”,那要判断是不是已经签到,就是判断字符串是不是“无”

接着运行下个触发器。下个触发器和第一天的差别不大,只是字符串组的位置、对勾元件和下次运行的触发器不同

第一天:

 

 

第二天:

 

第三天:(条件就不截图了,都差不多,只是编号变化)

 

第四天:

 

第五天:

 

第六天:

 

第七天:这里就不用运行下个触发器了,这是最后一个触发器。

 

关闭:关闭就没什么好讲的了

 

现在就到了核心环节,点击签到按钮。

比如现在是第一天,那么点击按钮时,字符串组第一个位置的字符串有三种可能:

  1. “无”,就是还没有签到,如果字符串是“无”,那就可以正常签到之后设置这个字符串为今天日期(年-月-日)
  2. 今天的日期,表示今天已经签过了,玩家签到后又按了一次签到按钮,这种情况直接提示已经签到了之类的。
  3. 既不是”无“也不是今天的日期,这种情况,字符串是其它的日期。这时候我们判断的是第一天的触发器,如果字符串是其它的日期,就要判断第二天的触发器了,以此类推。

那么该如何做呢?那就是点击按钮的时候运行3个触发器

 

在点击按钮里添加运行这个触发器,之后会运行3个触发器

 

因为字符串是可以自己定义的,那么这里定义日期的格式是年月日。比如今天是2021年8月25日,那么字符串 就是2021825。那么先判断是否签到过,也就是判断字符串是不是今天的日期。

 

 

 

签到过了就会提示签到之类的话,这里可以自由改

 

接着没签到过,也就是字符串为”无“,动作就是提示签到成功和添加物品之类。最后别忘了,把对勾设置成显示。

当然为了触发器完整,还得设置字符串为今天的时间

 

那如果这两个条件都不满足,那就会运行下三个触发器了。

 

 

剩下三个触发器和第一个也不差太多,只是所有这个变化:

 

 

一共要弄7组这样的触发器,所以慢慢复制吧(/打脸滑稽

 

第七天签到之后要进行初始化,要把字符串组中所有字符串都设置成”无“,准备下一轮签到。

 

之后要隐藏对勾,之前的打开页面是可以隐藏页面的,所以最后运行触发器。

 

但是,第七天重置后点签到会签到第一天的,而不会提示已签到。所以要再设置一个私有变量,这个私有变量表示上次签到完成的日期。

这里把它设置为这天的日期

 

(后面都是一样的)

 

再在第一天里添加条件就可以了,后面的字符串拼接都是一样的

 

 

 

以下是脚本实现方法:

local UIID = [[6999883093680815218]]--界面ID
local y1, y2, y3, y4, y5, y6, y7 = [[6999883093680815218_27]],[[6999883093680815218_28]],[[6999883093680815218_29]],[[6999883093680815218_30]],[[6999883093680815218_31]],[[6999883093680815218_32]],[[6999883093680815218_33]]--对勾的元件ID
local button_close = [[6999883093680815218_5]]--关闭按钮的ID
local mainID = [[6999883093680815218_23]]--签到按钮ID
local i1, i2, i3, i4, i5, i6, i7 = {}, {}, {}, {}, {}, {}, {}--每一天是否签到私有变量
local last = {}--上次签到一轮的日期
local function registerEvent(event_str,func)--注册事件的函数
  ScriptSupportEvent:registerEvent(event_str,function(event)
    local a, b = pcall(func, event)
    if a == false then
      Chat:sendSystemMsg('#R脚本错误:'..b)
      error('#R脚本错误:'..b)
    end
  end)
end
local function UIclose(event)--关闭页面
  if event.btnelenemt == button_close then
    Player:hideUIView(event.eventobjid,UIID)
  end
end
local function UIopen(event)--打开页面
  Player:openUIView(event.eventobjid,UIID)
  --判断是否为空,这里不用像触发器一样先隐藏后判断
  if i1[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y1)end
  if i2[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y2)end
  if i3[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y3)end
  if i4[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y4)end
  if i5[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y5)end
  if i6[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y6)end
  if i7[event.eventobjid] == nil then Coustomui:hideElement(event.eventobjid, UIID, y7)end
end
local function click(event)--点击签到按钮
  local now = os.date('%Y-%m-%d')
  if event.btnelenemt == mainID and last[event.eventobjid] ~= now then--按钮判断和上次签到一轮的日期判断
    if i1[event.eventobjid] == now or i1[event.eventobjid] == nil then--如果是今天或者是空就进来
      if i1[event.eventobjid] == now then--已经签过了
        Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
       elseif i1[event.eventobjid] == nil then--签到
        i1[event.eventobjid] = now
        Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
        Coustomui:showElement(event.eventobjid, UIID, y1)
      end
     else--既不是今天也不是空
      if i2[event.eventobjid] == now or i2[event.eventobjid] == nil then
        if i2[event.eventobjid] == now then
          Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
         elseif i2[event.eventobjid] == nil then
          i2[event.eventobjid] = now
          Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
          Coustomui:showElement(event.eventobjid, UIID, y2)
        end
       else
        if i3[event.eventobjid] == now or i3[event.eventobjid] == nil then
          if i3[event.eventobjid] == now then
            Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
           elseif i3[event.eventobjid] == nil then
            i3[event.eventobjid] = now
            Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
            Coustomui:showElement(event.eventobjid, UIID, y3)
          end
         else
          if i4[event.eventobjid] == now or i4[event.eventobjid] == nil then
            if i4[event.eventobjid] == now then
              Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
             elseif i4[event.eventobjid] == nil then
              i4[event.eventobjid] = now
              Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
              Coustomui:showElement(event.eventobjid, UIID, y4)
            end
           else
            if i5[event.eventobjid] == now or i5[event.eventobjid] == nil then
              if i5[event.eventobjid] == now then
                Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
               elseif i5[event.eventobjid] == nil then
                i5[event.eventobjid] = now
                Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
                Coustomui:showElement(event.eventobjid, UIID, y5)
              end
             else
              if i6[event.eventobjid] == now or i6[event.eventobjid] == nil then
                if i6[event.eventobjid] == now then
                  Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
                 elseif i6[event.eventobjid] == nil then
                  i6[event.eventobjid] = now
                  Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
                  Coustomui:showElement(event.eventobjid, UIID, y6)
                end
               else
                if i7[event.eventobjid] == now or i7[event.eventobjid] == nil then
                  if i7[event.eventobjid] == now then
                    Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
                   elseif i7[event.eventobjid] == nil then
                    i7[event.eventobjid] = now
                    Player:notifyGameInfo2Self(event.eventobjid, '签到成功~')
                    --初始化
                    Coustomui:showElement(event.eventobjid, UIID, y7)
                    Coustomui:hideElement(event.eventobjid, UIID, y1)
                    Coustomui:hideElement(event.eventobjid, UIID, y2)
                    Coustomui:hideElement(event.eventobjid, UIID, y3)
                    Coustomui:hideElement(event.eventobjid, UIID, y4)
                    Coustomui:hideElement(event.eventobjid, UIID, y5)
                    Coustomui:hideElement(event.eventobjid, UIID, y6)
                    Coustomui:hideElement(event.eventobjid, UIID, y7)
                    i1[event.eventobjid] = nil
                    i2[event.eventobjid] = nil
                    i3[event.eventobjid] = nil
                    i4[event.eventobjid] = nil
                    i5[event.eventobjid] = nil
                    i6[event.eventobjid] = nil
                    i7[event.eventobjid] = nil
                  end
                 else
                  --走到这实际上是出现错误了,初始化
                  Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
                  Coustomui:hideElement(event.eventobjid, UIID, y1)
                  Coustomui:hideElement(event.eventobjid, UIID, y2)
                  Coustomui:hideElement(event.eventobjid, UIID, y3)
                  Coustomui:hideElement(event.eventobjid, UIID, y4)
                  Coustomui:hideElement(event.eventobjid, UIID, y5)
                  Coustomui:hideElement(event.eventobjid, UIID, y6)
                  Coustomui:hideElement(event.eventobjid, UIID, y7)
                  i1[event.eventobjid] = nil
                  i2[event.eventobjid] = nil
                  i3[event.eventobjid] = nil
                  i4[event.eventobjid] = nil
                  i5[event.eventobjid] = nil
                  i6[event.eventobjid] = nil
                  i7[event.eventobjid] = nil
                end
              end
            end
          end
        end
      end
    end
  elseif event.btnelenemt == mainID then--和上一轮正好是一天
    Player:notifyGameInfo2Self(event.eventobjid,'你今天已经签到过了,明天再来吧~')
  end
end
--注册事件
registerEvent('UI.Button.Click',UIclose)
registerEvent('Game.AnyPlayer.EnterGame',UIopen)
registerEvent('UI.Button.Click',click)

 

 

今天的内容就到这里,谢谢~

 

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