cocoscreator-精灵动态加载图片资源,实例化精灵(代码片段)

iwanghang iwanghang     2022-10-21     806

关键词:

CocosCreator-3.0-精灵动态加载图片资源,实例化精灵

var spriteFrameEnemyBigGlobal:SpriteFrame; // 精灵框架敌人大号全局变量
    onLoad()
        console.log(' - Life onLoad - ');
        // 加载 SpriteFrame,image 是 ImageAsset,spriteFrame 是 image/spriteFrame,texture 是 image/texture
        resources.load("images/enemy_big/spriteFrame", SpriteFrame, (error, spriteFrame) => 
            if (error) 
                console.log("resources.load - " + error);
            
            spriteFrameEnemyBigGlobal = spriteFrame;
        );
    
// 创建一个新的节点,因为Sprite是组件不能直接挂载到节点上,只能添加到为节点的一个组件  
let enemyBigNode = new Node('enemyBigNode');
// 调用新建的node的addComponent函数,会返回一个sprite的对象  
let enemyBigSprite = enemyBigNode.addComponent(Sprite);
// 给sprite的spriteFrame属性 赋值  
enemyBigSprite.spriteFrame = spriteFrameEnemyBigGlobal;

以上是核心代码,以下是完整代码

注意,完整代码里,没有使用动态加载,相关代码被注释了,使用的是声明spriteFrameEnemyBig,然后在属性检查器里,对ts脚本中的spriteFrameEnemyBig直接赋值enemy_big图片资源的方法


import  _decorator, Component, Node, Label, Sprite, Vec3, Prefab, instantiate, director, resources, SpriteFrame, Layers, UITransform, Canvas, view, View from 'cc';
const  ccclass, property  = _decorator;

// 全局变量
var nodeFatherX:Node;
var frame:number = 0; //总共绘制的帧数
var arrayPlane = [];
var arrayPlaneNunber:number = -2; //累计生成敌人数
var spriteFrameEnemyBigGlobal:SpriteFrame; // 精灵框架敌人大号全局变量
var gameWidthX:number = 0; //游戏宽度
var gameHeightX:number = 0; //游戏高度

@ccclass('Fish')
export class Fish extends Component 
    // [1]
    // dummy = '';

    // [2]
    // @property
    // serializableDummy = 0;

    @property(type: SpriteFrame)
    public spriteFrameEnemyBig: SpriteFrame|null = null; // 精灵框架敌人大号

    // onLoad 回调会在节点首次激活时触发,比如所在的场景被载入,或者所在节点被激活的情况下。
    // 在 onLoad 阶段,保证了你可以获取到场景中的其他节点,以及节点关联的资源数据。
    // onLoad 总是会在任何 start 方法调用前执行,这能用于安排脚本的初始化顺序。
    // 通常我们会在 onLoad 阶段去做一些初始化相关的操作。
    onLoad()
        console.log(' - Life onLoad - ');
        // 获取主要Node
        nodeFatherX = this.node; 
        // 加载 SpriteFrame,image 是 ImageAsset,spriteFrame 是 image/spriteFrame,texture 是 image/texture
        resources.load("images/enemy_big/spriteFrame", SpriteFrame, (error, spriteFrame) => 
            if (error) 
                console.log("resources.load - " + error);
            
            spriteFrameEnemyBigGlobal = spriteFrame;
        );
        // 获取游戏可见宽高
        const gameCanvas = view.getVisibleSize();
        gameWidthX = gameCanvas.width;
        gameHeightX = gameCanvas.height;
        console.log('gameVisibleSize = ' + gameWidthX + "*" + gameHeightX);
    

    start () 
        // [3]
    

    update (deltaTime: number) 
        // [4]
        // 第一次绘制时,将战斗机移到Canvas的 水平方向的1/3,垂直方向的中心
        if(frame == 0)
            // float centerX = canvas.getWidth() / 3 - combatAircraft.getWidth() / 2;
            // float centerY = canvas.getHeight() / 2;
            // combatAircraft.centerTo(centerX, centerY);
        
        // 每隔100帧随机添加Sprite
        if(frame % 10 == 0)
            // createRandomSprites(canvas.getWidth(), canvas.getHeight());
            this.createRandomSprites();
        
        frame++;
    

    // 生成随机的Sprite
        createRandomSprites () 
            arrayPlaneNunber ++;
            // 创建一个新的节点,因为Sprite是组件不能直接挂载到节点上,只能添加到为节点的一个组件  
            let enemyBigNode = new Node('enemyBigNode');
            // 调用新建的node的addComponent函数,会返回一个sprite的对象  
            let enemyBigSprite = enemyBigNode.addComponent(Sprite);
            // 给sprite的spriteFrame属性 赋值  
            enemyBigSprite.spriteFrame = this.spriteFrameEnemyBig; // 在xml定义
            // enemyBigSprite.spriteFrame = spriteFrameEnemyBigGlobal; // 动态获取
            // 获取enemyBigNode的宽高 - 得到图片的宽高,不是真实的宽高
            const enemyBigUITransform = enemyBigNode.getComponent(UITransform)!;
            const enemyBigWidth = enemyBigUITransform.width;
            const enemyBigHeight = enemyBigUITransform.height;
            // console.log('enemyBigUITransform = ' + enemyBigWidth + "*" + enemyBigHeight);
            // FixMe - 获取enemyBigNode的宽高  
            // const enemyBigWidth = spritePlane.getComponent;
            // const enemyBigHeight = spritePlane.
            // console.log('enemyBigUITransform = ' + enemyBigWidth + "*" + enemyBigHeight);
            // let spriteLabel = nodePlane.addComponent(Label);
            // spriteLabel.string = "112233444555666";
            // enemyBigNode.setPosition(gameWidthX-enemyBigWidth,-gameHeightX/2+arrayPlaneNunber*enemyBigHeight,0);
            enemyBigNode.setPosition(gameWidthX/2-enemyBigWidth/2,gameHeightX/2-enemyBigHeight/2,0);
            // nodePlane.parent = this.node;  // 将新节点作为当前节点的子节点
            enemyBigNode.parent = nodeFatherX;  // 将新节点作为当前节点的子节点
            enemyBigNode.layer = Layers.Enum.UI_2D 
        


