HABIT IS POWER

习惯就是力量

0%

需求

最近在看Tornado的教程,其中使用了MongoDB,之前没用过,所以需要配置下相关的环境,并在Python中使用

安装MongoDB

完整的命令行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装
brew update
brew install mongodb

# 为数据库创建默认的文件目录,并设置权限
sudo mkdir -p /data/db
sudo chown -R linyehui /data

# 启动服务器
mongod

# 另外启动一个终端,连接服务器
mongo

过程分解

我的系统是Mac OS X 10.11.2,根据MongoDB官网的指引,我直接用HomeBrew安装

1
2
brew update
brew install mongodb

安装成功后,尝试启动数据库服务:

1
2
3
4
mongod

# 出现错误,提示
2016-01-13T15:19:24.484+0800 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating

原来是默认的数据库目录不存在,但是于是创建下:

1
2
3
4
sudo mkdir -p /data/db

# 记得要设置下目录权限,把owner设置成当前用户
sudo chown -R linyehui /data

如果目前权限没有设置正常,会出现权限问题:

1
2016-01-13T15:22:47.055+0800 I STORAGE  [initandlisten] exception in initAndListen: 98 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

好了,可以起启动了

1
2
3
4
5
6
mongod

# 终端显示
2016-01-13T19:58:30.287+0800 I CONTROL [initandlisten] MongoDB starting : pid=16845 port=27017 dbpath=/data/db 64-bit host=linyehui-mbp.local
2016-01-13T19:58:30.288+0800 I CONTROL [initandlisten] db version v3.2.0
...

服务器启动好了,就可以新建一个终端,来连接数据库测试了

1
2
3
4
5
mongo

# 终端显示
MongoDB shell version: 3.2.0
connecting to: test

Python中使用MongoDB

我们这里使用的Python库是PyMongo,我直接用pip安装:

1
2
3
4
5
6
sudo pip install pymongo
pip show pymongo

# 终端显示
Name: pymongo
Version: 3.2

安装成功后,就可以在Python下,import pymongo了

参考PyMongo的官方文档,pymongo的连接测试代码如下:

1
2
3
4
5
6
7
>>> from pymongo import MongoClient
>>> c = MongoClient()
>>> c.test_database
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), u'test_database')
>>> c['test-database']
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), u'test-database')
>>>

好了,可以用了 :)

需求

在微信中打开我们的网页,网页能够使用微信提供的JS-SDK,比如使用chooseImage,选择图片等等

AppID

要使用公众账号的开发AppID,而不是微信开发平台下的应用AppID

业务域名和JS接口安全域名

1、不设置会导致签名失败

2、设置方法

在微信公众平台的后台,公众设置,功能设置中进行设置,业务域名和JS接口安全域名都是需要设置的

签名失败

遇到签名失败,首先根据微信官方的指引:《附录5-常见错误及解决方法》,看看能不能解决。

我自己踩坑之后的理解如下:

1、签名用的url要动态获取

location.href.split(‘#’)[0]

2、appID不要用错了,要用公众平台的开发appID

3、怀疑签名算法有问题,可以用微信提供的签名校验网址来确认:微信 JS 接口签名校验工具

4、文档中说了“出于安全考虑,开发者必须在服务器端实现签名的逻辑。”,这个不是强制的,在前端静态页面直接获取到token后再去获取ticket,然后直接生成签名,也是可以的。

当然这样做并不安全,只是说可以这样子,微信并没有做代码级的限制。

5、JS-SDK的调通跟公众平台后台的”开发-》基本配置-》服务器配置(未启用)”没有关系。

参考的材料

微信JS-SDK说明文档

如何接入微信公众平台(nodejs)

微信JS-SDK分享功能开发实例

微信JSSDK Python版本讲解

微信JS-SDK 接入步骤

基于node.js的微信JS-SDK简单应用

微信官方提供的sample

微信 JS 接口签名校验工具

问题描述

开发环境

Macbook Pro + Mac OS X 10.11.1 + Xcode 7.1 +Instruments 7.1

iPhone 6 + iOS 9.1

问题描述

Instruments中的设备选择无法选择iPhone真机,灰色不可选

Instruments中的设备选择无法选择iPhone真机,灰色不可选

解决方案:重启

我最终的解决步骤:

1、拔掉iPhone的USB线,重启iPhone

2、关闭Xcode和Instruments

3、重新连接iPhone到Mac上

4、重启Xcode并启动Profile

5、成功

参考

这个帖子的方法管用,我的iPhone 6 9.1系统可以正常调试起来了

unable-to-profile-app-on-device-with-ios-9-0-1-using-xcode-7-7-0-1-or-7-1-beta

相见恨晚

作为一个深度依赖Total Commander的键盘党,切换开发环境到Mac后,一直找不到一款可以在Mac上接替TC的产品,试用过Path Finder、ForkLift都无法达到我的需求,不是因为界面的缘故,而是产品的设计理念根本就不一样。

TC确实可以替换系统的资源管理器,但是他的目标可不是替换系统资源管理器这么简单。

无奈之下选择了一款免费的Finder插件XtraFinder,用了一段时间之后,我的Mac升级了OS X 10.11,用不了了:如果不关闭System Integrity Protection就无法使用了

不能忍,再找找吧,在网上看到了这几个帖子:

怎么,Mac 下的诸多文件管理软件还在仰望 Total Commander,在 TC 的阴影下生活么?

Mac 是否有类似Windows上 Total Commander 这样的应用?

几个帖子中都提到了一个我之前没有试用过的软件:Double Commander

用了一分钟之后,我只能说:相见恨晚

小技巧

Mac下的版本选择

1
2
3
4
5
Mac OS X >= 10.5
doublecmd-0.6.6-6327.carbon.i386.dmg

Mac OS X >= 10.8
64 bit doublecmd-0.6.6-6327.qt.x86_64.dmg

结论是:选择32位版本

理由:

1、性能上的差别没有做比较,但是两者使用下来没有明显的差异,至少没有卡顿的情况;

2、除去性能,64位的界面太毛糙了,无论是图标还是界面的文字显示效果都很差;

两者的界面库是不同的,32位下采用carbon,而64位下使用的是Qt,carbon的界面是使用系统原生来适配的,而qt的界面是跨平台的。

举个简单的例子:carbon可以使用OS X 10.11后的新字体,而Qt没有使用。

快捷键冲突

复制、剪切、和粘贴

为了方便在Finder和DC之间复制文件,对应Ctrl+C、Ctrl+X、Ctrl+V分别多加一个快捷键

1
Command+C、Command+X、Command+V

左右窗口的复制快捷键Ctrl+左/右和Mac的屏幕切换冲突了

我的做法是自定义快捷键:

1
2
Ctrl+option+左
Ctrl+option+右

其他的快捷键冲突,也使用类似的解决方案

对键盘党来说必备的小功能

F5复制,F6移动

快速过滤定位文件

文件内查找文本

批量重命名

压缩文件

比较文件

等等……

小结

Path Finder等收费软件虽然界面很美观,但产品的定位上只是Finder的一个增强或者替代品,和Total Commander没有可比性;

作为一个独立的效率工具来说,Double Commander和Total Commander定位非常接近;

另外还有一点,作为开源软件的Double Commander,他的版本计划还在继续,非常值得期待。

录音时长

点击右上角的“+”号,修改为自动,时间就不会只有8秒了

导出到Mac上 GarageBand进行编辑

1、在iOS的“我的乐曲”页面,长按选择一首乐曲,然后点击左上角的分享图标,出现的选择列表中,选择“iTunes”

2、在Mac上打开iTunes,在我的设备,应用的底部,可以看到“共享文档”,选择GarageBand,就能看到你刚刚导出的.band文件

3、选择并点击右下角的“存储到”,把.band文件保存到Mac上

4、在Mac上直接打开刚刚导出的.band文件,Mac版的GarageBand会自动帮你转换成Mac版本的.band文件,另存下就可以了

5、第一次使用还会下载iOS上的效果库,300多MB,直接下载很慢可以挂个代理

问题

资源中有一张cover@2x.png,对图片进行裁剪后图片的大小是对的,但是图片上裁剪的区域不对。

先直接看最终的代码吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 截取部分图像
*
* @param rect 裁剪的区域
*
*/
-(UIImage *)getSubImage:(CGRect)rect{
CGImageRef subImageRef = CGImageCreateWithImageInRect(self.CGImage,
CGRectMake(rect.origin.x,
rect.origin.y,
rect.size.width * self.scale,
rect.size.height * self.scale));
CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));

