Cocos Creator入门教学(全而简单版)

今天周六休息,没啥事干,学一下做游戏吧。我想做一款横板2d竞速比赛游戏,练练手,《谁能找到卵子宝宝?》或者精子勇敢向前冲,美工:me ,开发: me ,策划:me

今天的主角

扫盲(懂的同学可跳过):

Cocos Creator 是一款高效、轻量、免费开源的跨平台 2D&3D 图形引擎(2021年发布)。原来也有cocos 2d,2023年不维护,官网说creator有2d的所有功能,那我就用最新的creator。

官方教程写的也是比较简陋,所以我才写这篇。

安装部署:

1. 官网下载,dashboard Cocos Creator 下载 - 轻量高效的开发引擎

2. 在安装过程,【不选安装】visual studio (安装时间很长,只针对windows程序才需要) 3. 左侧安装页,安装编辑器 cocos creator

4. 左侧选项目,然后新建项目,选一个empty2d模板

扫盲:模板,指的是空白项目。案例,指的是实际游戏资源。

因为不是很优雅,所以我改了个名(战士勇敢向前冲)

编辑器学习:

分成4部分

层级管理器:显示层级对象关系(比如什么叠在什么上面这种) 资源管理器:图片,音频这种素材 场景编辑器:游戏中看到的具体内容 属性选自额:场景内的组件,对象相关的属性

预览:

上方浏览器图标,可将游戏选择在浏览器或者主机等运行 点击右边播放按钮,可以直接启动一个服务去运行

资源预览(Asset prview):可以详细查看资源(比如图片缩略图) 控制台(Console):可以查看代码日志(比如报错,运行结果等)

动作编辑器(Animation):可以编辑和查看动画效果(比如多张图片走路等)

国产软件,选择中文。

最上面菜单栏,File->Preference(自定义)->Language->中文

学习让物体动起来

条件:物体,移动逻辑

创建一个sprite(理解为是物体)

我起了个名字叫Box,默认Box是一个图片

我们把我画好的勇士(user_me),放到拖到资源管理器中

在场景编辑器中,选中,刚刚的Box,在右侧的属性管理中。点击Sprite Frame,点击旁边的More。给他放个图片上去。

选择刚刚的user_me这个资源,然后太大了,改一下尺寸。

改小了后

给精灵加一个控制脚本,本质就是通过绑定按键,控制像素的位置。

在资源组创建一个脚本(PlayController),然后在层级管理器,点击刚刚创建的物体(我起的名字叫sprite)。然后对他的属性进行编辑,点击下面的添加组件,选择自定义脚本,把刚刚的脚本放上去。这样就绑定好了。

PlayController的代码如下:

import { _decorator, Component, EventKeyboard, Input, input, Node } from 'cc';

const { ccclass, property } = _decorator;

@ccclass('PlayerController')

export class PlayerController extends Component {

//定义移动

private left =false

private right =false

private up =false

private down =false

//定义步数

private step = 5

//cocos内部的操作

start() {

input.on(Input.EventType.KEY_DOWN, this.keyDown, this);

input.on(Input.EventType.KEY_UP, this.keyUp, this);

}

//渲染

update(deltaTime: number) {

let pos = this.node.position //物体移动的实现

console.log("x的是:"+pos.x)

if (this.left) pos.x -= this.step;

if (this.right) pos.x += this.step;

if (this.up) pos.y += this.step;

if (this.down) pos.y -= this.step;

// 更新节点位置

this.node.setPosition(pos);

}

//按下

keyDown(key: EventKeyboard) {

switch (key.keyCode) {

case 37: this.left = true; break; // ←

case 38: this.up = true; break; // ↑

case 39: this.right = true; break; // →

case 40: this.down = true; break; // ↓

}

}

//松开

keyUp(key: EventKeyboard) {

switch (key.keyCode) {

case 37: this.left = false; break;

case 38: this.up = false; break;

case 39: this.right = false; break;

case 40: this.down = false; break;

}

}

}

预览:

发现他可以移动了(通过按键,懒得搞gif图了,大家自行脑部吧)

今天就先这样,明天扣个图,加个背景。

碰撞组件

碰撞有2种,普通碰撞,物理碰撞。

举个例子,有2个人,你走过去和他打招呼,可见范围是10m,但是你没有碰到他,触发了打招呼。这个就是普通碰撞,他有一个不可见的碰撞块,碰到了就会触发打招呼。

另一个例子,他飞速冲过来撞到你了,你本身没有移动,但是却被他碰的后退了,这就是物理碰撞。

比如,我现在做2个方块的对话,当产生普通碰撞后,触发对话(换图)。

在场景编辑器里选中你的单位,然后点击属性里的添加组件

