cocos2d-x

Adding cpp files to cocos2d-x project android project

核能气质少年 提交于 2019-12-06 03:31:27
问题 I've followed this tutorial http://www.raywenderlich.com/33750/cocos2d-x-tutorial-for-ios-and-android-getting-started, and managed to create an android hello world project in cococs2d-x. Now when I add anything to my classes directory and try to use them, I get errors like make: *** [obj/local/armeabi/libgame.so] Error 1 undefined reference to 'ConstAndStats::getDevice()' How should I fix these problems, and add the already working codes (in Xcode) for my eclipse project? 回答1: This kind of

Cocos2d-x开发实例介绍帧动画使用

依然范特西╮ 提交于 2019-12-06 02:47:25
下面我们通过一个实例介绍一下帧动画的使用,这个实例如下图所示,点击Go按钮开始播放动画,这时候播放按钮 标题变为Stop,点击Stop按钮可以停止播放动画。 下面我们再看看具体的程序代码,首先看一下看HelloWorldScene.h文件,它的代码如下: [html] view plain copy #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" class HelloWorld : public cocos2d::Layer { bool isPlaying; //播放标识 ① cocos2d::Sprite* sprite; ② public: static cocos2d::Scene* createScene(); virtual bool init(); voidOnAction(cocos2d::Ref* pSender); ③ CREATE_FUNC(HelloWorld); }; #endif // __HELLOWORLD_SCENE_H__ 第①行代码是声明一个布尔变量isPlaying,用来保存播放状态,true时候说明正在播放,false时候说明停止播放。第②行代码cocos2d::Sprite*sprite是声明一个精灵变量

Cocos2d-x优化中多线程并发访问

守給你的承諾、 提交于 2019-12-06 02:47:06
多线程并发访问在Cocos2d-x引擎中用的不是很多,这主要是因为中整个结构设计没有采用多线程。源自于Objective-C的Ref对象,需要使用AutoreleasePool进行内存管理,AutoreleasePool是非线程安全的,所有不推荐在子多线程中调用Ref对象的retain()、 release()和autorelease()等函数。另外,OpenGL上下文对象也是不支持线程安全的。 但是有的时候我们需要异步加载一些资源,例如:加载图片纹理、声音的预处理和网络请求数据等。如果是异步加载图片纹理我们可以使用第20.4.4一节介绍的内容。但声音的预处理和网络请求数据等就需要自己通过多线程技术实现了。 Cocos2d-x引擎也提供了多线程技术,Cocos2d-x 3.x之前是使用第三方的pthread技术。Cocos2d-x 3.x之后使用C++11新规范中的std::thread多线程技术,std::thread使用起来比较简单。 1.std::thread多线程技术 std::thread是C++11 引入了一个新的线程库,它提供了线程管理相关函数,std::thread库中还提供了std::mutex(互斥量),通过std::mutex可以实现线程同步。 启动一个新的线程非常简单,当我们创建一个 std::thread 对象时候,它便会自行启动。创建线程std:

cocos C/C++与Lua的交互(上)