//UIGraphicsBeginImageContext(smallBounds.size);
UIGraphicsBeginImageContextWithOptions(smallBounds.size, NO, [UIScreen mainScreen].scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, smallBounds, subImageRef);
UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
UIGraphicsEndImageContext();

return smallImage;
}

问题原因

@2x,表示图片的scale是2,但是裁剪的时候,使用UIImage size获取到的其实是图片@2x处理后的大小,也就是除以2之后的大小,所以导致了裁剪的区域错误。

解决方案

解决的方案如代码所见,对需要裁剪的高度和宽度都乘以scale就可以了。

参考

UIGraphicsBeginImageContextWithOptions

第1次提交

提交类型:重新提交

提交时间:2015-04-21

结果公布:2015-05-01

审核结果:拒绝

拒绝原因:demo account, 需要测试账号

解决方案:提供测试账号,重新提交

相关条款

1
We began the review of your app but are not able to continue because we need a demo account to fully access your app features.

第2次提交

提交类型:重新提交

提交时间:2015-05-01

结果公布:2015-05-13

审核结果:拒绝

拒绝原因:条款2.2,没有用最新Xcode版本打包,且有明显Bug

解决方案:修正Bug,用最新Xcode重新打包,提交

相关条款

1
2
3
4
2.2: Apps that exhibit bugs will be rejected 2.2

We found that your app exhibited one or more bugs, when reviewed on iPhone running iOS 8.3 on both Wi-Fi and cellular networks.
Specifically, the status indicator kept spinning indefinitely while logging in. We've attached the sample screenshot(s)

第3次提交

提交类型:重新提交

提交时间:2015-05-13

结果公布:2015-05-22

审核结果:拒绝

拒绝原因:条款17.1,游戏中的排行榜侵犯用户隐私,使用用户数据需要先获得授权

解决方案:游戏登录之前加上隐私声明,不同意不能登录

相关条款

1
2
3
4
17.1 - Apps cannot transmit data about a user without obtaining the user's prior permission and providing the user with access to information about how and where the data will be used

17.隐私
17.1 在未经用户事先许可,或未告知用户如何使用信息以及在何处使用信息的情况下,应用程序不能传输用户数据。

第4次提交

提交类型:重新提交

提交时间:2015-05-22

结果公布:2015-06-02

审核结果:拒绝

拒绝原因

条款2.2,游戏Bug,充值后金币没有刷新

条款2.8,设置页面有个二维码,二维码扫描后是fir.im的下载页面

条款17.2,登录必须使用YY登录,需要解释为什么必须使用第三方账号,或者提供“游客模式”

解决方案

2.2,游戏Bug,修正游戏Bug,热更新游戏解决
2.8,去掉二维码,改成Logo,热更新游戏解决
17.2,写段申诉描述,主要说我们使用了YY的实时语音功能,需要接入YY账号

这个版本的问题都可以通过热更新解决,所以使用申诉而不是重新提交:

1
2
3
4
5
6
7
8
9
10
11
12
13
2.2 - Apps that exhibit bugs will be rejected
2.8 - Apps that install or launch other executable code will be rejected
--------------------
These are Bugs in our server, we have fixed them without changing the APP, please re-confirm this error, Thank you.

17.2 - Apps that require users to share personal information, such as email address and date of birth, in order to function will be rejected
--------------------
This APP is a real-time voice communication social game.
This APP relies on real-time voice communication function which is provided by YY account, so we need user registration prior to using real-time voice communication.

Take YY (https://itunes.apple.com/en/app/yy-zui-huo-shi-pin-zhi-bo/id427941017?mt=8) as a reference, when user using YY, they can watch videos without login, but if they want to chat with friends, it is necessary to registration prior and login wity YY account.

Thank you for reviewing our APP again.

相关条款

1
2
3
2.2 Apps that exhibit bugs will be rejected
2.8 Apps that install or launch other executable code will be rejected
17.2: Apps that require users to share personal information, such as email address and date of birth, in order to function will be rejected

第5次提交

提交类型:申诉

提交时间:2015-06-02

结果公布:2015-06-04

审核结果:拒绝

拒绝原因:条款2.16,VoIP权限

解决方案:去掉VoIP的权限

相关条款

1
2.16 Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.

第6次提交

提交类型:重新提交

提交时间:2015-06-04

结果公布:2015-06-15

审核结果:拒绝

拒绝原因:条款2.2,游戏Bug,金币充值失败

解决方案:修正游戏Bug,发布热更新后,提交申诉

相关条款

1
2.2 Apps that exhibit bugs will be rejected

第7次提交

提交类型:申诉

提交时间:2015-06-15

结果公布:2015-06-19

审核结果:拒绝

拒绝原因:条款2.2,1.拍视频解释为什么要使用Background Audio权限;2,标题中的“美女陪你放纵”要去掉

解决方案:1.去掉Background Audio权限;2,去掉标题和描述中可能有问题的文字

相关条款

1
2.2 Apps that exhibit bugs will be rejected

第8次提交

提交类型:申诉

提交时间:2015-06-23(19号提交了一个版本但有问题,23号撤回后重新提交)

结果公布:2015-07-01 9:00

审核结果:审核通过

拒绝原因:无

解决方案:无

相关条款:无

参考:

App Store Review Guidelines

需求

比较类似1.0.0的两个字符串

实现方案

印象中这个代码自己写过好多次,不过这次写的是最快的,5分钟之内测试通过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// ConsoleApplication2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <stdlib.h>
#include <stdio.h>

#include <string>

struct UpdateVersion
{
int major;
int minor;
int revision;

UpdateVersion()
{
major = 0;
minor = 0;
revision = 0;
}

UpdateVersion(const UpdateVersion& item)
{
major = item.major;
minor = item.minor;
revision = item.revision;
}

UpdateVersion& operator=(const UpdateVersion& item)
{
major = item.major;
minor = item.minor;
revision = item.revision;

return *this;
}
};

UpdateVersion parseUpdateVersion(const std::string& versionStr)
{
UpdateVersion result;
if (versionStr.empty())
return result;

size_t pos1 = versionStr.find('.', 0);
size_t pos2 = versionStr.find('.', pos1 + 1);
if (pos1 == -1 || pos2 == -1 || pos2 >= versionStr.length())
return result;

result.major = atoi(versionStr.substr(0, pos1).c_str());
result.minor = atoi(versionStr.substr(pos1 + 1, pos2 - pos1).c_str());
result.revision = atoi(versionStr.substr(pos2 + 1, versionStr.length() - pos2).c_str());

return result;
}

int compareUpdateVersion(const UpdateVersion& left, const UpdateVersion& right)
{
if (left.major != right.major)
{
return left.major > right.major ? 1 : -1;
}
else if (left.minor != right.minor)
{
return left.minor > right.minor ? 1 : -1;
}
else if (left.revision != right.revision)
{
return left.revision > right.revision ? 1 : -1;
}
else
{
return 0;
}
}

int compareUpdateVersion(const std::string& left, const std::string& right)
{
UpdateVersion leftVer = parseUpdateVersion(left);
UpdateVersion rightVer = parseUpdateVersion(right);

return compareUpdateVersion(leftVer, rightVer);
}

int _tmain(int argc, _TCHAR* argv[])
{
printf("%d\n", strcmp("1.0.0", "1.0.0"));
printf("%d\n", strcmp("1.0.0", "1.0.1"));

printf("%d\n", strcmp("1.0.9", "1.0.10"));
printf("%d\n", strcmp("1.1.0", "1.0.10"));

printf("======================\n");

printf("0 == %d\n", compareUpdateVersion("1.0.0", "1.0.0"));
printf("0 == %d\n", compareUpdateVersion("2.4.3", "2.4.3"));

printf("-1 == %d\n", compareUpdateVersion("1.0.0", "1.0.1"));
printf("-1 == %d\n", compareUpdateVersion("1.0.9", "1.0.10"));
printf("-1 == %d\n", compareUpdateVersion("1.0.10", "1.1.0"));
printf("-1 == %d\n", compareUpdateVersion("1.2.10", "2.0.0"));

printf("1 == %d\n", compareUpdateVersion("1.1.0", "1.0.0"));
printf("1 == %d\n", compareUpdateVersion("1.0.10", "1.0.0"));
printf("1 == %d\n", compareUpdateVersion("1.1.0", "1.0.10"));
printf("1 == %d\n", compareUpdateVersion("100.1.0", "10.0.10"));

return 0;
}


需求

对SVN入库的文件进行PNG优化,我使用PNGoo进行PNG优化,我已经从SVN记录中得到了所有需要更新的PNG文件全路径,但是怎么把这些分散在不同目录下的文件加入PNGoo中是我想要解决的问题

方案一:Windows的文件选择框

PNGoo使用的Windows的文件选择框是支持文件多选的,支持的文件格式类似:

1
"F:\test\Activity\100.png" "F:\test\ActivityItem\ActivityItem0.png"

文件路径中间以空格隔开即可。

但是这个方法再文件多了之后有问题:一次加入10个文件的话会只有前几个被加入进去,后面的你还得再一点点往里面加。

显然,像我这么懒的人是不会喜欢这个方案的。

方案二:Total Command导入文件选择列表

纯手动的解决方案

  1. Total Command,到资源目录下Ctrl+B,把文件展开
  2. 根据文件名,快速定位文件,然后空格选择这个文件
  3. 按ESC返回文件过滤,重复步骤2,知道所有文件都已经被选中
  4. 拖动Total Command选中的文件列表到PNGoo中去
  5. 完成

显然,像我这么懒的人还是不会喜欢这个方案的,但是这个方案却有改进的空间。

半自动的解决方案

  1. Total Command,到资源目录下Ctrl+B,把文件展开
  2. 把准备好的文件选中列表复制到剪切板(等会我会单独介绍怎么准备这个文件列表)
  3. 选择菜单上的“选择”-》“备份/回复选择列表”-》“从剪切板导入”
    从剪切板导入
  4. 拖动Total Command选中的文件列表到PNGoo中去
  5. 完成

准备文件列表

  1. 以这个文件为例:

F:\test\Activity\100.png

F:\test\ActivityItem\ActivityItem0.png

2.Total Command,到F:\test\目录下,Ctrl+B把文件展开
3.将步骤1中的全路径,去掉步骤2中的目录前缀“F:\test\”,这时你将得到我们最终需要的文件列表,Ctrl+C复制到剪切板,文件选择列表搞定

Activity\100.png

ActivityItem\ActivityItem0.png

小提示
  1. SVN上的路径使用的是“/”,但是Windows下的文件路径是”",这个需要实现转换下

  2. 批量修改和删除字符串的操作,使用Sublime的话非常简单,我就不单独说了

这个方案勉强还可以接受,因为我习惯使用快捷键,上面的操作步骤我可以在30S内完成,而这样的事情我并不需要经常做,否则我想我应该写个脚本自动来做这个事情,看来还是不够懒。

问题描述

cocos2d-js 3.1的热更新有点问题,我们想升级到3.2;打开官网一看,哦~ 刚刚发布了3.6版本,既然升级就直接升到最新的吧(会是个坑吧……)

关于cocos2d-js 3.6更新了什么

从官网上可以看到3.1到3.6还是发生了很多事情:
COCOS2D-JS 发布说明

另外还有论坛上的帖子:Cocos2d-JS v3.6 已发布!

升级前的准备

升级前的版本

  • cocos2d-js 3.1
  • cocos ide 1.1.0
  • cocos studio 1.6
  • NDK r9d

升级到cocos2d-js 3.6需要升级的部分

  • cocos2d-js 3.6
  • cocos ide 1.2.0
  • NDK r10c (不升级无法兼容Android 5.0,其他版本的Android还可以正常使用)
  • cocos studio 2.2.0 官方声称兼容老的版本,所以我们这次没有升级,因为变化太大,但实际测试兼容还是有点小问题

升级步骤

1.本次只更新cocos2d-js和ide,cocos studio保持1.6版本不变,需要下载下面这两个文件:

  • cocos2d-js-v3.6.zip
  • cocos-code-ide-win64-1.2.0.exe,对应的Mac版本:cocos-code-ide-mac64-1.2.0.dmg

2.删除或者重命名cocod2d-3.1目录(这一步其实可以不做,只是方便环境没有切换过来的时候不至于使用到老的)

3.解压cocos2d-js-v3.6.zip,解压后执行下setup.py,执行后在命令行下执行下cocos命令,检查下路径是否正确

4.安装cocos ide(覆盖安装),并设置下cocos2d-js的新目录(首选项-》cocos-》Javascript)

5.从cocos2d-js目录下重新复制这4个目录到工程目录:

frameworks/cocos2d-html5/
frameworks/js-bindings/
tools/bindings-generator/
tools/tojs/

6.使用cocos ide或者xcode编译,第一次编译需要较长的时间

升级过程中遇到的问题

JSB编译错误

主要是jsb开始使用智能指针,以前的代码需要改造下

找到两个官方的帖子:
refactor binding code use JS::CallArgs instead of c style macro #1109

Use SpiderMonkey template for GC thing instead of raw type #1139

JSAPI Cookbook

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
args.rval().setUndefined();


XXXObject *newObject = XXXObject::GetInstance();
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);

js_proxy_t *p;
HASH_FIND_PTR(_native_js_global_ht, &newObject, p);
if (!p) {
JSObject *obj = JS_NewObject(cx, JSB_XObject_class, JS::RootedObject(cx, JSB_XObject_object), JS::NullPtr());
p = jsb_new_proxy(newObject, obj);
JS::AddNamedObjectRoot(cx, &p->obj, JSB_MODULE_OS_HELPER);
}

args.rval().set(OBJECT_TO_JSVAL(p->obj));




// define name space
JS::RootedObject myBinding(cx, JS_NewObject(cx, NULL, JS::NullPtr(), JS::NullPtr()));
JS::RootedValue myBindingVal(cx);
myBindingVal = OBJECT_TO_JSVAL(myBinding);
JS_SetProperty(cx, obj, "XXXHandleBinding", myBindingVal);
JsbVoiceHandleObjectCreateClass(cx, myBinding, "XXXHandleObject");



static void JsbVoiceHandleObjectCreateClass(JSContext *cx, JS::HandleObject globalObj, const char* name)

JSContext* jc = ScriptingCore::getInstance()->getGlobalContext();
JS::RootedValue retval(jc);

bool ok = true;
int32_t arg0 = 0;
ok &= jsval_to_int32(cx, args[0], &arg0);