collider就是碰撞功能。我随便添加了一个BoxCollider后,选中Editting后,可以自由编辑碰撞组件的大小,达到剑虽未到风以伤人的目的。

举个例子,假设我给了一个很大的背景,到这个范围了,我就检测到了碰撞,就触发另一个事件。

比如我画个城堡,把碰撞的范围拉大覆盖了城堡的门口,到城堡之前就触发相关事件。

一定要保存ctrl+s场景,否则不生效。

触发代码(跳过,2d-empty游戏没有触发,只有碰撞)

有3种

OnColiderEnter 1.刚开始碰撞触发,这种比如刚进boss开图的时候动画等

OnColiderStay 2.持续碰撞,比如站在火焰里,持续扣血

OnColiderExit 3.碰撞结束时,触发

cc.director.getColiderManger.enable=true启动碰撞

分组(加了才能碰撞)

添加分组,属性编辑器旁边的edit

代表2个都是user分组时,才能碰撞。

添加完之后要重启cocos,不然不生效。

重启后就可以选择了。

修改之后一定要保存ctrl+s在cocos里否则不生效

2个组件,conllider(触发)和body(刚体),才能有碰撞回调。

2d的话,选择sensor,代表无物理碰撞(类似触发)

然后也可以用碰撞回调去做这个触发。

在刚体中勾选enable 才能有碰撞回调

新建一个刚体后,选择Kinematic后,他才不会掉下去。

镜头(camera),怎么跟随人物移动。

大概就是人物移动的时候,镜头的x轴也跟着改变就行,这里我画了一个镜头外的参照物。

默认是看不见的,只有移动过去才能看到,此时创建个脚本FollowerUser。

代码如下

import { _decorator, Component, Node ,misc} from 'cc';

const { ccclass, property } = _decorator;

@ccclass('FollowerUser')

export class FollowerUser extends Component {

@property({type:Node,tooltip:"镜头需要跟随的node"})

target:Node= null; // 要跟随的目标节点(人物)

@property(Number)

followSpeed: number = 5; // 跟随速度

@property(Number)

leftBoundary: number = -500; // 左边界,当镜头x小于等于这个值时停止移动

@property(Number)

rightBoundary: number = 500; // 右边界,当镜头x大于等于这个值时停止移动

start() {

}

update(deltaTime: number) {

// 计算目标位置

let targetPos = this.target.getPosition();

let cameraPos = this.node.getPosition();

//只在x轴上跟随

let newX = targetPos.x;

// 检查边界

if (newX <= this.leftBoundary) {

newX = this.leftBoundary;

} else if (newX >= this.rightBoundary) {

newX = this.rightBoundary;

}

// 直接跟随

cameraPos.x = newX;

// console.log("物体x是"+newX)

// console.log("相机x是"+cameraPos.x)

// 更新相机位置

this.node.setPosition(cameraPos);

}

}

然后选中镜头,给他添加个自定义脚本,fllowerUser。然后把node拖拽过去(Target里)

然后启动,刚开始是没有的,按右移动就可以看见参照物了。

走了一段时间后

边界的镜头是什么?空气墙

建一个精灵,选个刚体RigidBody2D,选一个BoxCollider2D

这几个勾选

然后就可以了,走不过去了

然后在给墙,加个颜色就隐身了。

对于2D来说,怎么知道他属于触发,还是属于碰撞?

通过tag来确定,在项目管理,项目设置->物理里可以添加。这个就是默认的tag(index0)

对应的就是,BoxCollider2D里的tag和Group

先弄个碰撞给大伙瞧瞧

碰撞指的是2个物体之间产生。

比如我这里白盒子和地面的碰撞,和空气墙的碰撞。

白盒子:必须要有BoxCollider2D和collider2种属性

地面:必须要有BoxCollider2D和collider2种属性 然后假如让白盒子触发,那给他的自定义脚本里面加入

import { _decorator, Collider2D, Component, Contact2DType, EventKeyboard, Input, input, IPhysics2DContact, Node, RigidBody2D, Vec2 } from 'cc';

const { ccclass, property } = _decorator;

onLoad() {

let collider=this.getComponent(Collider2D)

console.log("加载碰撞")

//加载碰撞,如果有碰撞发生泽调用函数

if(collider){

collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);

}

}

onBeginContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {

// 只在两个碰撞体开始接触时被调用一次

console.log('碰撞发生'+otherCollider.tag);

}

然后结果,碰撞后会有打印

参考: 物理事件 | Cocos Creator 零基础自学cocos游戏制作1-键盘控制物体移动_哔哩哔哩_bilibili

教程|Cocos Creator 编辑器入门:02编辑器安装与界面介绍_哔哩哔哩_bilibili

Copyright © 2088 《一炮特攻》新版本全球首发站 All Rights Reserved.
友情链接