lua用树算法来实现红点系统

一、为啥要做红点系统

以前的红点系统不能称之为红点系统,它们是基于某个界面或者某个功能的,不能复用,也就是说没有封装成类,全是一个个独立的系统,这样不管是写还是改动起来是很麻烦的,完全是体力活,而且代码很明显也很丑陋,基本就是重复的代码搬来搬去,无用功

原始那代写项目的人,是C++基础扎实功底深厚的人来写lua的,不会有问题的,后面的很坑了,估计连类和对象是啥都搞不清楚,都是乱写,没有一点封装的思想,反正代码逻辑实现就可以了,能跑起来就可以了,其他啥也不管,bug贼多,代码冗长。所以就出现这样的情况,有些人写的代码工作10年的人都看不懂,有些人写的代码刚参加工作一看秒懂,谁更厉害,自我体会。

所以一个有C/C++基础的人来写lua或者js,是可以保证代码的质量,避免程序弱智bug的,不会污染游戏代码和架构,因为思想这个东西很重要。而完全啥封装类啥也不会的人来写业务逻辑,就会很坑,我之前和另外一个前端除了战斗系统,其他业务逻辑代码几乎是全部删除重写,每写一行,都在说垃圾代码,很多工作量真的不是公司给你的,很多时候取决于原项目代码的好坏和自身代码水平,最主要还是自己的水平

所以强烈建议好好学习C++和数据结构,就算平时很难用得上也要学习,强化思想理论指导实践很重要

我为啥要来实现红点系统呢,那还不是因为前人没有做好
正好我之前写的一篇文章说的一样:
https://blog.csdn.net/xiaoduangg/article/details/110469842
在这里插入图片描述
可能正是因为项目有很多地方可以改进,才能激发我的潜力去改变和优化吧

也就是因为前面的人没有把这些事情完全做好,我才有机会学了数据结构以后用树结构来实现红点系统哈哈

所以说别人没有做好的事情,不要抱怨,你把它做好,就是你的机会和能力的提升,当别人不思进取,害怕新鲜事物和挑战的时候,你冲锋了和闯了,就会比别人多一份幸运。

二、红点系统分析

我们在任何游戏或者说任何一款App,红点提醒功能是必不可少的,关于用户体验,我们最好就是把玩家当成啥不会的萌新来对待,红点就相当于告诉那里有东西可以点。

像我们经常使用的微信或者淘宝,有消息过来,在icon图标的右上角就会显示消息的数量,用的是红色字体,现在几乎所有的手机App都是如此

来到游戏世界,我们经常可以看到主界面某个icon有时有红点,有时又没有
在这里插入图片描述
点击icon,打开界面,界面的左侧或者右侧标签栏,也可能显示红点
在这里插入图片描述
或者在某个分页标签,对应的界面上某个控件也在显示红点
在这里插入图片描述
然而当我们点击了一键升阶按钮以后
在这里插入图片描述
在这里插入图片描述
所有的红点都消失了

三、红点系统思路

1、看出是树

通过分析了解,红点系统是不是非常像数据结构里面的树结构,
我之前总结的树的基础:
https://blog.csdn.net/xiaoduangg/article/details/110566544

游戏主界面的icon图标是根, 是第一层

打开界面以后的各个标签页是结点,是第二层

不同标签页界面上对应的控件是结点,是第三层

由于界面之下还有可能存在各个小界面,那就不是结点下又有结点,一直到叶子结点

2、咋实现呢

我们要封装一个类来专门处理红点,生命周期是整个游戏运行过程。这个类就是把所有需要红点系统的功能名字还有功能对应触发方法都装进一个表里面,当表中某个功能触发方法发生变化时,特定功能就会红点显示或者消失,我们也可以触发方法来检查,来查看红点状态,或者从表里面移除已经注册功能

在这里插入图片描述

四、代码举例

注册红点示范例子:

Reminder:Bind("sevenday_target_1", "sevenday_target", function()
        return GetSevendayTarget1() and 1 or 0
    end)

触发红点示范例子:

Reminder:Fire("sevenday_target_1")

事件监听举例:

local function OnReminderChange(name, value)
	if name == "sevenday_target_1" then
	    day_list_[1].tips:setVisible(value > 0)
	end
end

功能名查询举例:

item.tips:setVisible(Reminder:GetValue("sevenday_target_1") > 0)

五、源码

https://download.csdn.net/download/xiaoduangg/13624519

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用 Lua 实现红点系统的示例代码: ```lua -- 存储红点状态的全局变量 local redDotState = {} -- 设置红点状态 function setRedDotState(key, value) redDotState[key] = value -- 更新红点显示 updateRedDot() end -- 获取红点状态 function getRedDotState(key) return redDotState[key] or false end -- 更新红点显示 function updateRedDot() -- 遍历所有需要显示红点的元素 for _, element in ipairs(redDotElements) do local redDot = element.redDot local redDotKey = element.redDotKey local redDotVisible = getRedDotState(redDotKey) -- 根据红点状态更新红点显示 if redDotVisible then redDot:show() else redDot:hide() end end end -- 示例代码中的需要显示红点的元素 local redDotElements = { { redDot = ui.newImageView({image = "red_dot.png"}), redDotKey = "message", }, { redDot = ui.newImageView({image = "red_dot.png"}), redDotKey = "notification", }, } -- 初始化红点状态 setRedDotState("message", true) setRedDotState("notification", false) ``` 在上述代码中,我们首先定义了一个全局变量 `redDotState` 来存储红点状态。然后,我们定义了三个函数 `setRedDotState`、`getRedDotState` 和 `updateRedDot` 来设置、获取和更新红点状态。在具体实现中,我们使用了一个数组 `redDotElements` 来存储所有需要显示红点的元素,每个元素包含一个图片控件 `redDot` 和一个红点状态的键值 `redDotKey`。在初始化时,我们通过调用 `setRedDotState` 函数来设置红点状态。在更新红点状态时,我们遍历所有需要显示红点的元素,根据红点状态来更新红点的显示。以上代码仅供参考,具体实现方式可以根据应用程序的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoduangg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值