贩卖机
下面,我们来为游戏添加贩卖机:
- 贩卖机是地图上的一种可交互物体,靠近后按 [E] 使用;
- 玩家可以使用金币购买道具、武器、升级自己。
制作贩卖机界面
下面,我们来制作贩卖机的界面。
- 创建贩卖机角色:
- 可以设计贩卖机页面大概的样子,画在造型编辑器作为蓝图参考:
- 通过广播来打开贩卖机。添加放置组件的代码:
- 添加下面的代码,显示组件:
贩卖机退出动作
- 添加按钮动作:
- 按下关闭按钮时,广播退出贩卖机:
栏目信息
- 贩卖机有四个栏目,不同栏目的商品列表不一样。
- 编写下面的积木,读取不同栏目的商品信息:
- 页面 1:升级类商品
- 页面 2:道具类商品
- 页面 3:武器商品
- 页面 4:其他商品
用列表存放商品的名称、价格、介绍、等级值(等级值是升级类商品独有的属性,存不同等级下的属性值,例如速度值随着等级提升,值分别为9→10→11→12)
- 当按下菜单按钮,设置贩卖机当前页面(1~4),广播切换栏目:
- 收到切换栏目时,菜单按钮设置造型(按下或未按下);并且读取当前栏目的数据
- 刚开始的时候,也要读取一次栏目信息(开始时切换到栏目 1):
放置商品列表组件
- 列表一页可显示 4 个商品,每个商品包含如下组件:
- 放置列表组件:
- 使用下面的广播,用于刷新商品列表显示的内容。例如在上下翻页、切换栏目时,就使用这个广播来刷新显示的商品内容:
切换栏目时,读取商品信息后,刷新显示商品列表:
- 当接收到刷新列表时,列表组件读取自己对应的商品编号(对应商品编号 = 卡片编号 + 偏移量)
例如,列表偏移量为 3,则第一个商品卡片对应第四个商品。
如果对应的商品编号超出了1~商品总数的范围,没有对应的商品,此时卡片隐藏。
- 刷新列表时,列表组件显示对应商品图标、名称、介绍:
刷新价格显示,购买按钮检测自己能否点击:
如果当前页面是武器页(页面为 3),如果玩家已有当前武器,则禁用购买按钮:
- 添加购买按钮的按下动作:
编写购买成功动作:
- 道具页:直接在地上放置道具;
- 武器页:向玩家背包添加武器,并保存云存档(保存玩家背包状态到云端)
- 其他页:(第四页卖锤子、哨戒炮,也属于武器,直接加到背包)
这样,列表就可以显示商品内容,并且可以点击购买,接下来只差添加滚动条功能。
(注:“提升”栏的商品的相关代码,这里暂时跳过不介绍。具体代码可以参考本课源码)
滚动条代码
- 首先,添加下面的代码,这样就可以通过鼠标滚轮,来上下滑动列表:
- 添加滑块(滚动条)代码:
- 上y、下y 记录滑块的最上、最下的坐标,区域高记录滑块滑行区高度:
- 当商品数 ≤ 单页最大显示数(4),隐藏滑块(一页就显示了所有商品,无需滑动页面);否则显示滑块。
- 读取最大偏移数:例如列表有 7 个商品,一页显示 4 个,则最大偏移量为 3。列表偏移值取 0~3。
- 当鼠标拖动滑块时,更新列表卡片偏移数:
其中,下面积木的作用是,将数据限制在一个范围内。例如范围为0~3,输入 4 则得到3。
下面的积木,用于求出卡片偏移数:
- 最后,让滑块根据偏移卡片数,移到正确位置:
- 滑块侦测卡片偏移数的变化,当偏移数发生变化时,刷新列表的显示:
这样,一个可以切换栏目、上下滑动的贩卖机就完成了!
玩家属性页面
为了避免教程过于冗长,教程不再具体介绍贩卖机中,升级玩家属性部分的代码。下面只提供一个实现思路,具体代码可参考本课源码:
- 每个属性有两个数据:属性值(如速度 10)、属性等级(0~4,点击购买按钮等级+1,同时提高属性值)。
使用 CCWData 的云数据保存玩家的各项属性,这样玩家属性升级后,重进游戏仍能读取到之前的属性值:
- 第一次进入游戏,或重置存档时,初始化属性值:
- 不同的等级,升级时有不同价格:
- 点击购买按钮,升级属性时的代码:
玩家代码:
下一节:02 钥匙、门
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG303/Arkos/Lec6/02&type=comment"
title="{射击课高级篇-第六课-02}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>