「自制卡牌游戏DIY」自动生成卡牌(4)
08/0325 浏览主题教程
我正在尝试使用『星火编辑器』将一张游戏卡牌变成一款卡牌游戏。
在前面几期中,我们已经实现了自动生成卡牌功能的UI设计和服务端部分,而且客户端部分的逻辑实现也在高歌猛进。那么这期我们继续为实现这一阶段的目标而努力——做出一个如 P2 这样带滚动条、动态显示卡牌信息、可选择卡牌上下场的卡牌包,而且卡包中的卡牌还要根据玩家已有卡牌自动生成!话不多说,直接开干。
我们还是接着上次客户端加载卡牌信息的方法继续编写逻辑。通过前面大段的选择分支和条件分支,已经可以通过遍历卡牌包中各个卡牌来动态显示卡牌包中卡牌的一系列信息,但仿佛还缺少了一些东西。
测试后发现,这些卡牌点了完全没反应。那是因为我们没有为这些生成的卡牌创建点击事件。现在我们为生成卡牌实例的任意字符串进行赋值,这张卡位于卡包的位置是几就赋值为几(这里可直接通过元素在数组的索引进行赋值)。在点击事件的函数中加入一个发送自定义事件的逻辑(P3),让玩家在每次点击卡牌时都发送一次客户端点击卡牌包卡牌的事件,并且传入卡牌索引和当前格卡牌的参数,这样即可使程序同时接收到玩家点击卡牌的信息及它在卡包中的位置。
但现在仍然有一个问题,那就是玩家每打开一次卡牌包都要生成一堆卡牌实例,万一玩家反复打开了N次卡牌包,那岂不是会堆积巨多卡牌实例?
为了解决此问题,在方法开始加入了一个判断:如果有残留的卡牌包卡牌控件实例,那就先销毁它再生成新的(P4)在循环遍历中,根据卡牌索引依次取到每一张卡牌的控件实例,如果它不为空就销毁。这样即可确保此方法执行时将在一个空卡包生成新的卡牌实例。
下面添加调用此方法的触发器(P5)。当卡牌包没打开时,点击卡牌包按钮就会打开卡牌包并执行刚才编写的方法,同时让卡牌包相关的控件面板显示(P6)。这里还可将服务端传过来的玩家已有卡牌数据存储到客户端。
打开卡牌包的功能都写好了,再顺便写个退出卡牌包的方法不是易如反掌?对了,我们要再做个返回按钮来让玩家关闭卡包:当点击返回按钮时就执行关闭卡牌包的逻辑(P7)
至此,自动生成卡牌的功能已经顺利实现。尽管离完成这款卡牌游戏尚有距离,但我还是想用一句我很喜欢的话来结尾:为者常成,行者常至。我会坚持更新这个系列,也希望我的分享能让你有收获,那么下一期再见。如果觉得不错,欢迎点赞关注哦!