对于weseewe的这个游戏,我在很早之前就做过,不过比较的粗糙,github.com/absolve/coc… 我记得是大四的时候用cocos2dx做的,不过是坑了,所以后来就放着了,最近我用godot重新做了一个,截图:
以上就是游戏的样子,跟原来的游戏是有点差距,这个有些地方需要优化才可以跟原来的一样,godot的物理引擎是没有绳子这种关节的,所以有些的显示效果不一样,有些地方可能有些bug,所以你发现记得告诉我。
现在开始制作游戏,首先需要新建场景用来制作游戏开始界面和开始界面,只有一个场景用来游戏的开始和玩耍,所以一个主界面就够了,截图:
这里要注意的是,每个部分需要用canvaslayer这个组件把每一层的东西分割开,这样的目的是玩家在跳跃的时候,摄像机会根据玩家的位置移动这样的话界面的东西都会移动,canvaslayer可以选择一些物体不跟随摄像机。
首先就是按钮的制作,这个按钮就是按下的时候会有个变色的效果,这个只要在按下事件把颜色改了就可以,截图:
只要新建一个基本的按钮,重复使用就好了。移动的方块的制作,底部的方块使用StaticBody2D,只要让它向左移动就好了,那么如何实现连续不断的方块呢,这个话就是一开始就创建铺满屏幕的方块,等到最后一个方块的进入屏幕后,就在最后一个方块后边创建一个新的,这个功能需要发射信号来实现,这样的话就可以知道需要创建新的方块了,每个方块间最多只有2个无法站立的方块,如果超过了两个那就无法跳跃,所以需要判断前两个是不是不能站立的方块,具体可以看代码。
就是玩家方块的制作,玩家的制作就是使用KinematicBody2D,只能进行跳跃,超出屏幕游戏就结束了,制作比较简单,它跳起来会旋转,调到地面上就恢复正常,这个只要改变角度就可以了,
摄像机跟随玩家跳跃的变化,这个的话只要判断玩家的坐标变化,如果玩家的y坐标超过了一段距离就把玩家的坐标的变化加到摄像机的偏移上,这样的话,摄像机就可以跟随玩家的变化,一开始需要保留玩家方块的位置,后续的变化都可以用来移动摄像机位置。
ui的动画制作,主要是使用AnimationPlayer来进行动画,它可以把每个物体的属性添加到动画列表里面,每个动画可以设置速度,可以手动控制什么时候播放。这几个动画可以用来进行各种动画效果。
对于声音的播放,新建一个场景设置成单例的模式,对于背景音乐只有一个文件,主要是通过修改播放速度听起来是不同的曲子,其他的音效都是只播放一次就停止。
项目中一些看起来有绳子挂着的物体,由于没有绳子的关节所以这里使用DampedSpringJoint2D这个组件,这个是个弹簧,可以设置弹簧的变形程度来控制物体的变化,在这里有个主意的地方,如果物体跟弹簧在同一个位置上那它就固定不动了,所以需要设置它的位置不一样。
线条就是画出来的。
基本上所有的物体都是这么制作的,对于里面的对话框,对话需要一个背景和文字标签,背景需要背景的变化而变化,背景可以使用NinePatchRect,外部可以使用panel来作为父节点然后设置margin的大小看起来居中。
游戏当中有个粒子的效果,这个粒子的效果分为两种,一种是随机从右边产生,另一种就是烟花效果,制作的方式也比较简单,首先设置单个粒子,新建一个粒子对象,主要设置它的属性,
主要目的就是让粒子有两种行为,一个是向上飞行,一个是下落。最后只要能大量的生成这些粒子就好。可以设置定时器让它从右边生成和某个点一次性大量生成,具体可以看代码。
游戏数据的保存,游戏当中游戏数据的保存使用godot的函数可以实现多个平台保存数据的功能,主要是把数据以json的格式保存在文件中,这样就可以直接读取数据然后解析成对象。这些数据就是游戏中的最高分之类的。
游戏流程控制。所有的游戏逻辑都在一个文件中控制,通过设置state来控制游戏是进行到了那里,本身游戏的流程不复杂,进入游戏后,一个是准备阶段一个是开始阶段,一个结束或者通关。主要在游戏中如果玩家掉出屏幕游戏结束,如果获取到10个颜色游戏通关,大部分可以通过设置state值来控制。
颜色的随机,要产生随机的颜色数组,可以调用shuffle()函数,这样的话可以产生随机的数组。
单个标题字母的制作主要是用刚体然后设置图片,这这图片可以设置裁剪的访问,然后组装在一起的时候用DampedSpringJoint2D拼在一起,先放到屏幕外面,然后让他自由下落。
如有其他东西到时再补充。。。