cocosCreator 之 Sprite动态加载和远程加载

版本: 3.4.0

语言: TypeScript

环境: Mac


简介

图片是很多项目中的重要资源。主要有两类:

  • 单一的图片,格式主要有JPGPNG
  • 图集,在程序中使用图集资源中某个资源一般叫做精灵帧

在cocosCreator中,图片资源的特性很有意思, 看下继承的Asset结构:

图像资源
精灵图集资源
精灵帧资源
贴图资源基类
简单贴图基类
二维贴图资源
Asset
ImageAsset
SpriteAtlas
SpriteFrame
cocos_core_assets_texture_base_TextureBase
cocos_core_assets_simple_texture_SimpleTexture
Texture2D

将单一的图片资源或图集资源加入到编译器后,如图所示:
请添加图片描述

在cocosCreator中,图片资源会分为三部分:

  • ImageAsset 图像源资源
  • spriteFrame 图像的精灵帧资源
  • texture 图像的贴图资源

在编译器中设置资源的时候,只需设置SpriteAtlasSpriteFrame即可
请添加图片描述

注:如果没有图集,则设置SpriteFrame即可

但如果是动态加载的话,我们需要了解各种的加载方式,以备不时之需。

本篇博客的主要内容有:

  • resources.load通过ImageAsset,SpriteFrame, Texture实现图片的更换
  • resources.load通过SpriteAtlas图集获取精灵帧实现图片更换
  • 远程下载图片,实现图片更换

resources.load动态加载


使用resource.load动态加载的资源,仅限于assets/resources目录下的资源,切记!

使用ImageAsset

let url = "textures/PurpleMonster";
let sprite = this.node.getComponent(Sprite);
// 方式1:构建SpriteFrame和Texture2D
resources.load(url, ImageAsset, (err, imageAsset) => {
  if (err) {
    return console.error("ImageAssert load failed, err:" + err.message);
  }
  const spriteFrame = new SpriteFrame();
  const texture = new Texture2D(); 
  texture.image = imageAsset;
  spriteFrame.texture = texture;
  sprite.spriteFrame = spriteFrame;
});

// 方式2: 使用SpriteFrame的createWithImage方法将ImageAsset对象创建SpriteFrame
resources.load(url, ImageAsset, (err, imageAsset) => {
  if (err) {
    return console.error("ImageAssert load failed, err:" + err.message);
  }
  sprite.spriteFrame = SpriteFrame.createWithImage(imageAsset);
});

使用SpriteFrame

let url = "textures/gold/spriteFrame";
resources.load(url, SpriteFrame, (err, spriteFrame) => {
  if (err) {
    return console.error("SpriteFrame load failed, err:" + err.message);
  }
  const sprite = this.node.getComponent(Sprite);
  sprite.spriteFrame = spriteFrame;
});

注: 获取图片资源的spriteFrame,需要在路径处添加后缀spriteFrame

使用texture

let url = "textures/gold/texture";
resources.load(url, Texture2D, (err: any, texture: Texture2D) => {
  if (err) {
    return console.error("SpriteFrame load failed, err:" + err.message);
  }
  const spriteFrame = new SpriteFrame();
  spriteFrame.texture = texture;
  const sprite = this.node.getComponent(Sprite);
  sprite.spriteFrame = spriteFrame;
});

注: 使用图片资源的texture,需要在路径处增加texture

使用图集获取精灵帧

let url = "textures/emoji";
resources.load(url, SpriteAtlas, (err:any, atlas) => {
  if (err) {
    return console.error("SpriteAtlas load failed, err:" + err.message);;
  }
  // 根据键值获取指定的精灵帧
  let spriteFrame: SpriteFrame = atlas.getSpriteFrame("emoji3");
  sprite.spriteFrame = spriteFrame;
});

远程资源加载


放置在资源服务器或者其他平台的资源,需要通过assetManager.loadRemote进行加载。

资源的特点是:带有http/https修饰,可能没有文件的后缀。

因条件限制,资源的路径主要来源于微信小游戏的官方文档:wx.showShareMenu 示例中的路径

// 不带有后缀的,必须指证文件类型
let url = "http://unknown.org/emoji?id=124982374";
assetManager.loadRemote<ImageAsset>(url, {ext:'.png'}, (err, imageAsset) => {
  const spriteFrame = new SpriteFrame();
  const texture = new Texture2D();
  texture.image = imageAsset;
  spriteFrame.texture = texture;
	this.sprite.spriteFrame = spriteFrame;
});

// 带有后缀的
let url = 'https://res.wx.qq.com/wxdoc/dist/assets/img/demo.ef5c5bef.jpg';
assetManager.loadRemote<ImageAsset>(url, (err, imageAsset) => {
  if (err) {
    return console.error("ImageAsset loadRemote failed:" + err.message);
  }
  let spriteFrame = SpriteFrame.createWithImage(imageAsset);
  this.sprite.spriteFrame = spriteFrame;
});

带后缀的示意图:
请添加图片描述

至此,文章结束,祝大家学习生活愉快!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cocos Creator 是一款基于 JavaScript 的游戏开发工具,支持动态加载资源。动态加载资源是指在游戏运行时,根据需要动态加载游戏所需的资源,例如图片、声音、动画等。 动态加载资源的优点在于可以减少游戏的启动时间和内存占用,同时也可以提高游戏的灵活性和可维护性。下面介绍一下 Cocos Creator 中如何进行动态加载资源。 1. 加载图片资源 使用 cc.loader.loadRes() 方法可以加载项目中的资源,例如图片资源。示例代码如下: ``` cc.loader.loadRes("image/test", cc.SpriteFrame, function (err, spriteFrame) { if (err) { cc.error(err.message || err); return; } var node = new cc.Node("New Sprite"); var sprite = node.addComponent(cc.Sprite); sprite.spriteFrame = spriteFrame; node.parent = cc.director.getScene(); }); ``` 该代码会加载项目中的 "image/test" 路径下的图片资源,并创建一个新的 Sprite 对象,将图片资源赋值给 SpritespriteFrame 属性,最后将 Sprite 对象添加到场景中。 2. 加载声音资源 使用 cc.loader.loadRes() 方法也可以加载声音资源。示例代码如下: ``` cc.loader.loadRes("audio/test", cc.AudioClip, function (err, audioClip) { if (err) { cc.error(err.message || err); return; } cc.audioEngine.play(audioClip, false, 1); }); ``` 该代码会加载项目中的 "audio/test" 路径下的声音资源,并播放该声音。 3. 加载动画资源 使用 cc.loader.loadRes() 方法也可以加载动画资源。示例代码如下: ``` cc.loader.loadRes("animation/test", cc.AnimationClip, function (err, animationClip) { if (err) { cc.error(err.message || err); return; } var node = new cc.Node("New Animation"); var animation = node.addComponent(cc.Animation); animation.addClip(animationClip); animation.play("test"); node.parent = cc.director.getScene(); }); ``` 该代码会加载项目中的 "animation/test" 路径下的动画资源,并创建一个新的 Animation 对象,将动画资源添加到 Animation 中,最后播放名为 "test" 的动画。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤九日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值