【飞机游戏】【Cocos】【P0】创建背景、飞机和子弹-全球动态
时间:2023-06-24 17:40:41
0 使用Cocos Creator引擎开发一个2D的飞机射击游戏。
0.1 创建背景对象,让背景滚动起来。
0.2 创建飞机对象,让飞机跟随鼠标位置移动。
0.3 创建子弹对象,设定其运动轨迹,并控制子弹的生命周期让它从飞机上发射出去,离开屏幕范围后销毁。
(相关资料图)
1 创建背景对象,让背景滚动起来。
1.0 获取游戏开发素材。素材可在(https://github.com/CodePoisonous/AirPlaneGame)的assets文件夹中获取。素材内容包括背景图片,各色飞机的模型、贴图文件,各色子弹的贴图文件以及音频文件。
1.1 启动引擎(使用的版本是3.7.3),新建一个项目,将资源导入到引擎中。
1.2 在res文件路径下创建一个back_ground文件夹,在该文件夹下右键创建一个名为bg_texture的material资源。将与back_ground文件夹平级的texture文件夹中的bg01贴图文件关联到bg_texture中。
1.3 在节点树上新建一个moving_scene_bg的空节点。在该空节点中创建两个3D Object的Plane类型节点bg01和bg02。并将之前创建的bg_texture绑定到这两个Plane节点的Material上。
1.4 将相机的视口调整为正交,调整好相机和两个Plane(bg01和bg02)的位置和比例,让两个背景前后相接的摆放好,相机朝下对准其中的一块背景图。
1.5 在Assets中的Script脚本文件夹中创建一个控制背景图移动的TypeScript脚本文件。
1.6 背景移动的脚本思路大致是:先绑定两个背景图节点,然后让其同时在z轴正方向逐帧进行移动,当某张图超出了尺寸界限之后就回滚到初始位置再继续沿z轴方向移动。
1.7 背景滚动的效果如下所示。
2 创建飞机对象,让飞机跟随鼠标位置移动。
2.0 在Assets的model文件夹中找到Plane01文件夹,里面装有飞机模型和飞机贴图资源。在Plane01文件夹中创建一个飞机的Material,将Material的Effect调成builtin-unlit(因为这个游戏不需要考虑光照的问题),再将飞机的纹理图绑定到这个Material上。
2.1 在Hierarchy栏里新建一个Plane01的Empty Node。并将飞机的模型贴图绑到该节点上。再将我们创建的飞机的Material绑到模型节点上。
2.2此时我们可以在场景中看到一个飞机的模型。最后将我们创建的飞机节点保存到Assets的Plane01的文件夹下即可。
2.3 创建完飞机模型之后,我们就需要编写脚本来控制飞机的移动。当我们按住鼠标左键时,需要让飞机跟随我们鼠标的移动而移动。在Assets的script文件夹下创建一个ui文件夹,创建一个名为ui_main的脚本文件。(脚本的思路就是利用事件回调函数监控鼠标在左键按下时每帧鼠标的移动信息,并根据预设好的飞机移动速度来对飞机在屏幕中的位置进行调整,让飞机跟随鼠标的移动而移动。)
2.4 在Hierarchy中创建一个2D Object的sprite节点。将我们编辑好的ui_main脚本挂在sprite节点上。将飞机的节点也挂在到sprite节点上。
2.5 运行程序可得如下效果。
3 创建子弹对象,设定其运动轨迹,并控制子弹的生命周期让它从飞机上发射出去,离开屏幕范围后销毁。
3.0 在Assets的bullet文件夹下找到子弹的贴图资源,我们先创建一个子弹的Material,将贴图绑定到Material上。
3.1 在Hierarchy上创建一个Empty Node类型的bullet01节点,再在其下创建一个3D Quad类型的子节点body。将bullet01的Material绑定到body节点上。
3.2 创建子弹的脚本文件来管理子弹对象的移动轨迹以及子弹对象的销毁(沿z负方向直线移动,超出屏幕后即可销毁)。
3.3 创建两个Empty Node 节点:bullet_manager和game_manager。
· 其中bullet_manager节点创建的目的是为了让子弹对象实例化之后能挂载到该节点,只有在节点上的实例化对象才能在屏幕中显示出来。
· 另一个game_manager节点则是通过使用game_manager脚本来管理和调度整个游戏中对象之间的互动逻辑。
3.4 game_manager脚本的大体思路就是:
· 先绑定飞机节点对象、子弹节点对象、子弹管理节点对象以及设置好射击的时间周期和子弹速度。
· 当脚本运行后,我们给飞机设置一个初始位置,并初始化当前射击时间。
· 在每帧的循环中使用ui_manager脚本获取鼠标是否被点击的信息,并将标识传递给game_manager。
· 当game_namger脚本识别到鼠标左键被按下时,根据射击时间,周期性的实例化子弹对象,并将子弹对象挂载到场景的子弹管理节点上,并根据当前飞机对象的位置来设置子弹的初始位置。
· 当子弹对象挂载到了子弹管理节点后,节点上绑定的bullet脚本将会运行起来,让子弹沿着它的运动轨迹飞行起来。
3.5 运行游戏可看到效果如下。