demo h5 touch 移动_Creator3D 打砖块子弹发射,以及摄像机平滑移动控制!

在线体验链接:http://example.creator-star.cn/block3d/

前面一篇教程《Creator3D图文教程【打砖块】》,我们讲了打砖块游戏中的 3D 物体的场景布局、材质资源、物理刚体与碰撞组件,接下来本篇文章重点介绍“子弹的发射”与“摄像机移动”,有了这两部分我们的游戏就可以初步玩起来了。

1子弹的发射

子弹是由 3D 物体 Sphere 球体创建,并将节点改名为 bullet,看下图:

7364913987699b3e5ebadc30fb853b4f.png

在层级管理器中将 bullet 节点拖动到资源管理器中,将它创建成一个 Prefab 预制体。同时在 bullet 子弹节点上挂载“球体碰撞组件”和“刚体组件”,如下图所示:

678743d84ff473e89001003a71fb1a3b.png

有了 bullet 预制体,我们就可以用代码去实例化它,并将它 发射出去,创建一个 shoot 的TypeScript 脚本并将它挂载到 Camera 摄像机节点上:

306f33d16787daac001c645ef39f7ae6.png

将shoot组件的子弹预制体拖动过去,子弹的移动速度设置为 50,我们通过点击屏幕来进行发射,下面是具体的代码:
import { _decorator, Component, Node, CCObject, Prefab, instantiate, RigidBodyComponent, Vec3 } from "cc";
const { ccclass, property } = _decorator;

@ccclass("shoot")
export class shoot extends Component {

@property(Prefab)
bullet: Prefab;

@property(cc.Float)
speed = 0;

start () {
//注册全局触摸点击事件
cc.systemEvent.on(Node.EventType.TOUCH_END, () => {
this.shoot();
});
}

shoot() {
//实例化 bullet 预制体
let node = instantiate(this.bullet);
node.parent = this.node.parent;
node.position = this.node.position;
//为刚体施加冲量
let bullet:RigidBodyComponent = node.getComponent(RigidBodyComponent);
bullet.applyImpulse(new Vec3(0, 2.29, -1 * this.speed));
}
这里需要注意两点:
  1. 触摸事件是使用cc.systemEvent进行注册的;

  2. 工程中没有代码提示,需要从引擎安装目录中复制cc.d.ts文件到工程中,我是用的Mac系统上,路为:

    /Applications/CocosCreator3D.app/Contents/Resources/resources/3d/engine/bin/.declarations/cc.d.ts

预制体的实例化使用 instantiate 与我们在 Creator 2D 中使用的 API 完全相同,这里就不在赘述。这时我们就可以运行预览,通过点击鼠标或触摸屏幕发射子弹了。2摄像机移动

在3D游戏中,通常的做法是使用WSAD四个键进行上下左右的移动,其核心是控制摄像机节点的位置。在我们这个游戏中为了简化游戏操作,我们只控制摄像的 x 和 y 方向的移动:

  • w:y方向增加

  • s:y方向减小

  • a:x方向减小

  • d:x方向增加

创建一个 movement 的脚本用于控制摄像机的移动,下面是组件的设置:

d20829d552195f7c3e9671ed7e66872e.png

下面重点分析使用键盘控制摄像机移动的相关代码:
//使用 cc.systemEvent.on 注册全局键盘事件
start() {
cc.systemEvent.on(Node.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.on(Node.EventType.KEY_UP, this.onKeyUp, this);
...
}
在键盘事件 onKeyDown 中标记移动的方向:
onKeyDown(event) {
cc.log(event);
let rotation = this.node.eulerAngles;
let position = this.node.getPosition();
switch(event.keyCode) {
case cc.macro.KEY.w:
this.offset.y = 1;
break;
case cc.macro.KEY.s:
this.offset.y = -1;
break;
case cc.macro.KEY.a:
this.offset.x = -1;
break;
case cc.macro.KEY.d:
this.offset.x = 1;
break;
}
}
当按键松开时,将 offset 变量归 0:
onKeyUp() {
this.offset.x = 0;
this.offset.y = 0;
this.offset.z = 0;
}
重点是在组件的每帧事件 update 中真正控制摄像机节点的移动:
update (deltaTime: number) {
//计算要移动的目标位置
Vec3.add(this.point, this.node.position, this.offset);
//插值计算
Vec3.lerp(this.point, this.node.position, this.point, deltaTime * this.speed);
//移动节点
this.node.setPosition(this.point);
}
为了平滑移动,Shawn 这里参考了官方 Demo 案例中的做法,使用 Vec3.lerp 对当前坐标到要移动的坐标进行插值计算。详细的完整代码,可参考DEMO源码。3小结

Creator3D 打砖块是 Shawn 制作的第一个 3D 游戏,也是公众号上第一次写的 3D 相关的教程,目前他只能算是一个 DEMO,还有很多不足的地方,如有不正之处还请大家多多指正。

在线体验链接: http://example.creator-star.cn/block3d/源码下载地址: https://pan.baidu.com/s/1KadJBNUngg7pAYEFTwTj9g   密码:zjf4 原创不易 ,特别是一个新的东西,如果教程对你有用,也感谢你点个赞 或分享给更多的人,你的鼓励是我创作的巨大动力,愿我们在前进的道路上砥砺前行,共同成长! 208e95a885e937fdb17d7468f387db7c.png
  • Creator星球教程文章分类导航

  • Cocos Creator 3D 正式开放公测,赶紧上车!

  • Creator3D图文教程【打砖块】3D场景布局!

  • Creator3D官方惊艳的DEMO,附在线体验!

  • 微信小游戏开发工具介绍视频教程

  • Creator 3D 游戏「一步两步」魔性小游戏!

  • 大神驾到 |「大掌教」Cocos3D组件详解

  • Creator3D打砖块DEMO可在手机上玩了!

320a59a782f192f7b0d1ed65cfd067bc.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值