代码 未分类

我是如何用十天从零开始制作一个简单的RPG引擎的(中)

8月16日

凌晨把双缓冲写了,原理?不太懂得样子,但是我大概知道这样做是对的,这样就行了吧(捂脸)

舒服多了,之前看的我眼都花了(

一大早起来就去图书馆整点新活,把方向给写好了

还顺便把行走那里改善了一下,之前是点一下走8个像素,现在是16个像素(为了看起来流畅),而且不足32个像素到最后释放按键还会给你补上,人性化吧(

不过如果走着走着中途转向就不会给你补了(我也懒得写)

别问,问就是彩蛋

但后来写障碍物判断时,发现这个转向不补把我坑了,因为这样的话障碍物判断要多写好多条件。。。我这脑子一时转不过来,在图书馆写了几个小时,后来回去又改了好久,终于改完了(

回到宿舍,才发现外面开始刮得好大风。然后下起了大雨。

于是我便把之前为了台风买的没吃到的一盒自热米饭给吃了,反正台风跟大风也没差(?这跟题目有什么关系吗??

不得不说真的是死贵,麻烦,又填不饱肚子。。。要是真的台风天不得饿死我。。。

 

看完了直播,我便又开始了制作。

试验了一下切换地图这个功能,看起来是能切换自如,但实际上第一次关闭的时候卡的要命,内存占用升到了90+,检查了一下代码发现是忘了处理垃圾,内存泄漏导致。写好处理代码后无论如何切换内存仍然保持在正常水平。

晚上点了个华莱士(米饭吃不饱。。),看了一下现有的RPG引擎,发现几乎每一个成熟的RPG引擎都有自己的脚本系统,于是上网看了一下语义分析,语法树等概念,觉得可以一试,只是比较麻烦。。

感叹一声,我太难了,便上床睡觉了。

8月17日

 

一个特别的日子

vbs风格

另外开了一个新的工程,建了一个叫Token的类(语法单元),然后先用正则把每个词分离开(我那本正则表达式的书终于派上用场了,捂脸),再用一个switch(非终结符号?不存在的,我保证每个语句都以终结符号开头,因为是终结符号的话太麻烦而且不会写)来判断每一句在做什么。就这样我用了一个早上,一个下午,把变量的定义和赋值写好了。。(当然还有输出啥的)

变量只有两种类型,integer和string,也够了。

泰国第几的if语句块(

然后到晚上写了一个if语句块,不支持复式嵌套那种。(不是不会写。。而是太麻烦了,偷懒233)

感觉写到这里差不多了。。心想着明天把这个类移植到游戏里面去就可以了。

 

8月18日

一大早起来(12点)便开始移植,再写了几个基础的控制游戏的语句(读取地图,角色啥的),写了一个读取和解析脚本的函数,便大功告成。。

看起来还是挺舒服的,因为这个脚本系统的建立,宣告着游戏不再仅受制于游戏内部的代码,更多地由外部的脚本控制,大大提高了游戏的可扩展性。

想到这里我就去床上躺着休息了下,然后又不知不觉睡到了三点半。。

睡完还是要工作的。6点前我把事件模块完成了,意味着角色可以随着移动或互动而触发某些事
吃完饭后又加上了特定方向才会触发这个功能。然后想着好多天都没有出去玩一下,便出去看哪吒了。。
三刷哪吒,每次看都有惊喜。
回来的时候差点没赶上最后一班地铁(23:00),吓死了。。
玩耍过后还是要好好工作的。接下来写对话框。
但写完了我才发现了不对劲:对话框没把游戏进程阻塞住!也就是说脚本没来得及等待对话完毕,键盘响应,就继续了游戏进程。。当时已经挺晚了,脑子有点抽,心里也急着想快点上床睡觉,便一直想着怎么把“游戏”阻塞住。。又是while(1)又是peekmessage,都在想着怎么阻塞住游戏进程,写了个多线程又好像发挥不了用场,最后还是while(1)加一个类似doevents的函数和一个全局变量解决问题。(这样是能阻塞住游戏而且能响应键盘,但是游戏进程本身毫无疑问很卡。。)虽然很卡但是没有办法,差强人意,一看三点了,便准备上床睡觉。


刷着刷着牙我又想到了只要把脚本系统本身阻塞住就行了。。然后果断再写了半个小时,往脚本系统里面加了个阻塞标记和继续脚本运行的函数,便完美解决了问题。。脑子还是不太好使,但是问题解决了,睡觉。

b-a
我还没有学会写个人说明!
查看“b-a”的所有文章 →

Leave a Reply

Your email address will not be published. Required fields are marked *

相关推荐