cocos creator 3.x 精灵不显示、加载动态图片、物理碰撞、人物跟随鼠标移动、碰撞后节点销毁
温馨提醒:即刻转去Unity3d
精灵不显示:
不要在空节点下直接添加组件
正确的做法是:在空节点(Node)上右键创建一个精灵才会给看到 或者直接拖曳一个图片放到场景编辑器中也可
cocos creator 3.x图片动态加载
不知道是这文档抽象还是我阅读理解有问题 居然百度了三个小时没搜到哪里错了 后面在读了一遍才知道他是啥意思
这里是引用
加载 SpriteFrame 或 Texture2D
图片设置为 sprite-frame 或 texture 或其他图片类型后,将会在 资源管理器 中生成一个对应类型的资源。但如果直接加载 test assets/image,得到的类型将会是 ImageAsset。你必须指定路径到具体的子资源,才能加载到图片生成的 SpriteFrame:
// 加载 SpriteFrame,image 是 ImageAsset,spriteFrame 是 image/spriteFrame,texture 是 image/texture
resources.load("test assets/image/spriteFrame", SpriteFrame, (err, spriteFrame) => {this.node.getComponent(Sprite).spriteFrame = spriteFrame;
});
// 加载 SpriteFrame,image 是 ImageAsset,spriteFrame 是 image/spriteFrame,texture 是 image/texture
他的意思是你在你读到图片路径的屁股后面加一句/spriteFrame 获得的就是SpriteFrame的类型
加一句/texture就是texture的类型
我一直以为你他那个“image”是文件夹的意思 给我整无语了
我的图片位置:
我的脚本挂在:
然后代码应该这么写
let self = this;resources.load("test assets/image/ddd/spriteFrame", SpriteFrame, (err, spriteFrame) => {self.node.getComponent(Sprite).spriteFrame = spriteFrame
});
物理碰撞
3.x版本和以前不同
物体产生物理碰撞之后,原有的物理碰撞回调没有了
从 v3.0 开始,碰撞体回调需要在开始的时候进行注册,与原先 v2.x 会直接产生回调不同。因此开发者需要在物理回调的脚本中增加对回调函数的注册。例如:
let collider = this.getComponent(Collider2D);
if (collider) {// 只在两个碰撞体开始接触时被调用一次collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);// 只在两个碰撞体结束接触时被调用一次collider.on(Contact2DType.END_CONTACT, this.onEndContact, this);// 每次将要处理碰撞体接触逻辑时被调用collider.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);// 每次处理完碰撞体接触逻辑时被调用collider.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);}
});
升级之后,物理碰撞分组不见了 目前导入插件还不支持物理碰撞矩阵,因此暂时需要开发者手动设置碰撞矩阵,可在 Creator 主菜单 项目 ->
项目设置 -> 物理 中重新设置。
根据文档
要先在sprite上加上BoxCollider2D和RigidBody2D
并且碰撞双方RigidBody2D都要打开这个碰撞监听属性
代码:
start () {let collider = this.getComponent(Collider2D);if(collider){console.log(1)collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this)}}
onBeginContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {// 只在两个碰撞体开始接触时被调用一次console.log('onBeginContact');
}
或者并不用开启RigidBody2D
只需要把项目设置里的这里改成内置的2D物理系统即可
简单的碰撞计算并不需要用到RigidBody2D
人物跟随鼠标移动
需要获取的是getUILocation()并不是 鼠标的getLocation()
start () {input.on(Input.EventType.TOUCH_MOVE,(event)=>{ this.node.setWorldPosition(v3(event.getUILocation().x,event.getUILocation().y,0))},this)}
碰撞后节点销毁
必须要延迟一帧 我查了查他那个论坛 好像是说是引擎特色
HitEnemy(self:Collider2D,other:Collider2D){if(other.tag == 0){//延迟一帧this.scheduleOnce(()=>{//敌人销毁other.getComponent(enemyScript).die()//自己销毁self.node.destroy()},0)}}
世界坐标系转局部坐标系
获取碰撞点转坐标系
let col = this.getComponent(Collider2D)col.on(Contact2DType.BEGIN_CONTACT,(self:Collider2D,other:Collider2D,contant:IPhysics2DContact)=>{//世界坐标系//获取坐标点let point = contant.getWorldManifold().points[0]//获取法线let normal =contant.getWorldManifold().normal//转换为canvas下的局部坐标let newpoint = this.node.getParent().getComponent(UITransform).convertToNodeSpaceAR(v3(point.x,point.y,0))//设置this.node.getParent().getChildByName("bird0_2").setPosition(newpoint)console.log(normal)console.log(this.node.getParent().getComponent(UITransform).convertToNodeSpaceAR(v3(normal.x,normal.y,0)))},this)
raycast射线检测
先要把需要检测的物体的刚体(RigitBody2D)和BoxCollider2D都勾上
然后我还发现了 这物理系统的参数估计用的全都是世界坐标系到时候都得从UI坐标系中转出来还有如果报错别急,就先延后一帧试试看,再错就去查文档
onLoad(){//经典延后一帧不然报错this.scheduleOnce(()=>{let phy = PhysicsSystem2D.instance//转换为世界坐标系let newp = this.node.getParent().getComponent(UITransform).convertToWorldSpaceAR(this.node.getPosition())//然后就能检测到了let res = phy.raycast(newp,v2(newp.x+200,newp.y),ERaycast2DType.Closest) console.log(res)}) }
cocos creator 3.x 精灵不显示、加载动态图片、物理碰撞、人物跟随鼠标移动、碰撞后节点销毁相关推荐
- cocos creator 2.4.3cc.assetManager.loadRemote 加载不了微信头像
cocos creator 2.4.3cc.assetManager.loadRemote 加载不了微信头像 项目升级了2.4.3,发现cc.assetManager.loadRemote这个接口微信 ...
- vue3加载动态图片
vue3加载动态图片 一.动态加载图片 使用new URL(url, import.meta.url) <template><div class="home"&g ...
- Glide加载动态图片
首先我们先要去依赖一个githup:bumptech:glide:glide:3.7.0包: 1.使用Glide结合列表的样式进行图片加载: 1) 如果使用的是ListView,可以直接在Adapte ...
- vue 加载动态图片出错的三种解决方法
由于解析问题,通常直接引用链接,图片会加载失败,通过学习,整理出以下三种解决错误的方法 <template><div class="first"><! ...
- ajax 延迟显示加载中提示
近期做项目时用到了jquery的ajax,我希望实现"加载时提示用户"的功能,于是先习惯性的度娘谷哥了下,发现按照网上朋友所说的做,每次加载都会提示,不符合我的需求.于是我改进了下 ...
- c 语言解析png图片文件信息,使用CImage加载PNG图片文件
在MFC开发中,大家很容易用到PNG等流行媒体格式.但是MFC只提供了简单的BMP,ICON等文件的加载.此时,使用CImage将使得图片加载轻松自如. CImage加载导入图片 首先加载动态图片进入 ...
- cocos creator 读取android相册并显示
cocos creator 读取android相册并显示 前言 由于功能需求,需要读取手机相册的图片并在游戏中加载出来,百度了很多,也遇到了许多坑,下面这个是比较简单的,需要的自取. cocos 调用 ...
- 微信小程序 在使用wx.request时显示加载中
我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.request加工下就可以了,在utils下新建js文件network.j ...
- .ajax显示加载动画,jQuery Ajax 加载数据时异步显示加载动画
ajax加载后台数据就不说的那么细了. 看下面代码首先前台上放置代码 在js脚本文件中首先把这个图片动画隐藏 代码如下 $(document).ready(function () { $(" ...
最新文章
- 解决:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused:
- mysql查看服务器CPU和内存_怎么查看服务器的cpu和内存的硬件信息
- 让Android Studio 使用上vs的android模拟器
- sqlite数据库读写在linux下的权限问题
- python开发人工智能要不要很高数学_CFA、FRM持证人的“秘密武器”—Python,连潘石屹都在学,你确定不要了解一下吗?...
- http://blog.csdn.net/wangyoujin321/article/details/51472606
- 通过Everything 快速搭建局域网内文件服务器
- 函数的极值点、零点、驻点、拐点的理解
- aspCMS后台getshell
- TrueCrypt 使用经验[3]:关于加密
- 微服务分布式构架开发实战PDF,阿里架构师推荐,快快收藏吧
- 国内图像处理相关期刊
- POI读写Excel演练
- 利穗IT网络工程师面试试题
- python 淘宝滑块验证_python selenium 淘宝滑块验证码 问题
- 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?
- 笔试 | 大疆2021秋招笔试题及题解
- 周星馳 電影經典對白
- 产品持续优化的六个思考点
- 挖到宝了,这2款浏览器工具多看小说自由,没踩雷
热门文章
- 工业机器人到底涉及了哪些高科技?
- 分享几个好看的Bootstrap后台管理响应式模板
- 初见Python与对未来的展望
- Defaulting to no-operation (NOP) logger implementation
- InnoDB和Myisam引擎的优缺点
- ppt打印铺满纸张时的设置方法
- PHP compact() 函数,好用!
- 互联网快讯:晋江文学城将实施分年龄阅读推荐体系;三星SDI进军美国市场;猿辅导推出教育科技新品牌“飞象星球”
- mysql 分桶_使用hive脚本一键动态分区、分区又分桶以及脚本步骤详细详解(亲测成功)...
- ksxt问题集之——“请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理”