cocos-新版本中遇到的问题记录

最近公司新版本告一段落,空闲一点了,把做新版本过程中遇到的问题记录一下。

一、精灵过多,渲染卡顿

因为游戏需要单个不停的创建精灵,所以当精灵过多时,渲染会很卡。尝试过精灵缓存队列,然而效果并不好,因为从队列中取出精灵的模式与原有业务逻辑冲突,批量创建渲染也不行,所以采取了减少渲染数量的方法。后续再来修改业务逻辑。


二、数字标签与自定义字体

游戏中有很多可变的精灵,如果全部用ui切图的话,图片太多不现实,另一方面,如果服务端修改参数了,那游戏无法动态改变。所以采用精灵+数字标签或者自定义字体的方式。

1.AtlasLabel数字标签
首先用TexturePacker将ui给的数字小图合成一张图,这些小图宽高需要相等,然后代码中

cc.LabelAtlas:create("100", "nums_font.png", 14, 21, 48)

即可使用数字标签,第一个参数是要显示的值,第二个是合图路径,第三个是小图宽,第四个是小图高,第五个是合图中首个数字的ASCII码。

2.BitmapLabel自定义字体
自定义字体我是用BmFont这个工具制作的,官网在这。打开BmFont之后,首先Edit→Open Image Manger→Image。导入相关图片,注意图片不能被压缩,否则可能无法导入。

导入时这里有一个id,填对应的ASCII码,比如我这个图片是1,就可以填1的ASCII码49。每个数字的ascii码可以在bmfont中找到。导入所有图片,设定好对应的ASCII码之后,再点击Options→Export options 。可以设定padding,导出图片大小等等。如果是带颜色图片记得bit depth设置为32位。底部设置如下

导出图片后,代码中

cc.LabelBMFont:create(num,"文件路径")

即可使用自定义字体。

在我的实际使用过程中,数字标签与自定义字体生成的图片相对于ui原图来说会有模糊的情况,如果ui上要求不高可以忽略。


三、纹理图集

游戏里用到了很多散图,为了减少游戏包体积与内存占用,则可以使用TexturePacker进行合图。优点:
1.减少文件读取次数,读取一张图片比读取一堆小文件要快。
2.减少OpenGL ES绘制调用并且加速渲染。
3.减少内存消耗。


四、代码创建动画与cocostudio创建动画文件

新版本中加了很多动画效果,分别采用了代码创建动画与调用帧动画文件的方式来实现。

1.代码创建动画
可以参加官方文档中的动作系统,通过不同动作的组合来达到目的。
2.cocostudio 1.6创建动画文件,代码调用如下:

local armatureDataManager = ccs.ArmatureDataManager:getInstance()
    armatureDataManager:addArmatureFileInfo(GameRes.string_tp_json)
    self.tpArma = ccs.Armature:create(GameRes.string_tp_name)
    self.tpArma:getAnimation():playWithIndex(0)
    local function animationEvent(armatureBack, movementType, movementID)
        self:goFly()
    end
    self.tpArma:getAnimation():setMovementEventCallFunc(animationEvent)   
    self.tpArma:setPosition(self.worldPosition.x,self.worldPosition.y)  
    self:addChild(self.tpArma) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值