在本文中,我们将给您介绍关于cocos2dx的数据保存之UserDault的详细内容,并且为您解答cocos存档的相关问题,此外,我们还将为您提供关于Bullet(Cocos2dx)之交叉编译Andr
在本文中,我们将给您介绍关于cocos2dx的数据保存之UserDault的详细内容,并且为您解答cocos存档的相关问题,此外,我们还将为您提供关于Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x、Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D、cocos2d-x 2.2.0 CCUserDefault在安卓系统下不能正确保存的问题、Cocos2d-x 3.2示例UserDefaultTest(用户默认配置)的知识。
本文目录一览:- cocos2dx的数据保存之UserDault(cocos存档)
- Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
- Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D
- cocos2d-x 2.2.0 CCUserDefault在安卓系统下不能正确保存的问题
- Cocos2d-x 3.2示例UserDefaultTest(用户默认配置)
cocos2dx的数据保存之UserDault(cocos存档)
1、保存数据
void@H_301_5@ setBoolForKey(const@H_301_5@ char@H_301_5@* key,bool@H_301_5@ value@H_301_5@);
void@H_301_5@ setIntegerForKey(const@H_301_5@ char@H_301_5@* key,int@H_301_5@ value@H_301_5@);
void@H_301_5@ setFloatForKey(const@H_301_5@ char@H_301_5@* key,float@H_301_5@ value@H_301_5@);
void@H_301_5@ setDoubleForKey(const@H_301_5@ char@H_301_5@* key,double@H_301_5@ value@H_301_5@);
void@H_301_5@ setStringForKey(const@H_301_5@ char@H_301_5@* key,const@H_301_5@ std::string@H_301_5@ & value@H_301_5@);
void@H_301_5@ setDataForKey(const@H_301_5@ char@H_301_5@* key,Data value@H_301_5@);
2、读取数据,有默认值
bool@H_301_5@ getBoolForKey(const@H_301_5@ char@H_301_5@* key,bool@H_301_5@ defaultValue);
int@H_301_5@ getIntegerForKey(const@H_301_5@ char@H_301_5@* key,int@H_301_5@ defaultValue);
float@H_301_5@ getFloatForKey(const@H_301_5@ char@H_301_5@* key,float@H_301_5@ defaultValue);
double@H_301_5@ getDoubleForKey(const@H_301_5@ char@H_301_5@* key,double@H_301_5@ defaultValue);
std@H_301_5@::string@H_301_5@ getStringForKey(const@H_301_5@ char@H_301_5@* key,const@H_301_5@ std@H_301_5@::string@H_301_5@ & defaultValue);
Data getDataForKey(const@H_301_5@ char@H_301_5@* key,Data defaultValue)
3、读取数据没有默认值
bool getBoolForKey(const@H_301_5@ char@H_301_5@* key@H_301_5@);
int getIntegerForKey(const@H_301_5@ char@H_301_5@* key@H_301_5@);
float getFloatForKey(const@H_301_5@ char@H_301_5@* key@H_301_5@);
double@H_301_5@ getDoubleForKey(const@H_301_5@ char@H_301_5@* key@H_301_5@);
std::string@H_301_5@ getStringForKey(const@H_301_5@ char@H_301_5@* key@H_301_5@);
Data getDataForKey(const@H_301_5@ char@H_301_5@* key@H_301_5@)
Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x
首先将src文件夹复制到jni文件夹,没有可以新建一个
新建两个文件Android.mk,Application.mk
Application.mk内容如下:
APP_ABI:=armeabiarmeabi-v7ax86
APP_PLATFORM:=android-8
APP_STL:=stlport_static
Android.mk内容如下:
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE :=bullet_static(可随便起)
LOCAL_MODULE_FILENAME:=libbullet(可随便起)
LOCAL_C_INCLUDES:=src/(头文件位置)
(源文件,要列出所有用到的,这里用到BulletSoftBodyBulletDynamics
BulletCollisionsLinearMath)
最后还要加上一句,表示生成静态库如果将STATIC该文SHARED则生成动态库
include$(BUILD_STATIC_LIBRARY)
然后进入命令行
进入jni所在目录
ndk-build
等待编译完成
将三个目录下的libbullet.a分别复制到cocos2dx的安装目录下的
安装目录\Cocos\frameworks\cocos2d-x\prebuilt\android\相应文件下
进入Cocos\frameworks\cocos2d-x\external
新建文件夹Bullet,在Bullet下新建prebuild-mk
将Box2D\prebuild-mk下的Android.mk复制到Bullet/prebuild-mk
修改如下3行
LOCAL_MODULE:=bullet_static
LOCAL_MODULE_FILENAME:=libbullet
LOCAL_SRC_FILES:=../../../prebuilt/android/$(TARGET_ARCH_ABI)/libbullet.a
复制头文件
将bullet3的src的所有文件复制到新建的Bullet文件下
删除不是.h的所有文件
下一步任务繁重,
将所有用到BulletCollisionBulletDynamicsBulletSoftBodyLinearMath目录下的include都加上Bullet/,可以使用Notepad++在Bullet目录搜索Bullet,并替换为Bullet/Bullet,LinearMath并替换为Bullet/LinearMath
进入Cocos\frameworks\cocos2d-x\cocos\prebuilt-mk
在Android.mk
在LOCAL_WHOLE_STATIC_LIBRARIES+=Box2d_static下面添加
LOCAL_WHOLE_STATIC_LIBRARIES+=bullet_static
$(callimport-module,Box2D/prebuilt-mk)下面添加
$(callimport-module,Bullet/prebuilt-mk)
至此已经完成编译静态库
下载地址
Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D
1.使用Cocos引擎建立工程,打开cocosstudio修改分辨率为960*640,删掉背景图片
发布到vs工程
1.打开AppDelegate设置分辨率,并运行
director->getopenGLView()->setDesignResolutionSize(960,640,ResolutionPolicy::EXACT_FIT);
2.配置Bullet(win32)到cocos2dx
首先要将bullet3-master的头文件复制到cocos\frameworks\cocos2d-x\external\Bullet;具体方法请看
如下图Bullet3之交叉编译Android复制头文件
4.将编译好的Bullet库(win32)release库复制到
Cocos\frameworks\cocos2d-x\prebuilt\win32下分别更名为
BulletCollision_vs2012.lib
BulletDynamics_vs2012.lib
BulletSoftBody_vs2012.lib
LinearMath_vs2012.lib
如何得到Bullet库,这个就要去看Bullet3之HelloWorld(vs2012)补充如何生成Bullet库
5.打开刚才生成的项目的属性,选择链接器->输入->附加依赖项,输入生成的Bullet库,如图
将PhysicsWorld3D类复制到classes/physics3d并添加到工程中,编译运行,成功表明配置成功,
有可能会出现errorLNK2038:检测到“RuntimeLibrary”的不匹配项:值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”
将Bullet生成时的c/c++->代码生成->运行库,改为MD
5.测试PhysicsWorld3D
在HelloWorldScene.h添加
在HelloWorld::init()
先初始化摄像机,再初始化物理世界,
关于初始化物理世界,首先创建,然后添加一个地面,再添加一个Box作为测试用
每一帧去更新物理世界,同时更新Box的位置,当然可以使用MotionState去优化,这个不着急
当HelloWorld退出时要销毁物理世界
当运行程序,会看到一个Box从天而降,重重的摔在地上
源代码及其资源下载
cocos2d-x 2.2.0 CCUserDefault在安卓系统下不能正确保存的问题
解决方案
请在修改数据后手动调用
CCUserDefault::flush()
一些废话
但是——
是我眼瞎了吗?
用于win32的CCUserDefault.cpp和用于android的CCUserDefaultAndroid.cpp中
对于flush()的实现都是空的。
好吧,总之在手机上测试确实非常立竿见影。
无论如何,请在修改数据后手动调用flush,而不依赖系统的自动flush,保持一个良好的编码习惯。
Cocos2d-x 3.2示例UserDefaultTest(用户默认配置)
<span>本篇博客介绍Cocos2d-x 3.2示例中的UserDefaulstTest,我们在开发中可能需要用到一些默认配置,一般会以xml形式保存。Cocos2d-x为我们提供了UserDefault类来实现这样的需求</span>
-- enable log --[[ UserDefaultTest.lua 用户默认配置 ]]-- local function dotest() cclog("********************** init value ***********************") -- set default value -- 设置默认值 cc.UserDefault:getInstance():setStringForKey("string","value1")-- 字符串 cc.UserDefault:getInstance():setIntegerForKey("integer",10)-- 整型 cc.UserDefault:getInstance():setFloatForKey("float",2.3)--浮点型 cc.UserDefault:getInstance():setDoubleForKey("double",2.4)-- 双精度 cc.UserDefault:getInstance():setBoolForKey("bool",true)-- 布尔型 -- print value -- 打印获取到的值 -- 根据key获取字符串值 local ret = cc.UserDefault:getInstance():getStringForKey("string") cclog("string is %s",ret) -- 根据key获取双精度值 local d = cc.UserDefault:getInstance():getDoubleForKey("double") cclog("double is %f",d) -- 根据key获取整型值 local i = cc.UserDefault:getInstance():getIntegerForKey("integer") cclog("integer is %d",i) -- 根据key获取浮点数值 local f = cc.UserDefault:getInstance():getFloatForKey("float") cclog("float is %f",f) -- 根据key获取布尔值 local b = cc.UserDefault:getInstance():getBoolForKey("bool") if b == true then cclog("bool is true") else cclog("bool is false") end --cc.UserDefault:getInstance():flush() cclog("********************** after change value ***********************") -- change the value -- 修改值 cc.UserDefault:getInstance():setStringForKey("string","value2") cc.UserDefault:getInstance():setIntegerForKey("integer",11) cc.UserDefault:getInstance():setFloatForKey("float",2.5) cc.UserDefault:getInstance():setDoubleForKey("double",2.6) cc.UserDefault:getInstance():setBoolForKey("bool",false) -- 刷新写入 cc.UserDefault:getInstance():flush() -- print value -- 根据key获取字符串值 local ret = cc.UserDefault:getInstance():getStringForKey("string") cclog("string is %s",f) -- 根据key获取布尔值 local b = cc.UserDefault:getInstance():getBoolForKey("bool") if b == true then cclog("bool is true") else cclog("bool is false") end end function UserDefaultTestMain() local ret = cc.Scene:create() -- 场景 local s = cc.Director:getInstance():getWinSize() -- 获取屏幕大小 local label = cc.Label:createWithTTF("UserDefault test see log",s_arialPath,28)-- 创建标签 ret:addChild(label,0) label:setAnchorPoint(cc.p(0.5,0.5)) label:setPosition( cc.p(s.width/2,s.height-50) ) ret:addChild(CreateBackMenuItem()) dotest() return ret end
日志消息如下:
关于cocos2dx的数据保存之UserDault和cocos存档的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Bullet(Cocos2dx)之交叉编译Android,集成到cocos2dx3.x、Bullet(Cocos2dx)之使用cocos2dx测试PhysicsWorld3D、cocos2d-x 2.2.0 CCUserDefault在安卓系统下不能正确保存的问题、Cocos2d-x 3.2示例UserDefaultTest(用户默认配置)等相关内容,可以在本站寻找。
本文标签: