需求的产生

公司外网传内网的文件上传有大小限制,如今有一个数G的文件要传到内网去
环境:外网Mac,内网Windows

分包压缩

首先想到的是分包压缩,Mac下用BetterZip分卷压缩成xxx.zip.001~xxx.zip.014
内网用WinRAR解压,我凑,后缀为001的RAR不认识,直接打开告诉我压缩文件已损坏
心想分包解压可能是有一个固定的命名格式,另辟蹊径吧

文件分割

mac下有个命令 split
用如下命令可以将文件分割成100MB/个的小文件,分割后的文件叫 file.exe.aa file.exe.ab …

文件合并

windows下用copy命令就可以轻松的合并文件

Enjoy it!

问题的产生

项目是用ccs1.6做的UI,在某个需求中,需要把一个Sprite的SpriteFrame clone一份,去构造另一个
代码类似于

这样并没有问题
但是如果sprite的SpriteFrame被set过一个新的,那sprite2得到的SpriteFrame,依然是老的

怎么回事?

查看源码,我们发现Node:clone()方法被重写了(在NodeEx.lua里)

粗读一下代码,先克隆一个实例,然后克隆基础属性,最后递归把子节点也克隆了

那问题就应该出现在self:createCloneInstance_()上
查阅发现

好吧…直接用构造参数返回一个实例是什么鬼

既然出事了,就弄弄大

我们发现所有UI组件的createCloneInstance_方法都有这个问题
写一段比较简单的代码

 
可以看到,屏幕上显示label显示after,label2显示before

如果不用UI组件呢?

我试了一下,直接使用Sprite和LabelTTF是没有问题的,那这个就可以定性为quick的bug了

懒加载

我最先接触懒加载(延时加载)是在Hibernate里,因为一次和数据库交互过多,导致应用程序卡顿,所以就延迟加载这些数据,等需要的时候再取.可以认为懒加载就是非即时的加载数据.

 

问题的产生

在游戏开发中,也会碰到一次处理太多数据造成游戏卡顿降帧,比较典型的比如”背包”模块,背包可以认为是一个ListView,由一个lua table里的一些元素作为数据源来构建,当用一个for循环去构造界面时,背包格子过多会导致游戏线程卡住,游戏降帧在所难免.如何做到不降帧?我们可以把一个复杂的逻辑分在多个帧里去做.

 

来看看代码

用法

Github

戳这里

3D时代

当Unity3D开始支持2D的时候Cocos2d-x也开始慢慢支持3D

Cocos2d-x的3D

使用下来一是不习惯,二是问题比较多,比较明显的,就是模型在运动时白边比较严重

开启抗锯齿

找到项目的AppController.mm文件
在didFinishLaunchingWithOptions方法中将

替换成

模型白边的问题就好很多了

ScrollView滚动视图

在游戏开发过程中,由于手机屏幕空间有限,加上手指的灵动性,滑动成了最好的替换翻页的操作方式
ScrollView就是在这种需求驱动下的产物

cc.ScrollView和cc.ui.UIScrollView

前者是cocos2dx3.3原生的c++类,继承于cc.Layer
后者是QuickUI组件中的lua类,继承于cc.ClippingRectangleNode

quick中的cc.ui.UIScrollView用法

在实际运用过程中,我发现quick的滚动组件存在性能问题(windows上),一旦组件多了之后滚动不流畅,卡顿严重

原生cc.ScrollView用法

接上篇

CCI的出现和初衷虽然是极好的,但是使用过程中还是会有不尽人意的地方,比如复制黏贴卡顿/代码提示卡顿,或者不习惯用Eclipse等种种原因,还是有童鞋喜欢更轻量级一点的编辑器,比如Sublime Text

Sublime Text(简称ST)

ST是一款文本编辑器,它十分轻量级,以至于连IDE都称不上,而它最厉害的地方就是其丰富的插件库,使用插件的组合,可以迅速打造出一套属于自己的高效开发环境

插件开发

基于个人习惯原因,我们会有很多稀奇古怪的需求,这类需求可能是很小众的,大路的插件并不会予以支持,所以我们就得自己动手 下面的例子,就是我开发过程中碰到的需求,参见CCI版本的Cocos Code IDE的Lua模板加强
代码我上传到Github