向导生成的文件升级了

主要是class根目录以及class/runtime目录下的文件,解决方案就是用新版本的cocos ide生成一个新的带native的工程,对比下新旧文件,覆盖过来就可以了

Android还需要往.mk文件中加下文件

1
2
3
../../Classes/runtime/ConnectWaitLayer.cpp \
../../Classes/runtime/ConsoleCommand.cpp \
../../Classes/runtime/FileServer.cpp \

编译通过后提示UI ExportJson文件找不到了

原因是3.3版本的时候升级了从xxxSence.json文件找ui文件的算法,以前都是用全路径,现在改成了相对于xxxSence.json的相对路径,所以文件都找不到了

解决方案

我们其实没有使用xxxSence.json,可以试下全部直接使用xxxExportJson

修改前后的代码对比

// var node = ccs.sceneReader.createNodeWithSceneFile(res.login_scene);

// var widget = node.getChildByTag(10003).getComponent(“LoginComponent”).getNode();

    var widget = ccs.uiReader.widgetFromJsonFile(res.LoginUI_ExportJson);  

    this.addChild(widget);  

虽然cocos官方说支持cocos studio 1.6版本,但是还是会有些布局上的问题,需要针对3.6进行下适配。

Cocos2D-X 3.6 android与友盟 zlib 冲突,无法编译!

Cocos2D-X 3.6 android与友盟 zlib 冲突,无法编译!

这个目前只能呢个等待umeng官网更新版本支持。

2015-05-08更新

umeng的跟进还是挺快的,他们更新了一个兼容cocos2d-x 3.6的测试版本,可以从这里下载到(测试版本,后续可能会被更新掉):

1
2
3
4
5
6
7
cocos2dx 游戏统计分析SDK使用 v4.1 (2015-05-07)
功能更新:
新SDK使用新协议(Thrift)
重构SDK数据采集的逻辑框架,提高SDK稳定性;
采用了全新的账号统计接口
支持cocos2dx 3.6
支持按间隔发送数据策略