Cocos2dx+lua打包wp8教程

Cocos2dx+lua打包wp8教程,第1张

概述研究了2周,终于研究出来,绝对原创,请转载的说明出处,这个内容可能有点长,但是如果你按照教程走,则一定会成功的,下面来说步骤: 一:开发环境和SDK Win8 *** 作系统:这里在官网上下载企业版或者专业版,因为这两个版本才支持Hyper-V 服务; windowsphone SDK8.0 ; vs2012 或者vs2013 :如果你的真机用的 *** 作系统是window phone 8.1, 那么你的vs 研究了2周,终于研究出来,绝对原创,请转载的说明出处,这个内容可能有点长,但是如果你按照教程走,则一定会成功的,下面来说步骤:

一:开发环境和SDK Win8 *** 作系统:这里在官网上下载企业版或者专业版,因为这两个版本才支持Hyper-V 服务; windowsphone SDK8.0 vs2012 或者vs2013 :如果你的真机用的 *** 作系统是window phone 8.1,那么你的vs2012 要更新update ,但是我这里建议用vs2013 ,就懒得更新了; Cocos2dx3.0 :官网下载; quickv3 :地址为https://github.com/dualface/v3quick ,因为我是模仿quickv3 来打包的,所以你可以下载下来研究一下,后面会讲; 真机:这里我用的 *** 作系统为8.1 二:真机测试 1. 调试前的准备:
首先你必须是微软开发者账号(现在是免费的),现在的微软的账号(就是你安装win8 *** 作系统的时候叫你输入的账号)和开发者账号需要绑定的; 主要是手机上要下载“用于开发人员的预览”这个软件,然后安装就行了,可以参考http://jingyan.baIDu.com/article/ff42efa9193fb8c19e22020b.HTML 2. 模拟器调试: 我这里没用模拟器调试,因为我的机子不支持虚拟化支持,如果要开启的话,你只需要打开bios 设置就行了,所以就没用模拟器调试; 3. 真机调试: 下载好cocos2dx3.0 以后,打开build 文件下的cocos2d-wp8.vc2012.sln ,然后选择cpp-tests 文件夹,然后把项目cpp-tests 设置为启动项目。 这时也要把模拟器设置device,平台设置为arm
然后运行看是否成功,如果能在真机上跑的话,恭喜你测试成功; 当然这里有可能调试遇到一个问题,就是指定的通信端口已经由另外一个程序使用,原因是你的手机原来用过真机调试并且通过了的,在手机上面有测试的项目,那么你就把它删除就行了; 三:打包到wp8 方法尝试并最终成功: 这里我尝试了多种方法,但是最终那一种成功了。 1. 首先我先想的是到底打包成静态库还是动态库,当时就查了一下他们之间的区别,我这里先就我说看的总结一下: 创建静态库:建立win32 ,然后生成,参考http://www.cnblogs.com/skynet/p/3372855.HTML 使用静态库(也叫静态链接库): http://www.cnblogs.com/skynet/p/3372855.html上面有方法,或者使用#pragmacomment(lib,”xxx,lib”); 这时需要将静态库lib 拷贝到工程目录下”,静态链接库的特点是:拷贝,不能增量更新; 创建动态库:参考http://www.cnblogs.com/skynet/p/3372855.HTML 使用动态库(动态链接库):这里有2 种方法:这里有dll 库和lib ,这里的lib 和静态库的lib 不一样,等会发几个参考链接; 第一种方法:载入时动态链接(隐式调用,静态调用dll ):#pragmacomment(lib,lib”); 还有一个extern “C” 第二种方法:运行时动态链接(显示调用,动态调用dll : 某个函数加载dll,调用完后释放,主要用Loadlibrary. 这里给几个网站: http://www.cnblogs.com/skynet/p/3372855.htmlhttp://www.cppblog.com/codejie/archive/2009/09/24/97141.html http://blog.csdn.net/wallaceli1981/article/details/5740718 http://blog.sina.com.cn/s/blog_72b1bc6a0101cnu7.html http://blog.sina.com.cn/s/blog_725dd1010100ug2z.html http://blog.csdn.net/crich_moon/article/details/6039939 当然这里讲的是win32 上的; 2. 然后静态库和动态库的区别我搞清楚了,然后我想的是怎么来把cocos2dx 所以的库打包成wp8 的库参考文章: http://www.cnblogs.com/leluyun/archive/2012/09/28/2707564.html http://www.devdiv.com/Windows_Phone-WP8%E6%96%B0%E7%89%B9%E6%80%A7%E3%80%908%E3%80%91Windows_Phone_8%E7%95%8C%E9%9D%A2%E8%B0%83%E7%94%A8%E4%B8%80%E8%88%ACDLL%EF%BC%8C%E9%9D%9ERuntime_Component%E6%96%B9%E6%B3%95-thread-135252-1-1.html http://www.devdiv.com/Windows_Phone-wp_metro_app_c_native_dll-thread-134611-1-1.html 总结了大致过程 大致的调用过程为:C# Phone Application=>windows phone 运行时组件=>windowsphone 空静态库或者空动态链接库; 这时我想到的第一种方法是先建立 windows phone 空静态库, 然后把cocos2dx 所以的源代码拷贝到里面去(后来发现quickv3 就是这样做的),但是太多了,就没做。 然后我这时把cocos2dx3.0 建立的c++ 项目打开发现有wp8 的分支,而且除了liblua 库其余所有的库都有wp8 的包,那么我就只打liblua 库成wp8 就行了。
所以我打开打开build 文件下的cocos2d-wp8.vc2012.sln ,然后选择cpp-empty-test 文件夹,然后在cocos2d-x-3.0\tests\cpp-empty-test\proj-wp8-xaml 文件下面添加了一个文件夹liblua 文件夹,然后右键点击cpp-empty-test 文件夹,添加项目,选择 空静态库,位置在刚刚建立的liblua文件夹下面:

