安卓版“土豪水果机”正式上线

马年马上有钱水果机,是模拟街机真实水果机,又名老虎机,曾经风靡一时,如今在一些小店角落里,默默吸引着它的忠实玩家。手机上的土豪水果机,游戏清新、简单明了,玩家可以随时随地,拿出手机玩上一局,试试运气,再也不用去游戏厅,小店里四处寻找。在手机上是纯粹娱乐性游戏,碰运气,赢积分,比排名,每天都会送出积分供你游戏,土豪榜在等待着你,马上来发财做土豪吧。

cocos2d-x和android的启动流程对照

在android的启动流程中涉及到onCreate,onPause,onResume,onStop等函数,详细流程见安卓文档。在cocos2d-x的AppDelegate中也有对应的几个函数applicationDidFinishLaunching对应于(onCreate),applicationDidEnterBackground对应于(onPause),applicationWillEnterForeground对应于(onResume),但启动流程稍微有点不同。

android  的Activity的启动流程是onCreate执行后再调用onResume,但cocos2d-x 在android手机上只会调用applicationDidFinishLaunching,而在WIN7,VS2012的环境下,会先调用applicationWillEnterForeground,再调用applicationDidFinishLaunching。启动后,流程可以对应起来,当在手机上安”HOME”键(WIN7 点最小化)将调用“applicationDidEnterBackground”,手机上安”HOME”返回(WIN7 点最大化)将调用”applicationWillEnterForeground”。手机的“BACK”在cocos2d-x中似乎被屏蔽了,没有去找它的对应关系。

在cocos2d-x中加入json支持

在cocos2d-x的3.0alpha1中已经添加了jsoncpp的代码,代码在“external\json”,但好像没有做成库直接引用,需手动添加。

在VS中,只需在工程目录,[Classes]->[添加]->[现有项],加入json.h,json_reader.cpp,read.h,json_writer.cpp,writer.h,json_value.cpp,value.h,为了看起来清晰,也可以先“新建筛选器”,再把json的文件加到里。要使用,只需#include “json\json.h”即可。

为了编译android版本能用,需在“external\json”下新建一个Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jsoncpp_static
LOCAL_MODULE_FILENAME := libjsoncpp
LOCAL_SRC_FILES := \
json_reader.cpp \
json_writer.cpp \
json_value.cpp

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/..
LOCAL_C_INCLUDES := $(LOCAL_PATH)/..
LOCAL_CPPFLAGS += -fexceptions
include $(BUILD_STATIC_LIBRARY)

特别注意加上倒数第2行的“LOCAL_CPPFLAGS += -fexceptions”,否则编译时会出现错误“external/json/json_reader.cpp:880:72: error: exception handling disabled, use -fexceptions to enable”

在工程jni里的Android.mk中加上
LOCAL_WHOLE_STATIC_LIBRARIES += jsoncpp_static
$(call import-module,json)
编译顺利通过。

cocos2d-x在VS中查看printf的结果

新下载了cocos2d-x的3.0版本,发现在”TestCpp”有”printf”的语句,但在VS的“输出”只能看到”log”的打印结果。要看到”prinf”的结果,必须添加一个DOS那样的控制台。
在“AppDelegate.cpp”的头部加入:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
#include "tchar.h"
#endif

在bool AppDelegate::applicationDidFinishLaunching() 加入下面的代码:

bool AppDelegate::applicationDidFinishLaunching()
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
_tsetlocale(LC_ALL,_T(""));
::AllocConsole();
::freopen("conout$","w",stdout);
#endif

再次运行,就会多出一个DOS那样的打印窗口。

cocos2d-x中文问题处理

cocos2d-x中只能识别UTF8编码的中文,如果直接在VC下输入中文,显示时会乱码,而且他也没有提供多语言的解决方案。这些问题可以通过将字符串放到一个XML字典文件中来解决。

(一)    参考安卓的字符串命名方法,在cocos2d-x工程的“Resources”目录下,新建一个文件“string-zh-rCN.xml”,在其中输入你的字符串,如:

<?xml version=”1.0″ encoding=”utf-8″?>
<dict>

<key>hello</key>
<string>您好,欢迎来到我的世界</string>
<key>info</key>
<string>这是我的第一个中文应用</string>

</dict>

然后保存成 “UTF8” 文件,且记,一定要保存成这个格式

(二)    在cocos2d-x中用CCDictionary读取对应的字符串

CCDictionary *strings = CCDictionary::createWithContentsOfFile(“string-zh-rCN.xml”);
const char *hello = ((CCString*)strings->objectForKey(“hello”))->m_sString.c_str(); CCLabelTTF * pLabel=CCLabelTTF::create(hello, “Arial”, 22);

这样,就可以正确的显示中文字符了

(三)    其他语种,只需添加一个类string-zh-rCN.xml的文件,读取时根据系统当前语言设置,采用不同的XML,就可以实现多语种自适应。