/**
 * [1] Class member could be defined like this.
 * [2] Use `property` decorator if your want the member to be serializable.
 * [3] Your initialization goes here.
 * [4] Your update function goes here.
 *
 * Learn more about scripting: https://docs.cocos.com/creator/3.0/manual/en/scripting/
 * Learn more about CCClass: https://docs.cocos.com/creator/3.0/manual/en/scripting/ccclass.html
 * Learn more about life-cycle callbacks: https://docs.cocos.com/creator/3.0/manual/en/scripting/life-cycle-callbacks.html
 */

cocoscreator-精灵动态加载图片资源,实例化精灵(代码片段)

CocosCreator-3.0-精灵动态加载图片资源,实例化精灵varspriteFrameEnemyBigGlobal:SpriteFrame;//精灵框架敌人大号全局变量onLoad()console.log('-LifeonLoad-');//加载SpriteFrame,image是ImageAsset,spriteFrame是im 查看详情

cocoscreator-精灵动态加载图片资源,实例化精灵(代码片段)

CocosCreator-3.0-精灵动态加载图片资源,实例化精灵varspriteFrameEnemyBigGlobal:SpriteFrame;//精灵框架敌人大号全局变量onLoad()console.log('-LifeonLoad-');//加载SpriteFrame,image是ImageAsset,spriteFrame是image/spriteFrame,texture是image... 查看详情

cocoscreator-如何动态加载资源

参考技术A本文主要说明在CocosCreator中如何动态加载Sprite、Prefab、Animation、Spine等资源。动态加载图片动态加载Prefab动态加载Animation动态加载Spine动画 查看详情

cocoscreator卡在加载资源

cocoscreator卡在加载资源具体解答如下1、软件包故障:重新从官网,应用市场或应用商店下载最新版本,重新安装。2、系统版本不兼容:去官网换一个版本下载并重新安装。参考技术A静态加载/动态加载cocos的资源加载方式有静态... 查看详情

cocoscreator图片和文字的动态加载

参考技术A1.图片的动态加载cc.loader.loadRes("imgs/silver",cc.SpriteFrame,function(err,spriteFrame)self.fristImageItem.spriteFrame=spriteFrame);//cc.loader.load(url:"http://cdn.baifm.cn/1/wxb/img/heag_default.png",type:'png',function(err,texture)////Usetexturetoc... 查看详情

微信小游戏开发之cocoscreator资源加载方式