但是这时编译运行遇到到很多问题,而且最大的问题是无法解析的外部符号(这个问题后面会解释的),这时我暂停了几天,又在网上问了一下,了解到quickv3 框架。 1. 这时我又尝试了另外一种方法:了解到quickv3 框架如果编码的话,主要是用lua 写的,而且http://cn.cocos2d-x.org/tutorial/show?ID=1303 这个网址是说的怎么来建立quick 项目的。 然后项目建立成功后,生成的项目有wp8 的分支。但时这时quickv3 发现是用的cocos2dx3.2 来封装的,而我用的是cocos2dx3.0 ,由于我现在的lua 代码的框架都写好了,所以就懒得改,而且用cocos2dx3.2 可能还有风险,至少3.0 稳定一些。 所以我当时想的是把cocos2dx3.0 的库直接替换掉libquickx quickv3 里面的一个项目)里面的库(就是把库的源代码替换掉),但是出问题了,quickv3 自己又多了一些封装,而且事件处理自己又封装了一些,所以这时候没法弄,还是没成功。 3. 这是我想到了第三种方法:我直接模仿quickv3 libquickx 项目来做一个我自己的liblua 库,最终成功了,下面我来说一下过程和我遇到的问题:其实就是一些配置和路径的设置; @1 :上面已经说了( 第三的第2 ) 先把liblua 项目建好,然后把liblua 项目设置成启动项目, 然在liblua 项目下面添加筛选器如下:
这是建立的项目:

然后在cocos2dx 项目把对应的文件夹找到源文件加入进来就行了; auto 文件夹下的:cocos2d-x-3.0\cocos\scripting\lua-bindings\auto


lua 文件夹下的:cocos2d-x-3.0\external\lua\lua ( 这个很多,我只截取一部分)


Manual 文件夹下的:cocos2d-x-3.0\cocos\scripting\lua-bindings\manual


script 文件夹下的:cocos2d-x-3.0\cocos\scripting\lua-bindings\script


tolua 文件夹下的:cocos2d-x-3.0\external\lua\tolua

好,这里基本上添加完了,然后是配置
@2 :在liblua 这个项目中加入对cocos 其它库的依赖,右键点击liblua 项目,打开属性页,在通用属性下的框架和引用中

单击添加新引用:添加库的依赖,加了以后是这样的:

虽然库已经添加进来了,但是还应该有目录的,所以在“配置属性”下的“c/c++”目录下的“常规”选项中的“附加包含目录”添加:


这里我把目录列举出来,你们到时添加就行了:
$(EngineRoot)cocos\2d\platform\wp8

$(EngineRoot)cocos\2d\platform\winrt
$(EngineRoot)\external\winrt-specific\angle\include
$(EngineRoot)\external\winrt-specific
$(EngineRoot)cocos\2d
$(EngineRoot)cocos\math\kazmath
$(EngineRoot)cocos\audio\include
$(EngineRoot)cocos\2d\renderer
$(EngineRoot)cocos\ui
$(EngineRoot)cocos
$(EngineRoot)cocos\base
$(EngineRoot)cocos\physics
$(EngineRoot)external\chipmunk\include\chipmunk
$(EngineRoot)external
$(EngineRoot)cocos\editor-support
$(EngineRoot)
$(EngineRoot)cocos\math\kazmath\include
$(EngineRoot)cocos\deprecated
$(EngineRoot)external\win32-specific\gles\include\OGLES
$(EngineRoot)external\glfw3\include\win32
$(EngineRoot)cocos\scripting\lua-bindings\manual
$(EngineRoot)cocos\scripting\lua-bindings\auto
$(EngineRoot)cocos\scripting\lua-bindings\script
$(EngineRoot)external\lua
$(EngineRoot)external\lua\luajit\include
$(EngineRoot)external\lua\tolua
$(EngineRoot)external\libwebsockets\win32\include
$(EngineRoot)extensions\network
$(EngineRoot)extensions
$(EngineRoot)cocos\editor-support\spine
$(EngineRoot)cocos\editor-support\cocosbuilder
$(EngineRoot)cocos\editor-support\cocostudio

下面是配置完后的状态:
@3:然后是模仿quickv3中的libquickx来进行配置,我只上图,然后对应起来设置就行了
C/C++中的常规选择:
在C/C++中的预处理器这的预处理器定义中加入宏:
WP8
_liB
_DEBUG
COCOS2D_DEBUG=1
CC_LUA_ENGINE_ENABLED=1
__STRICT_ANSI__
sqlITE_OS_WINRT
sqlITE_OMIT_WAL
CC_USE_JsON=1
CC_USE_CURL=1
CC_USE_CCS_ARMATURE=1
CC_USE_EXTRA_FILTERS=1
CC_USE_WEBSOCKET=1
CC_USE_TGA=1
CC_USE_sqlITE=1
如下:
然后在C/C++中的代码生成中设置:
然后在C/C++中的高级选择中设置:(强制包含文件手动输入pch.h)
@4:当然由于liblua项目中有c文件,我们必须把所以的c文件单独设置才行,否则就是无法解析的外部符号了。标记所以的c文件然后然后右击属性窗口来设置,如图:
.c文件在lua,Manual,tolua下面均有;
在c/c++中的常规中
在c/c++中的预编译头中设置:
然后在C/C++中的高级选择中设置:


@5:这时把平台设置为ARM,并且把liblua项目设置为启动项目,运行,等待。。。。。
现在主要是改cocos2dx3.0里的一些库:

Probelm1:..\..\..\..\..\cocos\scripting\lua-bindings\auto\lua_cocos2dx_auto.cpp(54393): error C2039: “createWithRect”: 不是“cocos2d::GLVIEw”的成员:

在lua_cocos2dx_auto.cpp文件中
凡是遇到createWithRect调用的都注释掉;
如:
凡是遇到createWithFullScreen的都注释掉;
@6:运行项目(现在不管警告),如果有下面d出窗口,恭喜你liblua库成功了,但是还会改库的(在后面):
@7:测试该项目:
在cpp-empty-testComponent项目中添加对liblua库的引用,一样右击cpp-empty-testComponent项目,在通用属性中添加新引用,把liblua库添加进来,而且
同样的要在C/C++常规中添加附加包含目录:
然后在AppDelegate.h中添加#include "ccluaEngine.h"头文件,
在AppDelegate.cpp中的applicationDIDFinishLaunching()函数中的代码全部注释,改成如下:
auto director = Director::getInstance();
auto glvIEw = director->getopenGLVIEw();
if(!glvIEw) {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 || CC_TARGET_PLATFORM == CC_PLATFORM_MAC || CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
#else
glvIEw = GLVIEw::createWithRect("testLua",Rect(0,960,640));
director->setopenGLVIEw(glvIEw);
#endif
}
auto engine = LuaEngine::getInstance();
ScriptEngineManager::getInstance()->setScriptEngine(engine);
engine->executeScriptfile("main.lua");
@8:上面完成后,把cpp-empty-testComponent项目设置为启动项目,运行,发现有问题:
Probelm1:error LNK2019: unresolved external symbol "public: voID __cdecl cocos2d::Console::stop(voID)" (?stop@Console@cocos2d@@QAAXXZ) 等类似的问题
解决办法:打开lua_cocos2dx_auto.cpp文件
把函数lua_cocos2dx_Console_stop(),lua_cocos2dx_Console_ListenOnTCP(),
lua_cocos2dx_Console_ListenOnfileDescriptor(),lua_cocos2dx_Console_log(),这四个函数注释掉,而且还有函数lua_register_cocos2dx_Console()中的 tolua_function(tolua_S,"stop",lua_cocos2dx_Console_stop);
tolua_function(tolua_S,"ListenOnTCP",lua_cocos2dx_Console_ListenOnTCP);tolua_function(tolua_S,"ListenOnfileDescriptor",lua_cocos2dx_Console_ListenOnfileDescriptor);

Probelm2:liblua.lib(lua_cocos2dx_extension_auto.obj) : error LNK2019: unresolved external symbol "public: voID __cdecl cocos2d::extension::AssetsManager::setStoragePath(char const *)
解决办法:这是因为在wp8库libExtensions下面的AssetsManager文件里夹里没有加入AssetsManager类,但是lua绑定的时候却又绑定了,所以加入进来就行了,那个类在cocos2d-x-3.0\extensions\assets-manager这个文件夹下:
但是这时要在AssetsManager.cpp中注释一些代码:
并且同样的要在liblua项目下的“配置属性”下的“c/c++”目录下的“常规”选项中的“附加包含目录”添加:
$(EngineRoot)extensions\assets-manager

Probelm3:iblua.lib(lua_cocos2dx_manual.obj) : error LNK2019: unresolved external symbol "public: voID __cdecl cocos2d::Console::addCommand()

解决办法:在lua_cocos2dx_manual.cpp文件中把lua_cocos2dx_Console_addCommand()和 lua_cocos2dx_Console_send()这2个函数注释掉,而且在extendConsole()这个函数中把


如果pp-empty-testComponent项目运行没错,则成功;
@9:
由于当执行代码auto engine = LuaEngine::getInstance();时lua引擎自己会加载lua文件,所以把cocos2d-x-3.0\cocos\scripting\lua-bindings\script下的所有lua文件全部拷贝到
cocos2d-x-3.0\tests\cpp-empty-test\Resources下面即可;
在@7中的main.lua文件也是放到cocos2d-x-3.0\tests\cpp-empty-test\Resources下面的(包括你以后的lua代码和资源都放在这里的);
main.lua文件代码如下:
cc.Director:getInstance():setdisplayStats(true)
cc.Director:getInstance():setAnimationInterval(0.01)
这里我只要让手机屏幕的左下角显示出GL Verts:和GL calls就表示可以访问lua文件了,恭喜成功了。(当然你也可以加载图片来测试)
四:虽然打包完成,可以调用lua,但是在wp8平台运行的游戏可能还有许多问题,需要慢慢来改,如果遇到了而且解决了我也会随时更新的。

总结

以上是内存溢出为你收集整理的Cocos2dx+lua打包wp8教程全部内容,希望文章能够帮你解决Cocos2dx+lua打包wp8教程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1062341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存