实现简单地商店、背包

本教程将教大家如何使用数组和辞典与Xml实现简单的背包内容展示以及商店商品展示。内容包含点击显示背包内容、购买、卖出,更新背包内容。


可以点我下载教学工程,或在引擎开始页面找到【功能示例】->【更多】->【数组辞典示例】

制作思路

将背包道具信息保存在人物辞典中,需要时取出转换为数组。 并在进行更新后,重新放回到人物辞典中。

具体实现

添加图层组

在场景中添加【道具】图层组,用于存放商品和背包内容

加载商店数据

首先,我们要先展示出商店的内容,在本教程中,将从xml文件中加载商店数据。 因此我们添加一个Xml、Ajax组件,并从外部导入我们准备好的xml文件。(您可以定义自己的Xml文件结构)

场景开始时,通过Ajax组件加载xml文件数据,并导入到XML组件中。

添加商店显示按钮

3种类型的商店需要分别点击不同的按钮来控制,为此我们添加一个商店按钮

在该按钮下添加实例变量:商店名称,用于区分不同的商店。

拖3个实例进入场景,分别设置实例变量的值为:武器、防具、药水。

添加商店道具、道具描述、买入按钮。

新建【道具精灵】精灵、【道具描述】文本框、【买入按钮】按钮组件。

为【道具】添加实例变量,用于在后面获取名称、价格等信息。

【买入按钮】与【卖出按钮】同样添加实例变量

放入实例仓库场景中,后面会通过事件表生成。

添加数组用于显示商店内容

添加一个数组,我们会将商店内容先放入数组,然后循环数组,将内容显示在场景中

实现展示商品事件

当点击商店按钮时,调用动作组【显示物品】,传入的参数为实例变量【商店名称】

接下来实现动作组【显示物品】。 添加全局变量【当前显示类型】,动作组中,将类型设置为动作组的参数(也就是点击的商店按钮的实例变量),并将【当前商店】数组的容量初始化为(0,3,1)

根据要展示的商店道具类型,循环指定节点,并将内容添加到数组中。

在显示商店道具前,先销毁之前已经存在于场景中的商品内容。

在场景指定位置循环生成商店商品、道具描述、买入按钮, 并为对象的实例变量赋值。

显示对应背包内容

在显示出商店内容后,同时需要显示同类型的背包内容。根据教程的制作思路,我们将背包数组信息转化为字符串保存在辞典中,并在需要用到时取出,放入临时数组。因此我们创建一个辞典对象和一个临时背包数组。

设置【当前背包】的初始属性

继续在【显示物品】动作组中添加事件。 首先在辞典【人物属性】中查找对应类型的数据,如果存在,则取出放入【当前背包】数组。 如果不存在,将【当前背包】的容量设置为初始值(也就是数组中没有任何内容的状态),然后放入辞典。

与商店数组一样,循环创建背包内容,并为实例变量赋值。

然后,在场景初始化后,默认让他显示武器商店

完成了上述操作后,预览游戏即可看到效果:当点击【武器商店】、【防具商店】、【药水商店】按钮时,会显示对应的商店内容。

由于目前人物背包中没有数据,因此不管点击哪一个商店按钮,背包显示界面都是没有内容的。下面我们实现点击买入按钮时,将商品加入背包的功能。

添加金钱信息到辞典中

为了购买商品,我们在游戏开始时在【人物属性】辞典中加入金钱数据。

添加金钱显示文本对象,放入场景。

每帧更新金钱信息

当金钱不够时,禁用买入按钮,反之启用。

购买物品

当点击买入按钮时,购买商品。

在【购买物品】动作组中,先通过名称获取要购买的道具对象。

在子事件下面,从辞典中减少持有的金钱数量

如果当前背包中存在该商品,则数量加一。 如果不存在,将商品信息添加到数组中。

在更新完背包数据后,将背包数据重新放入辞典中保存。

最后重新显示一次商店和背包界面

下图为【购买物品】动作组全图

卖出物品

点击卖出按钮时,卖出对应物品。

同购买一样,在【卖出物品】动作组中先获取要卖出的道具对象。

增加金钱

如果该商品在背包中只有一个,则删除这条数据。 否则,数量减一。

最后更新背包数据到辞典中,并刷新商店和背包界面。

下图为【卖出物品】事件表全图

以上就是通过数组、辞典和XML实现背包和商店的教程的全部内容。建议下载教学工程,详细查看事件中的具体参数、表达式等内容。