...充和分析。CocosCreator导入资源方式:项目中常用的资源有图片资源、预制资源(Prefab)、图集资源、脚本资源、声音资源、字体资源、JSON资源、文本资源等。这些资源都可以直接拖动属性编辑器中绑定赋值,但是资源的读取涉... 查看详情

cocoscreator教程(入门篇)

参考技术A自动释放资源:切换场景后,上一个场景中的资源,从内存中释放。延迟加载资源:意味着不用等待所有资源加载完毕,才显示场景。(快速切换场景,资源陆续在画面显示)普通图,子层为一张spriteFrame。创建方式:... 查看详情

cocoscreator资源管理assetmanager

版本:2.4.0cocos的资源管理初用真的很难。靠依赖关系去加载,释放,往往不灵活,得不到想要的结果。Egret资源管理做得很好,有可视化管理工具,资源分组加载,动态加载之类都比较灵活。解决了1个... 查看详情

cocoscreator如何加载一张图片并渲染出来的

参考技术A导读:  ccc我们在使用一张图片的时候,使用cc.laodapi,回调传回来cc.spriteFrame或者cc.texture来供我们使用。下面的内容会解密中间到底经历了哪些过程(native)。加载:首先会在js引擎中,通过一些方式得到资源... 查看详情

cocoscreator基础-cc.sprite使用(代码片段)

...示一个图片,通常我们把这个叫做”精灵”sprite2:cocoscreator如果需要显示一个图片,那么需要在节点上挂一个精灵组件,为这个组件指定要显示的图片(SpriteFrame)3:显示一个图片的步骤:(1)创建一个节点;(2)添加一个组件;(3)要显... 查看详情

cocoscreator-动态生成3种敌人(代码片段)

CocosCreator-3.0-动态生成3种敌人import_decorator,Component,Node,Label,Sprite,Vec3,Prefab,instantiate,director,resources,SpriteFrame,Layers,UITransform,Canvas,view,Viewfrom\'cc\';constccclass,property=_decorator;//全局变量varnodeFatherX:Node;varframe:number=0;//总共绘制的帧数vararra... 查看详情

cocoscreator-动态生成3种敌人(代码片段)

CocosCreator-3.0-动态生成3种敌人import_decorator,Component,Node,Label,Sprite,Vec3,Prefab,instantiate,director,resources,SpriteFrame,Layers,UITransform,Canvas,view,Viewfrom\'cc\';constccclass,property=_decorator;//全局变量varnodeFatherX:Node;varframe:number=0;//总共绘制的帧数vararra... 查看详情

cocoscreator基础-(十三)cc.loader使用(代码片段)

1:掌握cc.loader加载本地资源;2:掌握cc.loader加载远程资源;3:掌握资源释放的机制与autorelease;4:掌握手动释放资源; cc.Loader 1:有三个默认的Pipeline:  (1)assetLoader:主要用于加载资源,加载asset类型资源,和释放这些资源;  (2)down... 查看详情

cocoscreator基础-(二十四)cc.director与资源加载策略(代码片段)

1:了解creator场景切换;2:了解director基本的一些接口;3:理解资源加载的策略; cc.Director对象1:游戏里面控制管理整个游戏全局对象,包括了场景切换等,为cc.Director对象;2:导演对象全局只有一个cc.director,大写的为类,小写的cc.dire... 查看详情

ccvirtualgridlist-cocoscreator虚拟列表

参考技术ACCVirtualGridList是基于CocosCreatorScrollView+Layout编写的一个具有虚拟布局特点的滚动列表控制容器。支持平滑滚动显示大量数据对象,图片元素可以实现异步按帧加载,保证滚动平滑。具有滚动翻页功能,自适应宽度显示多... 查看详情

加载精灵

如果精灵图片不是单一图片(拥有子图)可以称它为长条图,当gamemakerstudio加载这类精灵图片时,我们给图片名字命名为*_strip列数.*,这样当加载图片时gamemakerstudio会自动帮我们逐帧剪切图片,但如果图片不只一行子图时,剪切的效... 查看详情

unity3d动态纹理加载与精灵创建

查看详情

cc.sprite如何绘制图片

...为“图片”。3.选择“图片”纹理类型后,会出现一个“图片资源”的下拉列表,选择想要绘制的图片资源。4.确认“图片资源”已选定后,可以在“属性检查器”中设置图片的宽度、高度、透明度、旋转角度等属性。5.在场景中... 查看详情