撰写了文章 发布于 2019-07-21 19:24:55
《斧头人(Axe Man)》七月开发日志
(define (Haruhi world) (if (boring? world) destroy (new SOS)))
游戏简介
《斧头人(Axe Man)》(Github 页面,英文博客)是一款正在开发的单人回合制 Unity Roguelike 游戏。今年四月看凉宫春日,一边看一边构思游戏原型;五月底开始写代码,到今天已经两个月了。从游戏角度看,玩家需要用四种优势和四种劣势自行组合出四个技能,消灭地下城的敌人;从编程角度看,我大量使用了 《真菌洞窟(Fungus Cave)》 制作末期才学会的事件模式(event pattern)。目前画好了游戏主界面,按方向键或 QWER 能够移动玩家人物或使用技能。更多功能尚未完成。
图 1:演示动画,七月。
自学计算机知识
先前写过学习 算法 和 设计模式 的文章。已有的电脑知识做游戏基本够用,不过呢,看到程序员锅锅每天早上先按四十二个修饰键煮咖啡,然后立即写了一个新接口(interface),我不禁要问:为什么你会这么熟练呢?我很好奇!于是找到了 这份书单。
这些书是好书,但是挺难读的,所以我定了一个学习计划。第一,每个主题限定在三个月内学完一遍。第二,不做课后题,但是每读完一章,画图总结一下。限定时间是因为哪怕延长到六个月,未必能收获双倍的知识,反而有可能消磨学习热情。不如先快速浏览一遍,按自己的理解画图标记重点,之后重新深入学习。
图 2:Nand2Tetris,第 4 章。
到现在为止,我看完了 SICP 前三章,正在学习 Nand2Tetris。因为没做题,对写代码帮助有限,但是满足了很多好奇心。比方说怎样用过程(procedure)而不是数据(data)定义有理数;怎样用接口组合一系列模块,然后添加抽象层隐藏细节;怎样让计算姬理解二进制代码。这些奇妙的知识常常令我感慨——白金齿轮驱动的神之机器啊,你真美丽。暂停吧,世界!
最后,上述两本书都有配套的讲课视频,推荐看一下:SICP 公开课,Nand2Tetris 公开课。
图 3:我喜欢哔哩哔哩,还有大家!
搜索 Unity 游戏对象
(本章内容翻译自 How To Search Game Objects In Unity,略有删减。)
Unity 提供了若干方法搜索游戏对象,不过这些方法在某些场合无法满足我们的需求。比方说,FindGameObjectsWithTag() 只能接受一个参数,如果我们希望用两个标签描述一个对象该怎么办?对于一个 2D 战棋类游戏,怎样找到处于 [2, 2] 位置的所有对象?
假设我们已经设计好了一个自定义方法 Search(),显然它应该输出一系列符合搜索条件的游戏对象,那么输入是什么呢?上文说了,输入可以是一对整数,或者是自定义的数据标签。所以我们可以这样定义 ISearchObject:
图 4:ISearchObject。
接下来要解决两个问题。第一,怎样创建一个对象集合?第二,当我们遍历上述集合中的每一个元素时,怎样判断当前元素是否符合搜索条件?这是下图所示的解决方案之一。
图 5:搜索系统结构。
既然游戏对象的位置能够表示为一对整数,每次创建新对象时,我们不妨把它存放进二维数组 GameObject [,] dungeonBoard。接下来,我们能够直接获取特定位置的对象,或者遍历整个数组,找到符合条件的对象。有两个注意事项。第一,如果多个对象可能堆叠在同一位置,我们可以把它们存入不同的二维数组,或者把单个二维数组的元素从游戏对象改成字典:Dictionary<CustomTag, GameObject>。第二,当我们移动或删除游戏对象时,必须及时更新二维数组的内容。
判断对象是否符合条件很简单。首先,我们写一个方法(ConvertCoordinate)把游戏对象的 Vector3 位置转化成两个整数;其次,我们给每个对象添加一个组件(MetaInfo),其中包含了该对象的自定义数据标签。
向二维数组里添加或移除游戏对象时容易犯错,处理堆叠对象又挺麻烦的。换一个思路,为什么不能发布搜索事件(SearchObject),让每个对象订阅事件并作出反应呢(SubscribeSearch)?(见图 5 右侧的路线。)搜索事件的参数定义如下:
图 6:搜索事件的参数。
每个游戏对象检查自己的位置和数据标签,如果符合条件,把自己压进 Stack<GameObject> Data。
总结一下,每次创建新对象时,我们可以把它存入某个集合,或者让它订阅某些事件。接下来在需要的时候,遍历集合中的所有元素,或者发布搜索事件,由此找到需要的对象。
思考题
最后留一道填空题。
三个人在牢房里聊天。
第一个说:我赞成凉宫是创世神。
第二个说:我反对凉宫是创世神。
第三个说:我就是——不是,在玫瑰色的宝可梦里寻找真实,______________。(2 分)
图 7:别人的团长,我们的团长。
_
目录
猫头鹰 1年前
我喜欢哔哩哔哩,还有大家!
发布
newtype0092 1年前
发布
无毁的湖光 1年前
加油!
发布
蓝色的叶 1年前
发布
蓝熊 1年前
图文无关系列
发布