温馨提醒:即刻转去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 精灵不显示、加载动态图片、物理碰撞、人物跟随鼠标移动、碰撞后节点销毁相关推荐

  1. cocos creator 2.4.3cc.assetManager.loadRemote 加载不了微信头像

    cocos creator 2.4.3cc.assetManager.loadRemote 加载不了微信头像 项目升级了2.4.3,发现cc.assetManager.loadRemote这个接口微信 ...

  2. vue3加载动态图片

    vue3加载动态图片 一.动态加载图片 使用new URL(url, import.meta.url) <template><div class="home"&g ...

  3. Glide加载动态图片

    首先我们先要去依赖一个githup:bumptech:glide:glide:3.7.0包: 1.使用Glide结合列表的样式进行图片加载: 1) 如果使用的是ListView,可以直接在Adapte ...

  4. vue 加载动态图片出错的三种解决方法

    由于解析问题,通常直接引用链接,图片会加载失败,通过学习,整理出以下三种解决错误的方法 <template><div class="first"><! ...

  5. ajax 延迟显示加载中提示

    近期做项目时用到了jquery的ajax,我希望实现"加载时提示用户"的功能,于是先习惯性的度娘谷哥了下,发现按照网上朋友所说的做,每次加载都会提示,不符合我的需求.于是我改进了下 ...

  6. c 语言解析png图片文件信息,使用CImage加载PNG图片文件

    在MFC开发中,大家很容易用到PNG等流行媒体格式.但是MFC只提供了简单的BMP,ICON等文件的加载.此时,使用CImage将使得图片加载轻松自如. CImage加载导入图片 首先加载动态图片进入 ...

  7. cocos creator 读取android相册并显示

    cocos creator 读取android相册并显示 前言 由于功能需求,需要读取手机相册的图片并在游戏中加载出来,百度了很多,也遇到了许多坑,下面这个是比较简单的,需要的自取. cocos 调用 ...

  8. 微信小程序 在使用wx.request时显示加载中

    我们可以用wx.showLoading(OBJECT),当请求服务器的地方多了,怎么才能不每次都要去调用函数,我们只要对wx.request加工下就可以了,在utils下新建js文件network.j ...

  9. .ajax显示加载动画,jQuery Ajax 加载数据时异步显示加载动画

    ajax加载后台数据就不说的那么细了. 看下面代码首先前台上放置代码 在js脚本文件中首先把这个图片动画隐藏 代码如下 $(document).ready(function () { $(" ...

最新文章

  1. 解决:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused:
  2. mysql查看服务器CPU和内存_怎么查看服务器的cpu和内存的硬件信息
  3. 让Android Studio 使用上vs的android模拟器
  4. sqlite数据库读写在linux下的权限问题
  5. python开发人工智能要不要很高数学_CFA、FRM持证人的“秘密武器”—Python,连潘石屹都在学,你确定不要了解一下吗?...
  6. http://blog.csdn.net/wangyoujin321/article/details/51472606
  7. 通过Everything 快速搭建局域网内文件服务器
  8. 函数的极值点、零点、驻点、拐点的理解
  9. aspCMS后台getshell
  10. TrueCrypt 使用经验[3]:关于加密
  11. 微服务分布式构架开发实战PDF,阿里架构师推荐,快快收藏吧
  12. 国内图像处理相关期刊
  13. POI读写Excel演练
  14. 利穗IT网络工程师面试试题
  15. python 淘宝滑块验证_python selenium 淘宝滑块验证码 问题
  16. 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?
  17. 笔试 | 大疆2021秋招笔试题及题解
  18. 周星馳 電影經典對白
  19. 产品持续优化的六个思考点
  20. 挖到宝了,这2款浏览器工具多看小说自由,没踩雷

热门文章

  1. 工业机器人到底涉及了哪些高科技?
  2. 分享几个好看的Bootstrap后台管理响应式模板
  3. 初见Python与对未来的展望
  4. Defaulting to no-operation (NOP) logger implementation
  5. InnoDB和Myisam引擎的优缺点
  6. ppt打印铺满纸张时的设置方法
  7. PHP compact() 函数,好用!
  8. 互联网快讯:晋江文学城将实施分年龄阅读推荐体系;三星SDI进军美国市场;猿辅导推出教育科技新品牌“飞象星球”
  9. mysql 分桶_使用hive脚本一键动态分区、分区又分桶以及脚本步骤详细详解(亲测成功)...
  10. ksxt问题集之——“请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理”