新建插件LuaTemplate

首先找到插件目录,菜单中

  • OSX:Sublime Text->Preferences->Browse Packages…
  • Windows:Preferences->Browse Packages…

新建一个文件夹,命名为LuaTemplate 选择Tools->New Plugin… 新建一个.py文件,保存到LuaTemplate下

“ExampleCommand”就是我们执行命令的名字,以大驼峰式命名,实际的命令为”example” 按Ctrl+`打开ST控制台,输入

此时已打开文件的文件头,就会被输入”Hello World!”的字样 这里是ST Plugin API

编写插件逻辑

我们还是以newclass newlayer newfunction这几个来做例子
PS:博主不会python,现学的,语法写的烂请轻喷

配置文件

新建LuaTemplate.sublime-settings

入口快捷方式

新建Default.sublime-commands

这个是通过cmd+shift+p(windows:ctrl+shift+p)里输入命令来执行python代码的
还有菜单,侧边栏菜单,右键菜单等快捷入口,就不一一说了

跑一个

新建一个LoginLayer.lua文件,cmd+shift+p,然后输入new class,选择Lua Template: New Class

选择Lua Template: Run With Player也能顺利调用模拟器

前言

Cocos Code IDE(以下简称CCI)是一款基于Eclipse和LDT的代码编辑器,其主要面向Cocos2d-X Lua/JS/Quick-lua的开发

问题的产生

在开发过程中,我们新建一个lua文件,都需要

关键你复制了还需要把”ClassName”改成你要的

相当麻烦

So

我们有模板,在CCI中点击Windows->Preferences在左边选择Lua->Editor->Templates,单击”New”按钮

Name是触发字串,我们填newclass
Context选Lua
Description是提示信息,就叫”新建类”好了
Pattern:

当你键盘敲出newclass(等代码提示),啪一个回车,一个类就创建好了,还烙上了你的大名,绝对酷炫

这么看大致就懂了,各种宏的含义如下

${date},${time},${user}这就是日期,时间,作者(os的登录名),用来标识这个文件是何时谁创建的,追查问题精确到人
${module_short_name} 短文件名,比如我一个文件”app/views/LoginView.lua”,就可以取到”LoginView”

举一反三

在我的项目中还有很多快捷的模板
比如 function

比如newlayer

恩 剩下的看大家创造力了 有好用的记得在文章下回复~

由于没有找到有关egret性能测试的文章,决定自己动手测一下

测试方法

  • 下载egret-examples-1.5.0.zip 拷贝其中的monkey.son和monkey.png

  • 修改resource.json

  • 新建一个egret工程

  • 修改egretProperties.json中document_class为Test

  • 新建一个Test.ts

  • 代码如下

  • 发布

拷贝到自己服务器上用手机打开看看吧

说一下这边的测试结果

机型 个数 帧数
ip5s 200 45
ip5s 2000 8
ip5 200 48
红米Note4.4.2 200 7
三星G Note4 4.4.4 200 57

官方的一条FAQ

为什么Egret开发的游戏在某些Android设备上特别卡?

在 Android 早期版本( 4.4 之前) ,Android WebView 并不 100% 支持 HTML5 特性,如 WebGL、PageVisibility 、 WebSocket 等。

Google 为了解决这些问题,在 4.4 版本中,完全删除了原有的 WebView ,将其替换为了 chromium 架构的新 WebView。

由于这个修改的工作量过大,在部分特性在尚未全部完成的情况下,Android 就发布了 4.4.2 版本作为过渡,这导致了部分特性在 4.3版本是存在的,但是4.4.2 反而丢失了。 其中我们遇到的情况就是 Canvas 硬件加速特性丢失。

在 Android 4.4.4 版本中,google 完全完成了 WebView的架构迁移,Canvas硬件加速特性被重新置入 WebView中。

由于 HTML5 游戏依赖于 Canvas 渲染,而是否存在硬件加速对渲染结果有几十倍的差异,所以 HTML5游戏在 Android 4.4.2 系统上卡顿的问题由于操作系统限制,几乎不可能在应用层解决。