在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那样的打印窗口。