游戏开发中,策划就是导演,策划为了掌控游戏世界的规则,从而引入了策划配置文件.

Noark内置了CSV文件到JavaBean映射,由Excel到CSV文件请参考导表工具的实现

编码模板类文件ItemTemplate.java

@TplFile("Item.tpl")
public class ItemTemplate {
	/** 道具编号 */
	@TplAttr(name = "Id")
	private String id;
	/** 道具名称 */
	@TplAttr(name = "Name")
	private String name;
	/** 品质 */
	@TplAttr(name = "Quality")
	private int quality;
	/** 道具图标 */
	@TplAttr(name = "ICON")
	private String icon;
	
	...省略GetSet方法
}

道具模板管理类ItemTemplateManager.java

@Service
public class ItemTemplateManager extends AbstractTemplateManager {

	private Map<String, ItemTemplate> itemTemplates;

	@Override
	public String getModuleName() {
		return "道具系统";
	}

	@Override
	public void loadData() {
		this.itemTemplates = templateLoader.loadAll(ItemTemplate.class, ItemTemplate::getId);
	}

	public ItemTemplate getItemTemplate(String id) {
		return itemTemplates.get(id);
	}
}

是不是很简单…

使用场景1:道具表被策划分为多个Sheet来存放,比如普通道具一个Sheet,宝石一个Sheet,装备一个Sheet,如何来写模板呢…

建筑策划同学道具共有配置把名称搞一致,方便抽象.

先来一个抽象类AbsItemTemplate,共有属性放这里,其他每一个功能实现一个子类…

如果策划作死,两个表中同一功能的配置名称不一,那就定义一个接口子类实现,只是日后维护有点蛋疼,祝你性福…

结论:Noark是支持父类中编写属性配置的

使用场景2:策划把XX属性配置给删了,但又想在日后加回来了…

直接参考编码

@TplAttr(name = "Level", required=false)
private int level = 1;

配置字段默认是必选项,但可以手工设置为false

结论:Noark是支持属性为非必选,在没有配置的情况下使用属性的默认值

使用场景3:策划想配置一个数组,比如 1,2,3,5,6,7

@TplAttr(name = "UnlockList")
private IntList unlockList;

IntList为Noark提供的int[]接口,具体由IntArrayList类实现,用法参考JDK的ArrayList

使用场景4:除了int, long, boolean, String, IntList还能使用哪些类型

目前默认支持JDK的基本数据类型和相关数组类型,自定义类型请参考转化器介绍

理论上支持所有数据类型的映射…

转载请注明原地址: http://blog.noark.xyz/article/2018/9/17/noark入门之策划配置/