对于 jpg、png这类基础图片文件,使用 resources.load直接加载为 SpriteFrame类型是不正确的。
正确的加载流程
resources.load期望加载的是引擎已经识别并处理过的资源类型(如 Prefab, AnimationClip等)。而 jpg文件属于原始资产,引擎需要先将其转换为中间类型 ImageAsset,再生成 Texture2D,最后才能创建出 SpriteFrame。
请参考以下修正后的代码:
loadBoxImage() {
const boxImagePath = "main/box-1"; // 确保 resources/main/ 目录下有 box-1.jpg
// 1. 首先,将图片作为 ImageAsset 类型加载
resources.load(boxImagePath, ImageAsset, (err, imageAsset) => {
if (err) {
console.error("[ERROR] 加载 ImageAsset 失败:", err.message || err);
return;
}
console.log("[SUCCESS] ImageAsset 加载成功!");
// 2. 使用 ImageAsset 创建 Texture2D
const texture = new Texture2D();
texture.image = imageAsset;
// 3. 使用 Texture2D 创建 SpriteFrame
const spriteFrame = new SpriteFrame();
spriteFrame.texture = texture;
// 4. 将新建的 SpriteFrame 赋值给组件
this.box.spriteFrame = spriteFrame;
console.log("[SUCCESS] 宝箱 SpriteFrame 设置成功!");
});
}
您需要在代码文件的顶部引入新增的类型:
import { _decorator, Component, Sprite, SpriteFrame, resources, ImageAsset, Texture2D } from 'cc';