时光毁灭记忆、已成空白 提交于 2019-12-06 00:47:57
本文使用版本及环境: cocos3.10 Lua5.1.4 Visual Studio 2013 简介 Lua作为一种脚本语言( https://www.lua.org/ ),它提供了很多的 C API 使得 C/C++ 与 Lua 之间进行通信交互。在cocos2d-x中lua与C++的交互,主要借助于第三方工具 tolua++ 来实现,该工具会将C++按照Lua C API指定格式生成一些绑定代码,以便于Lua通过这些绑定代码更快捷的访问C++下的类及方法相关。 而对于tolua++生成的绑定代码从实质上来说就是C++代码按照Lua支持的C语言API进行的一层包装,通过 extern "C" 可以看出来。 一般脚本语言的运行需要宿主的存在,且要有对应的虚拟机。在cocos中,我们可以认为C/C++就是lua的宿主,而虚拟机说白了就是要提供一个lua运行的环境,该环境下需要保存Lua脚本运行的内存空间,全局变量,库文件等。而这个环境在Lua中叫做 Lua_State。 在Lua_State环境下,若实现Lua与C/C++的数据交互,我们需要有个容器来对数据进行传递,这个容器就是 Lua虚拟栈 。 Lua虚拟栈 栈的特点是先进后出的,在Lua的虚拟栈中,栈中数据通过索引值进行定位,索引值可为正数,也可为负数。但是通俗的来说, 正数为1的永远表示栈底,负数为-1的永远表示栈顶。

基于Cocos2d的MMORPG开发经验

江枫思渺然 提交于 2019-12-05 20:54:02
这次跟大家分享的是《基于 Cocos2d-x 的回合 MMORPG 开发经验》,我们主要是以 LUA 和 C++ 来开发项目,使用两者的原因之一是 LUA 和 C++ 语法简单,并且 LUA 开发稳定性好,不容易造成崩溃,而且它支持在线更新的机制。用 LUA 开发的话,逻辑代码和资源文件会比较好,这个优点在多平台运营的时候很明显。因为你更新了一个软件之后,需要先下载平台,这个时候如果用其他软件编辑会导致所有的数据不一样。这个模式的第二个优点就是出现逻辑错误以后我们可以将错误的信息从玩家处收回来,进行错误信息的搜集。第三个优点是内存垃圾回收,以往 C++ 内存垃圾回收是很麻烦的,用 LUA 的话,你只要能够按时去清除变量,基本上不需要去担心内存的使用情况。因此 LUA 在脚本里面的使用算是比较好的。 不过这种模式也会有一些问题,比如说游戏启动时需要加载 LUA 文件,像现阶段需要加载 500 多个 LUA 文件,这是个很头痛的事情,但是不得不加载。加载 LUA 文件是需要一定时间的,现阶段大概需要 10 秒钟,整体的效率要比 C++ 低,毕竟是脚本语言,还是有一些可以优化的方案。我们现在采用的方式是把复杂数学计算的逻辑都放在 Cocos2d-x 引擎层,用 C 以及 C++ 来实现。对于需要灵活可变、利于开发维护的逻辑宜放在脚本层里面处理,这样就增加了灵活性。需要注意一点就是 LUA

第一个Cocos2d-x Lua游戏

江枫思渺然 提交于 2019-12-05 20:42:35
我们的编写的第一个Cocos2d-x Lua程序,命名为HelloLua,从该工程开始学习其它的内容。 创建工程 我们创建Cocos2d-x Lua工程可以通过Cocos2d-x提供的命令工具cocos实现,但这种方式不能与Cocos Code IDE集成开发工具很好地集成,不便于程序编写和调试。由于Cocos Code IDE工具是Cocos2d-x开发的专门为Cocos2d-JS和Cocos2d-x Lua开发设计的,因此使用Cocos Code IDE工具很方便创建Cocos2d-x Lua工程。 首先我们需要在Cocos Code IDE工具中先配置Lua框架,打开Cocos Code IDE工具,选择菜单Window→Preferences,弹出对话框如图所示,选择Cocos→Lua在右边的Lua Frameworks中选择<Cocos2d-x引擎目录>。 配置Lua框架 Lua框架配置不需要每次都进行,只是在最开始的配置一下,但创建工程的时候,Cocos Code IDE工具会从这个Lua框架目录中创建工程文件。 接下来我们就可以创建Lua工程了,选择菜单File→New→Project,如下图所示,弹出项目类型选择对话框。 项目类型选择对话框 我们选中Cocos Lua Project,然后点击Next按钮,弹出如下图所示的对话框。我们在Project

第一个Cocos2d-x Lua游戏

人盡茶涼 提交于 2019-12-05 20:42:19
我们的编写的第一个Cocos2d-x Lua程序,命名为HelloLua,从该工程开始学习其它的内容。 创建工程 我们创建Cocos2d-x Lua工程可以通过Cocos2d-x提供的命令工具cocos实现,但这种方式不能与Cocos Code IDE集成开发工具很好地集成,不便于程序编写和调试。由于Cocos Code IDE工具是Cocos2d-x开发的专门为Cocos2d-JS和Cocos2d-x Lua开发设计的,因此使用Cocos Code IDE工具很方便创建Cocos2d-x Lua工程。 首先我们需要在Cocos Code IDE工具中先配置Lua框架,打开Cocos Code IDE工具,选择菜单Window→Preferences,弹出对话框如图所示,选择Cocos→Lua在右边的Lua Frameworks中选择<Cocos2d-x引擎目录>。 配置Lua框架 Lua框架配置不需要每次都进行,只是在最开始的配置一下,但创建工程的时候,Cocos Code IDE工具会从这个Lua框架目录中创建工程文件。 接下来我们就可以创建Lua工程了,选择菜单File→New→Project,如下图所示,弹出项目类型选择对话框。 项目类型选择对话框 我们选中Cocos Lua Project,然后点击Next按钮,弹出如下图所示的对话框。我们在Project

proper instantiation & memory management in cocos2d-x

﹥>﹥吖頭↗ 提交于 2019-12-05 16:49:50
I've been looking for documentation for cocos2d-x but it seems to be really really poor beyond the very basics. I understand that my own classes should inherit from CCObject to be able to use (originally cocoa's) retain / release mechanism, but I'm still confused about what happens when you new something. init is not called automatically. is it OK to call it from inside the constructor? does that alone guarantee that my object will start with a reference count of 1? what is CC_SAFE_DELETE and when should I use it? do release and autorelease work exactly like in cocoa? what about CC_SYNTHESIZE

cocos2d-x v 2.0.4 FATAL EXCEPTION GLThread when run on Android emulator

你。 提交于 2019-12-05 07:33:00
I create cocos2d-x app I'm using cocos2d-2.0-x-2.0.4 I've got error when trying to run app from Eclipse on Android emulator. 12-04 08:03:13.792: E/AndroidRuntime(1081): FATAL EXCEPTION: GLThread 105 12-04 08:03:13.792: E/AndroidRuntime(1081): java.lang.IllegalArgumentException: No config chosen 12-04 08:03:13.792: E/AndroidRuntime(1081): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:874) 12-04 08:03:13.792: E/AndroidRuntime(1081): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1024) 12-04 08:03:13.792: E/AndroidRuntime(1081): at android

实例介绍Cocos2d-x开关菜单

放肆的年华 提交于 2019-12-05 06:38:28
开关菜单是 MenuItemToggle 类实现的,它是一种可以进行两种状态切换的菜单。它可以通过下面的函数创建: [html] view plain copy static MenuItemToggle*createWithCallback ( const ccMenuCallback & callback, //菜单操作的回调函数指针 MenuItem * item, //进行切换的菜单项 ... ) 从第二个参数开始都是 MenuItem 类的实例对象,它们是开关菜单显示的菜单项,它们可以是文本、图片和精灵类型的菜单项,但是最后不用忘记 NULL 结尾。 下面代码是简单形式的文本类型的开关菜单: [html] view plain copy auto toggleMenuItem = MenuItemToggle ::createWithCallback( CC_CALLBACK_1(HelloWorld::menuItem1Callback,this), MenuItemFont::create("On" ), MenuItemFont::create("Off"), NULL ); Menu* mn = Menu ::create(toggleMenuItem,NULL); this- > addChild(mn);