专栏首页白玉无冰拇指投篮 ! Cocos Creator 3D !

拇指投篮 ! Cocos Creator 3D !

你的命中率是多少呢?文章底部试玩!

效果预览

配置环境:

Cocos Creator 3D v1.0.1

玩法说明:

触摸屏幕,向上滑动投篮!注意篮板是会移动的哦!看看你的命中率是多少!

实现原理

为了能达到好的投篮效果,在网上找了一个投篮机参数,大致按照实际参数设置篮框大小,球的大小,以及篮框的位置。

碰撞器:

篮板直接使用 盒碰撞器组件(BoxColliderComponent),篮球使用的是 球碰撞器组件(SphereColliderComponent)。

因为没有 圆环碰撞器组件,所以对于篮球框用了多个 球碰撞器组件 实现碰撞检测。

小球轨迹:

由于完全采用了物理引擎计算,要让小球轨迹如我们所预期一样,得遵循物理原理。这里需要的知识是 位移与加速度、速度、时间的关系。

我们可以分为三个方向来考虑,需要计算初始速度 V_z 和 V_y 。在 Z 轴方向可以看作匀速运动,Y 轴方向为匀加速运动。其中 Z 轴 和 Y 轴 的位移我们已经设定好了,我们只需要设定抛球时间 t 就可以计算出初速度。注意 Y 轴的末速度要满足与初速度相反,才能达到图中抛物线的效果哦。参考计算方式如下:

const CONST_H = 1.25;
const CONST_S = 2.3;
const CONST_G = -10;
const CONST_T = 0.8;
const CONST_V_Z = CONST_S / CONST_T;
const CONST_V_Y = CONST_H / CONST_T - CONST_G * CONST_T / 2;

初始速度 V_x 可以根据触摸开始的位置 x 和触摸结束的位置 x 的差值乘以一个系数来获取。

进球判断:

我是在篮球框下方添加一个碰撞器检测。再通过分组和掩码控制碰撞器的开关。发射前,打开碰撞检查,投进时,关闭碰撞检测,让球往下掉。

只要以下条件为真就会进行碰撞检测。

(GroupA & MaskB) && (GroupB & MaskA)

经测试发现,默认的 Mask 为 -1 (即每一位都是1),默认的 Group 为 1 。 所以只要将 MaskB 设置为 2 (即只有第二位为1,其余为0 ) ,通过控制 GroupA 第二位可以控制碰撞器开关。参考代码如下:

const PHY_GROUP = {
    Group1: 1 << 1
}

// 设置篮框碰撞器mask
this.colliderComponent_goal.setMask(PHY_GROUP.Group1)

// 打开碰撞,设置球的group
this.colliderComponent_basketball.addGroup(PHY_GROUP.Group1)

// 关闭碰撞,设置球的group
this.colliderComponent_basketball.removeGroup(PHY_GROUP.Group1)

小结

小球轨迹通过基本的物理知识分析得出初始速度!得分判断采用的是碰撞器检测,并控制其检测开关让球继续运动。如果你有更好的方法或想法,欢迎留言分享交流!

以上为白玉无冰使用 Cocos Creator 3D 开发"拇指投篮"项目的主要技术分享,欢迎关注【白玉无冰】公众号。公众号内回复【拇指投篮】可获取完整代码。

原创不易!转载请保留文末二维码代码获取方式

本文使用图片素材来自网络!版权归原作者所有,如有侵权还请联系!

本文分享自微信公众号 - 白玉无冰(lamyoung-com),作者:lamyoung

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 物理挖洞!涂抹地形! 小鳄鱼爱洗澡!百战天虫 !Cocos Creator !

    整体思路是先使用 PolyBool 计算多边形,接着使用 cc.PhysicsChainCollider 将多边形围起来,最后使用 cc.Graphics 将整...

    白玉无冰
  • 隐秘的物理粒子系统与渲染 !Cocos Creator LiquidFun !

    引擎内置的 box2d.js 其实已经携带了 google 的 liquidfun(但是没有公开接口和适配)。并且引擎还对 box2d 做了一次适配,绑定到全局...

    白玉无冰
  • 反复横跳的瞄准线!Cocos Creator!

    最近有小伙伴问我瞄准线遇到各种形状该怎么处理?如何实现反复横跳的瞄准线?最近刚好在《Cocos Creator游戏开发实战》中看到物理系统有一个射线检测,于是,...

    白玉无冰
  • API设计原则 – QT官网的设计实践总结

    原文链接:API Design Principles – Qt Wiki 链接:(http://wiki.qt.io/API_Design_Principles...

    范蠡
  • Dart In Action -Dart快速入门(三)

    本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文。 Flutter教程在这里

    JarvanMo
  • 我是如何黑掉惠普打印机的?

    步骤 首先,我有机会测试惠普Officejet Pro系列打印机 其次,我决定测试它的安全性并用本地无线网络连接做一次扫描。 注:所有的安装步骤都是按照惠普说明...

    FB客服
  • dubbo集群容错策略的代码分析3

    接上篇 https://cloud.tencent.com/developer/article/1109591 dubbo 版本2.5.3 通过代码可以看到fa...

    技术蓝海
  • 【Java SE】Java NIO系列教程(六) Selector

    Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个cha...

    用户1257215
  • 如何写出优雅的 JS 代码,变量和函数的正确写法

    在开发中,变量名,函数名一般要做到清晰明了,尽量做到看名字就能让人知道你的意图,所以变量和函数命名是挺重要,今天来看看如果较优雅的方式给变量和函数命名。

    前端小智@大迁世界
  • 非阻塞编程核心设计之Selector

    1. 铺垫 在本文中,我们将探讨Java NIO的Selector组件。 Selector是一个定义在java.nio.channels包中的抽象类。 选择器(...

    ImportSource

扫码关注云+社区

领取腾讯云代金券