一、预览效果

二、设置物理世界属性:

1.打开物理系统:

  1. cc.director.getPhysicsManager().enabled = true;

2. 配置重力加速度:

  1. cc.director.getPhysicsManager().gravity = cc.v2(0, -980);

三、射击角度调整

1.全局监听touch事件,事件分为TOUCH_START(开始)、TOUCH_MOVE(移动)、TOUCHCANCEL(取消)、TOUCH_END(结束)四个状态,方法如下:

  1. this.node.on(cc.Node.EventType.TOUCH_START, this.onEventStart, this);
  2. this.node.on(cc.Node.EventType.TOUCH_MOVE, this.onEventMove, this);
  3. this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onEventCancel, this);
  4. this.node.on(cc.Node.EventType.TOUCH_END, this.onEventEnd, this);

2.当开始触摸屏幕时,触发开始的回调onEventStart(),回调中开启定时器,每隔0.03秒角度加1,并改变炮台的角度,方法如下:

  1. //更新炮管角度
  2. this._curAngle = 0;
  3. this.gunSchedule = function(){
  4. if (this._curAngle < 90){
  5. this._curAngle += 1;
  6. this.myGunImg.angle = this._curAngle;
  7. }
  8. };
  9. this.schedule(this.gunSchedule, 0.03);

3.当结束触摸时,触发结束的回调onEventEnd(),回调中关闭定时器,方法如下:

  1. //停止更新炮管
  2. this.unschedule(this.gunSchedule);

四、发射子弹

1.先在编辑器中创建一个子弹预制体,并给它绑定好物理组件,组件如下:

2.给子弹设置冲量,假设固定x方向的冲量是5000,再通过角度计算出y方向的冲量,方法如下:

  1. let x = 5000;
  2. //通过角度计算力度
  3. let y = x * Math.tan(Math.abs(this._curAngle) * (Math.PI / 180));
  4. //给子弹设置冲量
  5. this.bulletNode.getComponent(cc.RigidBody).applyForceToCenter(cc.v2(x, y));

3.此时子弹同时受到重力加速度和冲量的影响,将会发射出去,但是子弹的角度会始终是发射出去时的角度,现在我们通过子弹运行的轨迹计算出正确的旋转角度。先获取运行时前后两个点的坐标,再通过坐标点之间的连线计算出夹角,最后给子弹设置角度即可,方法如下:

  1. let curPos = this.bulletNode.position;
  2. let lastPos = curPos;
  3. this.bulletfun = function(){
  4. curPos = this.bulletNode.position;
  5. //计算角度
  6. let lenX = curPos.x - lastPos.x;
  7. let lenY = 0;
  8. let r = 0;
  9. if(curPos.y < lastPos.y){ //向上运动
  10. lenY = curPos.y - lastPos.y;
  11. r = Math.atan2(lenY, lenX) * 180 / Math.PI;
  12. }
  13. else{ //向下运动
  14. lenY = lastPos.y - curPos.y;
  15. r = -1 * Math.atan2(lenY, lenX) * 180 / Math.PI;
  16. }
  17. lastPos = curPos;
  18. this.bulletNode.angle = r;
  19. };
  20. this.schedule(this.bulletfun, 0.1);

4.当子弹落地或打到目标物体时,停止定时器,方法如下:

  1. //停止子弹监听
  2. this.unschedule(this.bulletfun);

扫一扫,关注微信公众号,了解更多。

