红点提醒的要求是达到条件需要在按钮上显示红点 提醒玩家操作
达到条件->显示红点 这是明显的观察者模式
“观察者”模式是我们在开发的时候经常需要用到的。使用Watch.js那么我们就可以实现在“每当对象属性改变的时候,执行你的函数”。
设计思路
按钮上绑定 注册监听 何时显示何时隐藏红点
操作后更新 操作响应/材料变化 变量更新
难点:
1.功能复杂的模块是层层嵌套的关系
比如:人物页签-装备子模块-神装子模块-1号装备位上可升级
这里当1号装备位可升级时 红点的出现和消失逻辑都需要一层层向上传递
这种逻辑关系可以通过配置文件来生成代码 达到自动维护的目的
2.满足红点条件的一般有这么几类 消耗物品 角色等级 金币或钻石数目 开服日期 通关
其中消耗物品占比80% 针对这一类可再设计
我的做法是维护一张表 物品ID对应操作名称
在同步物品变化时check_item()找到对应的操作 在操作中check下一次是否满足红点显示
mibao_upskill() {
return ro.redpoints.client.mibao_upskill = Number(ro.role.mibao.check_enble_skillup(-1));
}
module ro {
export class ConstRedPoint {
public static MATERIAL3 = "client.Material3";
public static MATERIAL4 = "client.Material4";
public static MATERIAL6 = "client.Material6";
public static MATERIAL1 = "client.Material1";
public static MATERIAL5 = "client.Material5";
public static MATERIAL2 = "client.Material2";
public static EXPFUBEN1 = "client.ExpFuben1";
public static EXPFUBEN3 = "client.ExpFuben3";
public static EXPFUBEN2 = "client.ExpFuben2";
public static TOWERDAYREWARD = "client.TowerDayReward";
public static TOWERTURN = "client.TowerTurn";
public static TOWERPOINT = "client.TowerPoint";
public static DUOLICATE_MATERFUBEN = "client.duolicate_MaterFuben";
public static DUOLICATE_EXPFUBEN = "client.duolicate_ExpFuben";
public static DUOLICATE_TOWER = "client.duolicate_Tower";
public static ZHUZAO_UPLEVEL = "client.zhuzao_uplevel";
public static QIANGHUA_UPLEVEL = "client.qianghua_uplevel";
public static JINGLIAN_UPLEVEL = "client.jinglian_uplevel";
public static FORGE_CAST = "client.forge_cast";
public static FORGE_ENCHAN = "client.forge_enchan";
public static FORGE_CARD = "client.forge_card";