测试场景
在scene下创建一个测试场景,游戏的各种机制将在这个场景中去测试(右键新建场景)。
准备工作
目前根据游戏机制,需要先完成几点准备工作。因为我也比较喜欢玩EVE,可惜换了网易代理我一直也没上过号,所以一些机制,我就直接借鉴一些EVE的设定。
移动
在游戏中,最重要的就是移动。但是这个移动又不那么基本,因为是飞船是被力推动的,而不是简单的设置x、y坐标。比如飞船推进器、越迁引擎、飞船的碰撞等,都是需要有作用力在里面的,虽然不用做的很真实,但基本的移动手感还是要有的。
移动也需要有加速、匀速的效果等。
战斗
除了移动,就是战斗,飞船的武器,比如导弹、激光、射弹等各种武器,而护甲也分为三种,护盾、装甲、结构,不同的武器也对应不同的护甲,优势也各有不同。我们在程序设计的时候,可以抽象一些属性,不用对着每种装备写一份代码。比如抽象武器的伤害、数量等属性,开放动画效果接口、移动方式接口等。
目前准备工作阶段,先简单的实现三种武器的发射与伤害效果。
导弹是被推动飞行的,类似于飞船的移动,且可以追踪目标。
激光是直接射出去的,不能拐弯。
射弹和激光的发射方式一样,但飞行速度比导弹快,体积小,类似于枪的子弹。也无法追踪目标。
三种武器我们可以将其封装起来,暴露出移动方式接口,由子类实现移动方式,具体的技术手段,我们在后面详细讲解。
能量
驱动飞船移动、战斗的是能量,也是电力负荷。每一搜飞船都需要有自带的储电量,但也可以*装配插件来提升电量。每种武器、插件、模块都会在使用时消耗电量。
脚本&碰撞检测
Cocos Creator 都是组件化的,我们创建一个ts脚本,这个脚本专门用于推动物体前进,并且可以设置推力、方向角等,然后将这个脚本放置在一个组件上,如果组件可以比较真实的移动,就大功告成了。
创建脚本或任何资源时,一定要在Cocos Creator 中创建,这样编辑器才能更好的响应这些文件的改动。
推力可以作用于大部分功能上,比如飞船的飞行、导弹的飞行、射弹的飞行,但激光除外。同时还有npc的飞行、无人机的飞行,都需要推力脚本,也是大部分物体的基本驱动力,所以先从推力脚本下手去开发。
新建脚本
命名为:Thrust(我英语贼差,百度搜的词)
打开vscode,找到Thrust.ts,并且将图中红框处的名字改为Thrust
我们可以看到,Cocos Creator 已经帮我们创建了一些基本的代码,我们在此上开发即可。
类的一些介绍,在这里可以看到:https://docs.cocos.com/creator/manual/zh/scripting/(官方文档)
但官网介绍很多,一时间难以接受,但建议先了解基本的比如生命周期,每个函数的作用等。我在后面的篇章中,也会大致的讲到。
我们先将一些无用的代码去除,留下这些内容:(有些东西我觉得没用,如果根据你个人的情况有用的话,注释保留即可)
const { ccclass, property } = cc._decorator;
@ccclass
export default class Thrust extends cc.Component {
start() {
}
// update (dt) {}
}
创建物体
接下来我们在场景中创建一个物体,因为我们主要想要脚本功能,所以随便创建一个白色方块即可。
你可以将图中,1位置的方块精灵,直接拖拽到场景中,或者拖拽到左侧的层级管理器中,但要注意,一定要放在Canvas节点下,具体原因在后面会讲到,我想大概就是渲染和分组的问题。
然后我们还需要对节点进行命名,保持命名的良好习惯,以为后期会做很多节点的元素,如果不保持良好的命名习惯,节点一多就会非常混乱,这里我将其命名为测试节点。
添加刚体
刚体的具体描述这里有提到:https://docs.cocos.com/creator/manual/zh/physics/physics/rigid-body.html(官方文档)
刚体属于物理碰撞系统,在使用物理系统前,一定要先按照文档,打开相关设置才可以使用。
https://docs.cocos.com/creator/manual/zh/physics/physics/physics-manager.html(官方打开物理系统的文章)
这里我们要注意了,我们要添加的,是物理组件中的对撞器:
这个对撞器是可以自定义顶点的,如果你的物体简单,我们也可以选择正方形或圆形的碰撞盒子。我们这里先选用正方形的盒子:
打开物理引擎
我们先创建一个main.ts,在main中初始化一些场景的操作,比如打开物理引擎。
创建好之后,可以直接将脚本拖拽到层级管理器,他会自动创建一个空节点,并在会在运行时加载。
我们在strat函数中,写上打开物理引擎的代码,start也是生命周期的一个函数。点击查看生命周期介绍
在main.ts中,写入以下代码:
const { ccclass, property } = cc._decorator;
@ccclass
export default class Main extends cc.Component {
onl oad() {
let manager = cc.director.getPhysicsManager();
manager.enabled = true;
manager.debugDrawFlags = cc.PhysicsManager.DrawBits.e_aabbBit |
cc.PhysicsManager.DrawBits.e_jointBit |
cc.PhysicsManager.DrawBits.e_shapeBit
;
manager.gravity = cc.v2();//去除重力
let manager2 = cc.director.getCollisionManager();
manager2.enabled = true;
manager2.enabledDebugDraw = true;
}
start() {
}
// update (dt) {}
}
我们复制一份“测试物体”,让两个物体相交,模拟碰撞效果。
预览一下,碰撞的一些提示是否打开了,在这之前,先改一下这个设置:
这样你预览的时候,就会打开当前的场景。
我们可以看到,两个物体发生了碰撞,并且有碰撞检测绘制。
编写推力脚本
以上的准备工作已经完成,我们现在可以开始设计推力组件了。请看下一章。