羊了个羊P3 遮挡关系和更多卡片
羊了个羊Scratch开发——第三集
本集中完成的功能
- 遮挡关系的判断
- 生成更多的卡片
功能一 遮挡关系的判断
遮盖是游戏中的一个机制,如果几个卡片同时交叉,那么被遮盖的卡片将不能进行点击进入选择框的操作。
为了实现这个功能,需要建立几个新的变量:
- 私有变量被遮盖:类似于bool产量,表达一张卡片是否被遮盖,值只取yes和no两种,分别表示被遮盖和没被遮盖。
- 私有变量标志变量n:在每次循环中作为迭代器循环寻找是否存在遮盖关系。
- 列表卡片层数:存放每张卡片的层数,生成顺序越靠后,层数越高,在游戏中的显示就越靠前,同位置下方的卡片就会被其遮蔽,也会被同位置上方的卡片遮蔽。
同时新建自制积木编写判断遮挡关系的算法。
被遮盖的卡片无法被点击,在显示上也应该调暗处理。对于被遮盖的卡片,我们调低它的亮度,并且让他无法被点击。
那么基本的程序结构就会变成下方这样,被点击加入选择框的代码在被遮罩变量为no是才会执行。

那么如何判断一个卡片是否被遮罩?对于一个卡片,在视觉上被遮罩的条件就是有至少一张其他的卡片与之重叠,并且这张卡片处于下层,也就是被遮住的一方。
用上面的变量表示,就是对于一张卡片,至少有一张其他卡片满足:
- 两张卡片在x轴和y轴上的中心间距低于卡片宽或长的一半,不是整个边长是因为遮罩范围太大;
- 另一张卡片的层数更高。
通过这两点判定,就可以判断这张卡片被遮罩了。


在游戏过程中,被遮盖的状况会不停更新,使游戏中的图标表现正常。
添加了检验遮盖的逻辑之后,游戏的帧数表现会比较糟糕,是因为每次检测覆盖的自建积木被执行时都会刷新屏幕,可以在自建积木属性里关掉刷新屏幕的选项以优化性能表现。
功能二 增加更多卡片
手动添加卡片需要在x轴坐标,y轴坐标,卡片层数手动添加对应的数据,还需要更改程序,十分麻烦。可以在列表出单击右键导入txt格式的坐标进入,再调整初始化程序即可。


在添加大量卡片时刷新屏幕也会消耗很多时间,可以把初始化函数建立自建积木在游戏开始前执行,这样完成初始化几乎就是一瞬间的事情。
总结
本集课程完成了大量卡片的加入和遮盖处理。除了算法更加复杂之外,大量的数据处理带来频繁的屏幕刷新十分影响游戏运行时的性能,在自建积木时应该对这种情况酌情使用关闭运行时刷新选项的方法进行处理,以改善运行效率。

浙公网安备 33010602011771号