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


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

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

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

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

    1. import { _decorator, Component, Node, Label, Sprite, Vec3, Prefab, instantiate, director, resources, SpriteFrame, Layers, UITransform, Canvas, view, View} from 'cc';
    2. const { ccclass, property } = _decorator;
    3. // 全局变量
    4. var nodeFatherX:Node;
    5. var frame:number = 0; //总共绘制的帧数
    6. var arrayPlane = [];
    7. var arrayPlaneNunber:number = -2; //累计生成敌人数
    8. var spriteFrameEnemyBigGlobal:SpriteFrame; // 精灵框架敌人大号全局变量
    9. var gameWidthX:number = 0; //游戏宽度
    10. var gameHeightX:number = 0; //游戏高度
    11. @ccclass('Fish')
    12. export class Fish extends Component {
    13. // [1]
    14. // dummy = '';
    15. // [2]
    16. // @property
    17. // serializableDummy = 0;
    18. @property({type: SpriteFrame})
    19. public spriteFrameEnemyBig: SpriteFrame|null = null; // 精灵框架敌人大号
    20. // onLoad 回调会在节点首次激活时触发,比如所在的场景被载入,或者所在节点被激活的情况下。
    21. // 在 onLoad 阶段,保证了你可以获取到场景中的其他节点,以及节点关联的资源数据。
    22. // onLoad 总是会在任何 start 方法调用前执行,这能用于安排脚本的初始化顺序。
    23. // 通常我们会在 onLoad 阶段去做一些初始化相关的操作。
    24. onLoad(){
    25. console.log(' - Life onLoad - ');
    26. // 获取主要Node
    27. nodeFatherX = this.node;
    28. // 加载 SpriteFrame,image 是 ImageAsset,spriteFrame 是 image/spriteFrame,texture 是 image/texture
    29. resources.load("images/enemy_big/spriteFrame", SpriteFrame, (error, spriteFrame) => {
    30. if (error) {
    31. console.log("resources.load - " + error);
    32. }
    33. spriteFrameEnemyBigGlobal = spriteFrame;
    34. });
    35. // 获取游戏可见宽高
    36. const gameCanvas = view.getVisibleSize();
    37. gameWidthX = gameCanvas.width;
    38. gameHeightX = gameCanvas.height;
    39. console.log('gameVisibleSize = ' + gameWidthX + "*" + gameHeightX);
    40. }
    41. start () {
    42. // [3]
    43. }
    44. update (deltaTime: number) {
    45. // [4]
    46. // 第一次绘制时,将战斗机移到Canvas的 水平方向的1/3,垂直方向的中心
    47. if(frame == 0){
    48. // float centerX = canvas.getWidth() / 3 - combatAircraft.getWidth() / 2;
    49. // float centerY = canvas.getHeight() / 2;
    50. // combatAircraft.centerTo(centerX, centerY);
    51. }
    52. // 每隔100帧随机添加Sprite
    53. if(frame % 10 == 0){
    54. // createRandomSprites(canvas.getWidth(), canvas.getHeight());
    55. this.createRandomSprites();
    56. }
    57. frame++;
    58. }
    59. // 生成随机的Sprite
    60. createRandomSprites () {
    61. arrayPlaneNunber ++;
    62. // 创建一个新的节点,因为Sprite是组件不能直接挂载到节点上,只能添加到为节点的一个组件
    63. let enemyBigNode = new Node('enemyBigNode');
    64. // 调用新建的node的addComponent函数,会返回一个sprite的对象
    65. let enemyBigSprite = enemyBigNode.addComponent(Sprite);
    66. // 给sprite的spriteFrame属性 赋值
    67. enemyBigSprite.spriteFrame = this.spriteFrameEnemyBig; // 在xml定义
    68. // enemyBigSprite.spriteFrame = spriteFrameEnemyBigGlobal; // 动态获取
    69. // 获取enemyBigNode的宽高 - 得到图片的宽高,不是真实的宽高
    70. const enemyBigUITransform = enemyBigNode.getComponent(UITransform)!;
    71. const enemyBigWidth = enemyBigUITransform.width;
    72. const enemyBigHeight = enemyBigUITransform.height;
    73. // console.log('enemyBigUITransform = ' + enemyBigWidth + "*" + enemyBigHeight);
    74. // FixMe - 获取enemyBigNode的宽高
    75. // const enemyBigWidth = spritePlane.getComponent;
    76. // const enemyBigHeight = spritePlane.
    77. // console.log('enemyBigUITransform = ' + enemyBigWidth + "*" + enemyBigHeight);
    78. // let spriteLabel = nodePlane.addComponent(Label);
    79. // spriteLabel.string = "112233444555666";
    80. // enemyBigNode.setPosition(gameWidthX-enemyBigWidth,-gameHeightX/2+arrayPlaneNunber*enemyBigHeight,0);
    81. enemyBigNode.setPosition(gameWidthX/2-enemyBigWidth/2,gameHeightX/2-enemyBigHeight/2,0);
    82. // nodePlane.parent = this.node; // 将新节点作为当前节点的子节点
    83. enemyBigNode.parent = nodeFatherX; // 将新节点作为当前节点的子节点
    84. enemyBigNode.layer = Layers.Enum.UI_2D
    85. }
    86. }
    87. /**
    88. * [1] Class member could be defined like this.
    89. * [2] Use `property` decorator if your want the member to be serializable.
    90. * [3] Your initialization goes here.
    91. * [4] Your update function goes here.
    92. *
    93. * Learn more about scripting: https://docs.cocos.com/creator/3.0/manual/en/scripting/
    94. * Learn more about CCClass: https://docs.cocos.com/creator/3.0/manual/en/scripting/ccclass.html
    95. * Learn more about life-cycle callbacks: https://docs.cocos.com/creator/3.0/manual/en/scripting/life-cycle-callbacks.html
    96. */

  • 相关阅读:
    mysql数据库报错:1166-Incorrect column name ‘xxx‘
    PageRank实战---西游记人物节点重要度
    中级前端面试整理-上篇
    Leetcode(347)——前 K 个高频元素
    MySQL 百万级/千万级表 全量更新
    BIM如何通过3D开发工具HOOPS实现WEB轻量化?
    网络通信深入解析:探索TCP/IP模型
    实用又好用,4款高质量办公软件,助你工作效率,节节攀升
    Linux常用系统性能监控命令
    【C++入门】string类常用方法(万字详解)
  • 原文地址:https://blog.csdn.net/iwanghang/article/details/125510587