Cocos Creator | 炮弹发射效果模拟的更多相关文章

  1. cocos creator中粒子效果的使用

    就如同上图的星星特效一样,在触碰时产生特效,但是并不销毁节点,因为要使用很多次,因此使用节点池NodePool保存起来的. 以下是使用粒子效果使要使用到的一些基本控制函数: 我的使用:

  2. Cocos Creator 的实现拖尾效果

    在游戏中,有时会需要在某个游戏对象上加上移动后的轨迹若隐若现的效果.使得游戏的效果较好,比如游戏大招,刀光,法术,流星划痕之类. Cocos Creator提供了一种内置的拖尾渐隐效果的实现方法:组件 ...

  3. cocos creator 事件

    cocos creator 事件 在做一个消除类游戏时,需要对点击的方块做出响应.代码很简单,可背后的原理还多着呢. 1. 普通节点注册click事件 在cc中如果需要相应click事件,需要为该节点 ...

  4. cocos creator 3D | 拇指射箭

    拇指射箭!你能射中靶心么? 效果预览 配置环境: cocos creator 3d v1.0.0 玩法介绍: 长按屏幕,拖动瞄准,放手发射.风向.重力和距离影响最终结果!越靠近中心得分越高!最高分10 ...

  5. cocos creator 3D | 拇指投篮 | 3D项目入门实战

    你的命中率是多少呢?文章底部试玩! 效果预览 配置环境: Cocos Creator 3D v1.0.1 玩法说明: 触摸屏幕,向上滑动投篮!注意篮板是会移动的哦!看看你的命中率是多少! 实现原理 为 ...

  6. 欢乐水杯(happy glass)中流体的一种实现!图文视频讲解 ! Cocos Creator!

    使用cocos creator v2.2.2 实现流体效果 ! 图文+视频讲解! 效果预览 实现原理 整体思路是参考论坛中的一个帖子 这款游戏中水的粘连效果在Construct3中利用图层很容易实现, ...

  7. cocos creator实现棋牌游戏滑动选牌的功能

    最近在玩cocos creator,打算学着做一款类似双扣游戏的棋牌,名字叫文成三星,比双扣还要多一扣,因为需要三幅牌,在我们老家比较流行这种玩法. 目前实现了绝大部分的逻辑效果如下: 有一点不好的体 ...

  8. Cocos Creator—最佳构建部署实践

    这篇文章主要是我们团队在使用Cocos Creator过程中的一些关于部署方面的实践总结,标题党了一回,严格来说,应该是<快看漫画游戏研发团队使用Cocos Creator构建部署最佳实践> ...

  9. Cocos Creator—如何给资源打MD5版本号

    Cocos Creator 是Cocos最新一代的游戏开发者工具,基于 Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布.Cocos Creator的开发思路已经逐步跟Unity 3D靠拢,写 ...

随机推荐

  1. 使用Feign访问接口

     添加主要依赖 使用Feign访问接口的配置,如果服务不在Eureka上,可以不加Eureka的依赖,用在FeignClient上指定url的方式访问 dependencies { compile(' ...

  2. 浅析vue混入(mixin)

    vue中的混入,可以在一定程度上提高代码的复用性.通俗来说,混入类似于“继承”,当前组件对象继承于组件对象,一般情况下遵循“就近原则”.但是与继承不同的是,继承一般都跟随着属性的重写与合并,混入在不同 ...

  3. 第五章 Unity中的基础光照(2)

    目录 1. Unity中的环境光和自发光 2. 在UnityShader中实现漫反射光照模型 2.1 实践:逐顶点光照 2.2 实践:逐像素光照 2.3 半兰伯特模型 1. Unity中的环境光和自发 ...

  4. 华为云MySQL金融版正式商用,高可靠的金融级数据库来了

    摘要:全新三节点架构,基于深度优化的MGR组复制技术,提供金融级的数据一致性. 日前,华为云数据库MySQL 金融版正式商业化发布,MySQL金融版采用MGR技术,基于Paxos协议,采用一主两备三节 ...

  5. 成功build Maven但eclipse中依然显示该工程有错误

    在mac pro的控制台中,成功执行 mvn package,但该工程在eclipse仍然显示有错误. 解决办法:右键该工程 -> Maven -> Update project,勾选 F ...

  6. [TimLinux] Python Django与WSGI的简介

    1. Web应用 web应用的最原始的访问流程: 客户端发送HTTP请求: 服务端接收到请求,生成一个HTML文档: 服务端将构造HTTP响应,包含:响应头(响应码.键值对).响应体(HTML文档) ...

  7. 怎么样才算是精通 Python?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:weixin_45587093 你们所说的什么要怎样数据分析.爬虫.We ...

  8. nginx部署基于http负载均衡器

    nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术. 环境介绍 配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docke ...

  9. FPGA之驱动sdram控制兼容性移植实验

    cb早在2012年就推出了VIP 视频开发板 V1.4  这套开发板是ep2的,摄像头是ov7670,虽然不如当前的vip20强大,但也算是其雏形. 在vip20后期,cb对sdram以及其他模块进行 ...

  10. CSS中的变量使用,var()语法

    参考博客:https://blog.csdn.net/qq_34206361/article/details/53690414