Java8与游戏开发(一)

经常要为玩家角色存储一些数据,比如神器,装备,时装,他们都是GameObject,就像这样:

GameObject 类代码:

public enum DataState {
        ......
};

protected DataState curDataState = DataState.dsModify;

    ......

protected abstract int saveInsert();

protected abstract int saveDelete();

protected abstract int saveModify();

public abstract long getId();

public abstract void setAllModifyState();

public abstract void clearModifyState();

public abstract int deleteObject();

@JsonIgnore
protected boolean bSaveDBFlag = false;

@JsonIgnore
public boolean isSaveDBFlag() {
    return bSaveDBFlag;
}

@JsonIgnore
public String getClassFlag() {
    ......
}

@JsonIgnore
private SqlExecuter getExecuter() {
    ......
}

/**
 * 标记存库成功,设置对应的状态
 */
public final void saveDBSuccessed() {
    ......
}

/**
 * 如果所存储的Manager容器默认IdMap有记录数组Index索引,那么就可以通过这个index索引来快速找到对象在ArrayList中的位置
 */
public int arrayIndex = 0;

public void autoSave() {
    ......
}

public void saveToDB() {
    ......
}

/**
 * 计划存储
 * 
 * @return
 */
public void saveToDBInPlan() {
    ......
}

public void realSaveToDB() {
    ......
}

/**
 * 把对象放入到执行任务中
 */
public int AddObjToTask() {
        ......
}

每一个角色都要有自己的GameObject,也就有自己的容器GameObjectMgr,每一个角色都有自己的GameObjectMgr,存储所有角色的游戏物品的类,可以设计为GameDataHolder:

所有角色的游戏物品的载体类GameDataHolder 代码:

//manager的class,角色id,manager
public static Map<Class<?>, Map<Long, Object>> roleMap = new HashMap<>();

public static <T extends GameObjectMgr<?>> T getMgr(Class<T> clz, Long roleId, Supplier<T> mgrGenerator) {
    Map<Long, Object> mgrMap = roleMap.get(clz);
    if (mgrMap == null) {
        mgrMap = new HashMap<>();
        roleMap.put(clz, mgrMap);
    }
    Object t = mgrMap.get(roleId);
    if (t == null) {
        t = mgrGenerator.get();
    }
    return clz.cast(t);
}

1.使用享元模式,而不是多个单例,代码量大大减少,符合单一职责原则。

2.java的Supplier的惰性加载。

3.外部传入mgrGenerator对象,生成GameObjectMgr对象。

4.使用Class对象cast方法,防止对象转换时出现的警告。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 回家了,总得写点东西吧!我这么说是为了督促自己一定要写下来。 我一直很想写,可能这喜好是源于高中读书笔记。那时候因...
    得力007阅读 512评论 2赞 0
  • 选择困难 买衣服时总是要犯选择困难症,但有时是,都不太满意需要选出那个差强人意的,有时是,想买的太多得逼自己...
    aha是sw阅读 243评论 0赞 0
  • 原本鸡飞狗跳,女人呼、小孩喊的斋南村,这几天异常清静。静得连烟囱上的炊烟也懒得袅袅绕绕了。 八个月大的五景半醒半睡...
    邢欣Magpie阅读 427评论 2赞 2
  • 在去到非洲之前,我对这里充满了想象。大家印象中的这里似乎都是贫穷,野蛮,数不尽的黑人。直到我到了摩洛哥之后才打破了...
    Crystal1283阅读 577评论 0赞 2
  • 哈喽小伙伴们,今天你糖来说一下最近火的猝不及防的“娱乐圈四大钢铁直男”,闻名不如见面,赶紧来看看! 来来来,给大家...
    冰糖少女猫阅读 1,386评论 0赞 0

友情链接更多精彩内容