LollipopCreator:AvatarManager

LollipopCreator游戏框架    

游戏客户端开发中,由于制作人或者策划立项的不同,导致前端开发并不像后端框架不变,例如 2D游戏开发,引擎选择就比较多,Unity、cocos、 白鹭等都可以,本系列就是给大家开源一套cocos creator引擎开发的2D游戏框架LollipopGo。 creator 系统为例,给大家梳理下前端2D游戏架构的基础设计思想。

Index


返回首页


  • 如何设计

  • 调用流程

  • 实例代码

如何设计

    
1. 工程中的头像资源管理,包括头像资源的加载等

调用流程

    
例子:
   load() {
       cc.loader.loadResDir('Base/data/ABhead', cc.SpriteFrame, (err, assets) => {
           if (err) {
               return cc.error(err)
           }
           assets.forEach((it) => {
               this.staticHead[it.name] = it
           })
       })
   }
注意点:资源位置Base/data/ABhead,其中ABhead目录是可以换成自己的目录的


实例代码

    
'use strict'


class AvatarManager {
   constructor() {
       this.textures = {}
       this.staticHead = {}
   }

   load() {
       cc.loader.loadResDir('Base/data/ABhead', cc.SpriteFrame, (err, assets) => {
           if (err) {
               return cc.error(err)
           }
           assets.forEach((it) => {
               this.staticHead[it.name] = it
           })
       })
   }

   getHeadImgByIdx(idx) {
       // return this.staticHead[`tx_${idx + 1}`]
       if (idx == 0)
           idx = 1;
       return this.staticHead[`tx_${idx}`]
   }

   setByTex(node, tex) {
       let sp = node.getComponent(cc.Sprite)
       sp.spriteFrame = new cc.SpriteFrame(tex)
       // node.width = node.width
       // node.height = node.height
   }

   setByURL(node, url) {
       // if (!cc.sys.isNative || !url) {
       let sp = node.getComponent(cc.Sprite)
       // sp.spriteFrame = null
       sp.spriteFrame = this.getHeadImgByIdx(url);

       // 读取网络的数据
       if (!url) {
           return
       }

       if (this.textures[url]) {
           this.setByTex(node, this.textures[url])
       } else {
           cc.loader.load({ url: url, type: "jpg" }, (err, tex) => {
               if (err) {
                   return cc.log('setByURL fail to load ', url)
               }

               this.textures[url] = tex
               this.setByTex(node, tex)
           })
       }
   }
}

window.avatarMgr = new AvatarManager