cocos2d-x - CSDN
cocos2d-x 订阅
Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等操作系统中。Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。 展开全文
Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的。这是一个C++ Cocos2d-iPhone项目的版本。Cocos2d-X发展的重点是围绕Cocos2d跨平台,Cocos2d-x提供的框架。手机游戏,可以写在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x项目可以很容易地建立和运行在iOS,Android,黑莓Blackberry等操作系统中。Cocos2d-x还支持Windows、Mac和Linux等桌面操作系统,因此,开发者编写的源代码很容易在桌面操作系统中编辑和调试。
信息
发展重点
跨平台
类    型
开源的移动2D游戏框架
中文名
cocos2d-x
支持平台
iOS,Android等
cocos2d-x引擎介绍
Cocos2d-x是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。2015年2月,触控科技正式推出了游戏开发一站式解决方案cocos,将Cocos 2d-x、Cocos Studio、Cocos Code IDE等框架及工具整合在一起。 [1]  Cocos2d-x核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、Windows, Mac OSX 3及Tizen等等,省事省力省成本。 [2]  Cocos2d-x用户不仅包括个人开发者和游戏开发爱好者,还包括许多知名大公司如Zynga、Wooga、Gamevil、Glu、GREE、Konami、TinyCo、HandyGames、IGG及Disney Mobile等。截止2013年9月,全球基于Cocos2d-x引擎的游戏下载量高达逾15亿,其中许多还占据苹果应用商店(AppStore)和谷歌应用商店(Google Play)排行榜。同时许多公司如触控、谷歌、微软、ARM、英特尔的工程师在Cocos2d-x领域也非常活跃。另外,Cocos2d-x版本升级困难的问题,是许多开发者的一大苦恼,而经过整合的cocos,解决了Cocos2d-x的这一问题。升级cocos,其相匹配的Cocos2d-x也将自动进行升级,这极大的提高了开发效率,为开发者们带来便利,同时也为Cocos2d-x的进一步发展打下基础。
收起全文
  • Cocos2d-x初学者教程

    千次阅读 2017-06-14 10:35:42
    Cocos2d-x是一款快速、强大、易用的开源2D游戏引擎。 它与苹果的Sprit Kit略像,但又有一大优势——跨平台。 这意味着,开发者只需要写一个版本的代码就可以开发出能在iOS、Android、Windows Phone、Mac OS X、...
    Cocos2d-x是一款快速、强大、易用的开源2D游戏引擎。
    它与苹果的Sprit Kit略像,但又有一大优势——跨平台。
    这意味着,开发者只需要写一个版本的代码就可以开发出能在iOS、Android、Windows Phone、Mac OS X、Windows Desktop和Linux上运行的游戏来。这对于游戏开发者来说意义重大。
    在此教程中,你将学会用Cocos2d-x和C++开发一个简单的2D游戏。是的——忍者来袭!
    注意:本教程假设你拥有C++开发的基础先修知识。如果你没有接触过C++,请学习后再来阅读。
    

    准备

    下载Cocos2d-x的最新版本(www.cocos2d-x.org/download);本教程使用3.5版本。 把文件下载下来,放到你想把Cocos2d-x安装到的地方,例如你的主目录,然后解压。 打开Terminal和CD,进入你刚刚解压的文件夹。例如,如果你把项目放到了你的主目录里,那就运行如下命令: cd ~/cocos2d-x-3.5/ 现在,运行接下来这个命令: python setup.py 这里配置了必要的shell环境变量。若系统出现提示,要求配置像 NDK_ROOT, ANDROID_SDK_ROOT和ANT_ROOT这些Android特有的变量,你只需按三次回车完成设置就好了。 注意:Cocos2d需要你在电脑上安装Python 2.7以上的版本。如果你不清楚目前电脑的Python版本,可以在命令行中输入python,则版本信息就会被显示出来(然后按Ctrl-D关闭)。如果你安装了一个老版本的Python,请在python.com下载安装最新版本。 如下图所示,脚本文件提示执行另一条命令来完成安装:
    1497407624-8444-301184-39ef9266817e8b9a
    Paste_Image.png
    注意:使用不同的shell可能会导致你看到不同的输出结果。在上面的屏幕截图中,由于我使用了Bash,安装文件提示“source /Users/rwenderlich/bash_profile.”。但如果我用的是Zsh,那它就会提示让我运行“source /Users/rwenderlich/.zshrc”。 按照说明输入命令。这里有一个节省时间的技巧:你可以在/Users/your_user_name这里使用波浪线(~),以此来减少你输入下面这条命令的长度: source ~/.zshrc (or source ~/.bash_profile) 此命令重新提交了你的shell配置,让它可以访问新变量。现在你可以从任一目录在Terminal中调用cocos命令了。 运行下面的命令,创建一个名为SimpleGame的C++游戏模板: cocos new -l cpp -d ~/Cocos2d-x-Tutorial SimpleGame 你的主目录里创建了一个名为Cocos2d-x-Tutorial的目录。其中,子目录SimpleGame存放了你的项目文件。 注意:可以输入cocos --help或cocos -h来获取cocos子命令的相关信息。输入后缀“--help”或“-h”,你可以了解到子命令的各种选项,例如你可以输入cocos new -h来查看new命令的选项。 在Finder中双击~/Cocos2d-x-Tutorial/SimpleGame/proj.ios_mac/SimpleGame.xcodeproj,在Xcode中打开项目。 进入Xcode之后,请确保SimpleGame Mac处于活跃状态,如图所示:
    1497407624-6654-301184-ede39ac29cf1a6c8
    Paste_Image.png
    Cocos2d-x可以开发多种平台的游戏,但本教程将着重讲开发OS X应用。该项目可以很容易地向其他平台移植(是的,小事一桩!),本教程的最后部分将会简单讨论。在模板项目中编译并运行你的应用吧:
    1497407625-3271-301184-381c5e0196f90f22
    Paste_Image.png

    分辨率设定

    Cocos2d-x游戏默认被命名为“MyGame”,分辨率为960x640,但这些细节设定都很容易更改。 打开AppDelegate.cpp,在AppDelegate::applicationDidFinishLaunching中找到如下一行: glview = GLViewImpl::create("My Game"); 将其替换为下面的代码: glview = GLViewImpl::createWithRect("SimpleGame", Rect(0,0, 480, 320), 1.0); 这样,游戏名称被改为“SimpleGame”,分辨率也被设置成了与模板背景相适配的480x320。 重新编译并运行新版应用,它变得更小了:
    1497407625-3254-301184-3ed0f9999c19fccb
    Paste_Image.png
    注意一下你给createWithRect设定的第三个参数——1.0。这个参数将框架进行缩放,经常被用于测试比你的屏幕更大的分辨率。例如,想在一个小于1920x1080的屏幕上测试1920x1080分辨率的东西,你可以设定参数为0.5,以此将窗口缩小到960x540的大小。 这样虽然改变了游戏在桌面设备上的框架大小,但它在iOS设备上就失效了;游戏的分辨率会自动适配iOS设备的屏幕大小。这里以iPhone6为例:
    1497407624-2464-301184-5b6cac01837536d9
    Paste_Image.png
    你该如何处理多个分辨率呢?在本教程中,你将会创建基于960x640分辨率的单个游戏资源,然后在实际运行中将其进行必要的缩放。 要想实现这一点,你需要在AppDelegate::applicationDidFinishLaunching中,找到director上setDisplayStats的上一行,添加以下代码:
    // 1
    Size designSize = Size(480,320);
    Size resourceSize = Size(960,640);
    // 2
    director->setContentScaleFactor(resourceSize.height / designSize.height);
    director->getOpenGLView()->setDesignResolutionSize(
      designSize.width, designSize.height, ResolutionPolicy::FIXED_HEIGHT);
    上面的代码的作用如下:
    1. 定义了designSize——你创建游戏逻辑时使用的尺寸,并定义了resourceSize——你的资源所基于的分辨率。
    2. 必要的时候,这些代码会让游戏的Director对资源进行缩放,缩放会基于游戏的设计和提供的资源尺寸进行。 参阅the Cocos2d-x wiki entry on Multi-resolution adaptation以查看更多关于Cocos2d-x处理分辨率问题的说明。

      添加精灵

      接下来,点击下载本项目所需要的资源文件,并且将其解压到方便的位置。 全选你刚刚解压的SimpleGameResources文件夹中的文件,在你的Xcode项目中将它们拖入Resources组中。当有对话框弹出的时候,一定要在点Finish之前检查Copy items if needed, SimpleGame iOS 和 SimpleGame Mac。
    1497407625-5184-301184-7929d708d97396de
    Paste_Image.png
    接下来,打开HelloWorldScene.h,在include cocos2d.h后面的地方添加以下代码: using namespace cocos2d; 这就指定了你会使用cocos2d这一命名空间(namespace);于是,你可以用Sprite来代替cocos2d::Sprite。倒也不是非这样不可,但这会让你的开发过程变得愉快一些。:] 现在,你需要一个私有成员变量来指向你的player精灵。在HelloWorld的声明语句中添加以下代码:
    private:
      Sprite* _player;
    然后,打开HelloWorldScene.cpp,将HelloWorld::init方法中的内容换成以下内容:
    // 1
    if ( !Layer::init() ) {
      return false;
    }
    // 2
    auto origin = Director::getInstance()->getVisibleOrigin();
    auto winSize = Director::getInstance()->getVisibleSize();
    // 3
    auto background = DrawNode::create();
    background->drawSolidRect(origin, winSize, Color4F(0.6,0.6,0.6,1.0));
    this->addChild(background);
    // 4
    _player = Sprite::create("player.png");
    _player->setPosition(Vec2(winSize.width * 0.1, winSize.height * 0.5));
    this->addChild(_player);
    
    return true;
    下面是本方法的详细说明:
    1. 首先,调用父类的init方法。只有调用成功后你才能继续HelloWorldScene的安装。
    2. 其次,使用游戏的Director singleton来获取窗口的边界。
    3. 再次,创建DrawNode,绘制了一个填充屏幕的灰色矩形,并将其添加到场景中。这成为了游戏的背景。
    4. 最后,通过图像名称创建player精灵。将它放置在屏幕左边界10%距离的地方,垂直居中,并将其添加到场景中。 编译并运行游戏;哈哈,父老乡亲们快来看啊,小忍者进村了!:]
    1497407634-2645-301184-92880eebc21e38c7
    Paste_Image.png

    移动的怪物

    忍者需要一个人生目标,所以得在场景里添加点怪物让他去打。为了让游戏更好玩,怪物最好能来回走动——否则就会看起来没啥挑战性。我们要在屏幕右侧很近的地方创建怪物,然后创建一个动作来让他们移动到左侧。 首先,打开HelloWorldScene.h,并且添加如下的方法声明:
    void addMonster(float dt);
    然后,在HelloWorldScene.cpp中添加如下的方法实现:
    void HelloWorld::addMonster(float dt) {
      auto monster = Sprite::create("monster.png");
    
      // 1
      auto monsterContentSize = monster->getContentSize();
      auto selfContentSize = this->getContentSize();
      int minY = monsterContentSize.height/2;
      int maxY = selfContentSize.height - monsterContentSize.height/2;
      int rangeY = maxY - minY;
      int randomY = (rand() % rangeY) + minY;
    
      monster->setPosition(Vec2(selfContentSize.width + monsterContentSize.width/2, randomY));
      this->addChild(monster);
    
      // 2
      int minDuration = 2.0;
      int maxDuration = 4.0;
      int rangeDuration = maxDuration - minDuration;
      int randomDuration = (rand() % rangeDuration) + minDuration;
    
      // 3
      auto actionMove = MoveTo::create(randomDuration, Vec2(-monsterContentSize.width/2, randomY));
      auto actionRemove = RemoveSelf::create();
      monster->runAction(Sequence::create(actionMove,actionRemove, nullptr));
    }
    虽然相对而言比较直白,但下面还是讲一下这些代码的作用:
    1. 本方法第一部分与之前对player做的相似:创建一个怪物的精灵,将其放置在紧靠屏幕右侧的地方。它的y轴坐标被设定为随机,这样才好玩。
    2. 接下来设定怪物动作的时长,本方法在2秒和4秒之间计算出了一个随机值。每个怪物都要在屏幕上移动相同的距离,所以时长的随机性导致了怪物们速度的随机性。
    3. 最后,本方法创建了一个让怪物从右到左横穿屏幕的动作,并且让怪物去执行这个动作。对此本文后面会有更详细的解释。 Cocos2d-x提供了很多非常便捷的内置动作,它们可以帮助你随着时间轻松改变精灵的状态,包括移动动作、旋转动作、淡出动作、动画动作,等等。在此,你在怪物身上用到了3个动作:
    4. MoveTo:在一定的时间内将对象从一个点移动到另一个点。
    5. RemoveSelf:将一个节点从其父节点中移除,从而有效地将其从场景中“删除”。在本例中,当怪物变得不可见时,你使用此动作来把怪物从场景中移除。这非常重要,否则就会有无限多的怪物出现,最终耗尽设备的资源。
    6. Sequence:允许你按顺序实现一系列的其他动作,每次实现一个。这意味着,你可以让怪物移动穿过整个场景,到达特定的位置之后再将其从屏幕上移除。 在你的忍者粉墨登场之前,还有最后一件事情——你需要实际地调用这个方法来创建怪物。为了让游戏更有趣,你需要不停地量产怪物。 很简单,在HelloWorld::init末尾return之前的地方,添加如下代码: srand((unsigned int)time(nullptr)); this->schedule(schedule_selector(HelloWorld::addMonster), 1.5); srand((unsigned int)time(nullptr));语句初始化了随机数生成器。如果不执行这一步,每次运行程序都会产生一样的随机数。这还叫什么随机啊对不对?:] 之后,你向schedule方法传递HelloWorld::addMonster,每隔1.5秒它将调用一次addMonster()。 这里,Cocos2dx使用了C++的指针来整合函数。如果你不太懂它的原理的话,请去ioscpp查阅更多信息。 好了!编译并运行你的项目;现在你应该可以看到怪物们正在欢乐地(或者本例中它们看上去其实挺愤怒的!)在屏幕中来回移动了:
    1497407636-9077-301184-08f90f9e248070d1
    Paste_Image.png

    发射飞镖

    勇敢的小忍者需要保护自己。在游戏中有很多种方式可以实现开火,但在本例中你将使用点击屏幕的方式,将飞镖朝玩家点击屏幕的所在的方向发射出去。biubiu!:] 方便起见,你要用MoveTo动作来完成这个效果——现在我们不得不做点数学题了。 MoveTo动作需要为飞镖设定一个目的地,但是你不能直接使用输入的地址,因为那个点只代表了发射时候相对于玩家的方向。你需要让飞镖一直沿着这个方向移动直到最终到达屏幕外的目的地。 下图说明了这一情况:
    1497407636-7568-301184-d019511520150cae
    Paste_Image.png
    从原始点到接触点的x坐标距离和y坐标距离组成了一个小三角形;你只需要按照同样的比率做一个大三角形——你还清楚自己希望一个端点是处于屏幕之外的。 这些计算是以Cocos2d-x所包括的向量数学程序来执行的。但是,在你能够计算往何处移动之前,你需要启用输入事件操作来获取用户点击的位置。 将以下代码添加至HelloWorld::init的末尾、return之前的地方: auto eventListener = EventListenerTouchOneByOne::create(); eventListener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); this->getEventDispatcher()- >addEventListenerWithSceneGraphPriority(eventListener, _player); Cocos2d-x 3及以上版本使用EventDispatcher来处理各种各样的事件,如触摸、加速计和其他键盘事件。 注意:整篇的讨论中,“touch”指的是触屏或者点击。Cocos2d-x对于这两种事件类型采取相同的方法。 为了从EventDispatcher中获取事件,你需要注册一个EventListener。有两种触摸事件的监听器:
    • EventListenerTouchOneByOne:此类型对每个触摸事件调用一次回调方法。
    • EventListenerTouchAllAtOnce:此类型对所有的触摸事件调用一次回调方法。 每个事件监听器支持4个回调,但你只需要为自己关心的事件绑定方法。
    • onTouchBegan:手指第一次碰到屏幕时被调用。如果你使用的是EventListenerTouchOneByOne,你必须返回true才能获取另外3个触摸事件。
    • onTouchMoved:手指接触屏幕并移动(保持接触)时被调用。
    • onTouchEnded:手指离开屏幕时被调用。
    • onTouchCancelled:在特定的结束事件处理的环境中被调用,如你正在触屏的时候,一个电话打了进来打断了这个app进程。 在本游戏中,你只用关心触摸发生的时间就好了。声明你的回调函数来在HelloWorldScene.h中获取触摸的通知,像这样:
    bool onTouchBegan(Touch touch, Event unused_event); 然后,在HelloWorldScene.cpp中执行你的回调函数:
    bool HelloWorld::onTouchBegan(Touch *touch, Event *unused_event) {
      // 1  - Just an example for how to get the  _player object
      //auto node = unused_event->getCurrentTarget();
    
      // 2
      Vec2 touchLocation = touch->getLocation();
      Vec2 offset = touchLocation - _player->getPosition();
    
      // 3
      if (offset.x < 0) {
        return true;
      }
    
      // 4
      auto projectile = Sprite::create("projectile.png");
      projectile->setPosition(_player->getPosition());
      this->addChild(projectile);
    
      // 5
      offset.normalize();
      auto shootAmount = offset * 1000;
    
      // 6
      auto realDest = shootAmount + projectile->getPosition();
    
      // 7
      auto actionMove = MoveTo::create(2.0f, realDest);
      auto actionRemove = RemoveSelf::create();
      projectile->runAction(Sequence::create(actionMove,actionRemove,     nullptr));
    
      return true;
    }
    上面的这个方法比较复杂,让我们来一步一步回顾一下。
    1. 第一行被注释掉了,但它说明了作为第二个参数传递给addEventListenerWithSceneGraphPriority(eventListener, _player)的_player对象被访问的方式。
    2. 此处获取了场景坐标系中触摸的坐标,然后计算了这个点相对于玩家当前位置的偏移量。这是Cocos2d-x中向量数学的一个例子。
    3. 如果offset的x值是负值,这表明玩家正试图朝后射击。在本游戏中这是不允许的(真正的忍者不会往后看!),所以只需要返回就好了,不用发射飞镖。
    4. 在玩家所在的位置创建一个飞镖,将其添加到场景中。
    5. 之后,调用normalize()来将偏移量转化为单位向量,即长度为1的向量。将其乘以1000,你就获得了一个指向用户触屏方向的长度为1000的向量。为什么是1000呢?因为长度应当足以超过当前分辨率下屏幕的边界。:]
    6. 将此向量添加到飞镖的位置上去,这样你就有了一个目标位置。
    7. 最后,创建一个动作,将飞镖在2秒内移动到目标位置,然后将它从场景中移除。 编译并运行程序;点击屏幕,让你的忍者朝着敌人们发射吧!
    1497407637-2644-301184-4f43812f3b62fae4
    Paste_Image.png


    查看原文:http://www.51xyyx.com/3269.html
    展开全文
  • Cocos2d-x 开发神器cococreator使用介绍

    万次阅读 热门讨论 2014-07-21 08:57:09
    Cocos2d-x 开发神器cococreator使用介绍 本篇博客小巫给大家推荐一个开发神器,你还在为搭建Cocos2d-x开发环境而头痛么,还在为平台移植问题而困扰么,我想大家都想更加快速得进行开发,小巫也是今天才知道这个神器...

    Cocos2d-x 开发神器cococreator使用介绍


      本篇博客小巫给大家推荐一个开发神器,你还在为搭建Cocos2d-x开发环境而头痛么,还在为平台移植问题而困扰么,我想大家都想更加快速得进行开发,小巫也是今天才知道这个神器的,稍微使用了一下,觉得还是挺ok的一个开发工具,所以这里推荐给大家。

      可以到下面地址下载:

       http://cococreator.com/

      来看看全貌吧:

      

     上面的LuaTest就是小巫创建的Cocos2d-x项目,文件->新建->Cocos2d-x项目(也可以直接点击新建快捷按钮):

     

     选择Cocos2d-x版本,小巫这里是3.1的:

     

     下一步,选择开发语言:

      

     目前版本还不支持JavaScript,下一步设置项目名称、包名、路径

     

     小巫这里创建了一个名为HelloCPP的项目,成功之后finish即可:

     

     然后直接点击生成,cocoscreator就会为我们生成解决方案,对win32项目进行编译,如果想编译成Android项目,按下Win32切换成Android即可。

     编译过程给我们在visual studio中是一样的,这里没啥好说的。如果我们想要在Android平台下进行交叉编译的话,要配置一下编译环境:

     

     

     这个就是小巫的机器的编译环境了,如果是win32需要我们安装visual studio的开发环境,比如visual studio 2012。如果是Android项目的话,我们就需要配置Java SDK,Android SDK,ANT,NDK这四个,缺一不可。

    小巫的贴一下路径让各位参考一下:

    Java SDK:C:\Program Files\Java\jdk1.7.0_25

    Android SDK:D:\Android\adt-bundle-windows-x86_64-20131030\sdk

    ANT:D:\Cocos2d-x\software\apache-ant-1.9.4-bin\apache-ant-1.9.4\bin

    NDK:D:\android-ndk-r9d

    配置完之后,重启我们的cocoscreator让编译环境生效。

    然后我们就可以愉快的对我们的Cocos2d-x Android项目进行编译了。




    然后我们去到proj.android下的bin目录下,我们找到apk文件,安装到Android设备中去,同样我们的HelloWorld出现了。

     

      



    展开全文
  • cocos2d-x 支持的开发语言

    千次阅读 2015-12-23 10:06:35
    在 cocos2d-x 学习点滴(1) 中, 本人曾以为cocos2d-x 只能使用C++作为主要开发语言, 后来在cocos2d-x 的官网上发现,它支持了lua和JavaScript: 如下图所示,其中O代表ok   Platforms C++ Lua Javascript ...

    在 cocos2d-x 学习点滴(1)  中, 本人曾以为cocos2d-x 只能使用C++作为主要开发语言, 后来在cocos2d-x 的官网上发现,它支持了lua和JavaScript:

    如下图所示,其中O代表ok

      Platforms C++ Lua Javascript
    Mobile Platforms iOS o o o
    Android o o o
    WindowsPhone8 o    
    Bada i    
    BlackBerry o    
    MeeGo i    
    Marmalade o    
    Desktop Platforms win32 o o o
    Linux o o  
    Win8 Metro o    
    Mac OS X o o  
    Native Client o o  
    对比了下载下来的引擎代码,发现也分得很清楚:


    从上而下,分别代表了cocos2d-x的核心库文件夹,C++示例,js的示例和lua的示例,可以在js和lua的示例代码中看到,除了开始用C++进行启动引导之外,核心的代码都写到了js文件和lua文件中,cocos2d-x使用第三方库来支持脚本,比如js就是用了跨平台的SpiderMonkey,一个用C语言实现的JavaScript脚本引擎;而lua本身就是标准C编写而成,几乎在所有操作系统和平台上都可以编译运行。

    也就是说,开发者完全可以直接使用js脚本或者lua脚本来完成所有的开发了。这对于lua或js专业开发人员来说真是福音。

    展开全文
  • cocos2d-x游戏源码

    千次下载 热门讨论 2020-07-30 23:33:30
    一个cocos2d-x的闯关类游戏。我也是下的比人的,不过在2.1.0的版本下调通了,仅供学习
  • ubuntu下安装cocos2d-x的方法

    千次阅读 2013-07-01 14:21:20
    环境ubuntu12.10 + cocos2d-x最新版本 1. git clone https://github.com/cocos2d/cocos2d-x.git下载cocos2d-x源代码 2. 官方下载ndk,我的是64位版本android-ndk-r8e 3. 官方下载sdk,我的eclipse之前已经下载过了...

    折腾了半天,源代码有bug,自己修改了一下才可以用

    环境ubuntu12.10 + cocos2d-x最新版本

    1. git clone https://github.com/cocos2d/cocos2d-x.git下载cocos2d-x源代码

    2. 官方下载ndk,我的是64位版本android-ndk-r8e

    3. 官方下载sdk,我的eclipse之前已经下载过了,直接拿来用android-sdks

    4. 进入cocos2d-x,开始编译,不过g++版本要修改为4.6或以上

    5. 打开./make-all-linux-project.sh, 修改NDK和SDK的路径,运行 ./make-all-linux-project.sh,等待几分钟即可编译完成

    6. 运行./create-android-project.sh来根据提示创建一个工程

    问题就出现在第六步,总是提示:

    cp: 无法获取"/home/lsc/disk/cocos2d-x/cocos2d-x/samples/Cpp/HelloCpp/proj.android/{jni,src}" 的文件状态(stat): 没有那个文件或目录
    /home/lsc/disk/cocos2d-x/cocos2d-x/template/android/gamemk.sh: 32: /home/lsc/disk/cocos2d-x/cocos2d-x/template/android/gamemk.sh: cannot create /home/lsc/disk/cocos2d-x/cocos2d-x/Hello/proj.android/jni/Android.mk: Directory nonexistent
    sed: 无法读取 /home/lsc/disk/cocos2d-x/cocos2d-x/Hello/proj.android/src/org/cocos2dx/hellocpp/HelloCpp.java: 没有那个文件或目录

    发现在template/android/copy_files.sh中出错在这一行

    cp -rf $HELLOWORLD_ROOT/proj.android/{jni,src} $APP_DIR/proj.android

    没办法,把他们分开写成两行去:

         cp -rf $HELLOWORLD_ROOT/proj.android/jni $APP_DIR/proj.android
         cp -rf $HELLOWORLD_ROOT/proj.android/src $APP_DIR/proj.android 

    保存再编译,问题解决了

    7. 接着进入刚才创建好的工程目录下,我的名字叫firstdemo,该工程下有proj.android目录,进入运行脚本./build_native.sh,这样过了两分钟,编译C++生成libgame.so库

    8.我们好要编译android apk,所以打开eclipse,导入该工程,这时候由于没有加入jar包,所以会提示有些java类找不到

    9.jar包路径在cocos2d-x/cocos2dx/platform/android/java/bin/libcocos2dx.jar,我刚开始的时候是按照网上的方法导入jar包的,就是右键项目->build path ->configrue build path-> add external JARs, 这样是没有语法错误了,编译也成功了, 可是运行apk的时候总是提示如下log:

    W/dalvikvm( 4677): Unable to resolve superclass of Lcom/android/cocos2dx/demo/firstdemo; (21)
    W/dalvikvm( 4677): Link of class 'Lcom/android/cocos2dx/demo/firstdemo;' failed
    D/AndroidRuntime( 4677): Shutting down VM
    W/dalvikvm( 4677): threadid=1: thread exiting with uncaught exception (group=0x40aa5930)
    I/SurfaceFlinger( 1076): GraphicBufferAlloc::createGraphicBuffer
    E/AndroidRuntime( 4677): FATAL EXCEPTION: main
    E/AndroidRuntime( 4677): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.cocos2dx.demo/com.android.cocos2dx.demo.firstdemo}: java.lang.ClassNotFoundException: Didn't find class "com.android.cocos2dx.demo.firstdemo" on path: /data/app/com.android.cocos2dx.demo-2.apk
    E/AndroidRuntime( 4677):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
    E/AndroidRuntime( 4677):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
    E/AndroidRuntime( 4677):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
    E/AndroidRuntime( 4677):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
    E/AndroidRuntime( 4677):     at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime( 4677):     at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime( 4677):     at android.app.ActivityThread.main(ActivityThread.java:5041)
    E/AndroidRuntime( 4677):     at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime( 4677):     at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime( 4677):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
    E/AndroidRuntime( 4677):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
    E/AndroidRuntime( 4677):     at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime( 4677): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.android.cocos2dx.demo.firstdemo" on path: /data/app/com.android.cocos2dx.demo-2.apk
    E/AndroidRuntime( 4677):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)

    刚开始以为AndroidMainfest.xml的 android:name有问题,可是怎么修改都不行,仔细看了log才发现Unable to resolve superclass of这一句,很明显是找不到jar包的类了

    果断怀疑是jar包导入的问题,接着把刚导入的jar包删除,直接复制libcocos2dx.jar文件,在eclipse窗口中右击libs文件夹,直接选择粘帖,再运行,问题解决,可以看到

    画面了,网上也找到一个据说是正确导入jar包的方法,原文如下:

    在网上查了一下,有人说上面的做法有可能会出错,建议采用下面的步骤:

         右键工程,
         Build path,
        java build path,选择libraries
         在右边的按钮中点击“Add Library”
         选择“User library”,点击“下一步”
         点击“User librarys”按钮
         在出现的界面中点击“New..”按钮
         在弹出的界面中随便起一个名字,点击“确定”
         点击“Add jars”按钮选择第三方jar包,点击“确定”完成操作。
    这样的话该jar包会被一起打包到apk中,问题也就解决了!


    接着我发现这样子每次都要先在shell中编译C++部分,然后在eclipse中编译android部分,很麻烦,网上找了一下,有没有解决,找到了一篇比较详细的说明,直接拿来用,发现没问题,原文如下:

    http://www.ityran.com/archives/1062

    通过命令脚本来编译c++代码,完了之后用eclipse来编译java代码,这种来回切换的做法非常笨重。如果全部可以用eclipse来完成的话,那么生活会更简单一些。

        幸运的是,我们可以告诉eclipse,我们的android项目是一个集成java/c++的跨语言项目!

       为此,我们在左边的项目树上选择samplecocos2dxandroid,然后从菜单里面选择File\New\Other,然后从对话框里面选择C/C++\Convert to a C/C++ Project,如下所示:

       点击Next。在下一个屏幕里面,选中你的项目,然后选择c++单选按钮,然后为Project type指定Makefile project\Other Toolchain,如下所示:

    Selecting the project type

        点击完成。这时eclipse会询问你是否打开C/C++视图,当对话框出现的时候,选择NO。

       接下来的步骤就是修改项目设置,指定如何运行我们的make命令。在左边的项目树上,右击samplecocos2dxandroid工程,选择Properties,然后选择C/C++ build

        取消“Use default build command”复选框,然后在build文本框中输入下面的命令:

    1. bash ${workspace_loc:/samplecocos2dxandroid}/build_native.sh NDK_DEBUG=1 V=1

       点击Apply,然后点OK。

       回到eclipse,从主菜单中选择Project\Build All,这时你可以在eclipse的控制台输出中看到c++ make在运行。

       我们仍然有一些警告需要解决。想知道我是什么意思吗,你打开jni/helloworld/main.cpp,这里你会看到一系列的警告,如下所示:

        这些警告之所以会出现,是因为我们没有配置正确的c++包含路径。为了解决它,我们右击samplecocos2dxandroid工程,然后选择Properties\C/C++ General\Path and Symbols\GNU C++

       选择Add按钮来选择下面的目录,之后点击Apply和OK。

    1. $(NDKROOT)/platforms/android-9/arch-arm/usr/include $(COCOS2DX_HOME)/cocos2dx/include

    注意: 不用忘了使用实际的路径来替换掉$(NDKROOT)$(COCOS2DX_HOME)

       点击Apply,这时会提示你是否重建索引。直接点击yes继续就可以了。

       现在,你再看看main.cpp,你会看到大部分警告已经消失了。

        但是,AppDelegate.h文件还是找不到。这是因为AppDelegate.h是在$PROJECT_HOME\Classes文件夹下面。这个文件夹对我们来说非常重要,因为它包含了我们工程里面的可移植的c++类,比如HelloWorldScene.cpp等。

        当我们创建eclipse项目的时候,我们必须选择$PROJECT_HOME\android文件夹,因为eclipse需要一个AndroidManifest.xml文件。但是,这样的话,我们的工程就不包括关键的“Classes”文件夹了,这也是为什么我们会得到这么多警告的原因。

       让我们来修正它吧。右击samplecocos2dxandroid项目,选择Properties\C/C++ General\Paths and Symbols\Source location。点击Link Folder,然后复选中Link to a folder in the file system,接着浏览到$PROJECT_HOME文件夹,并指向Classes目录,最后点Apply和OK。

       你现在可以在文件树里面看到Classes目录了,而且在main.cpp里面的#include “AppDelegate.h”警告也应该消失了。

       Eclipse工程里面还会有许多警告,但是,这是因为eclipse对于解析c++头文件的能力并不强大。为了消除这些警告,我们又需要设置一下项目设置。(右键点工程,然后选择Properties),把Code Analysis部分的warnings关闭,如下图所示:

    Turning off C++ Code Analysis warnings in Eclipse

       然后点击Apply和OK,这时,你就得到一个工程可以在eclipse里面进行编辑了。





    展开全文
  • 分享几个免费Cocos2d-x游戏源码

    千次阅读 2014-01-09 11:32:52
    分享几个免费Cocos2d-x游戏源码  免费Cocos2d-x游戏源码分享:游戏素材网 下载:Cocos2d-x制作连珠游戏(点击免费下载) 下载:Cocos2d-x俄罗斯方块源码(点击免费下载) 下载:Cocos2d-x完整的塔...
  • Cocos2d-x之下载安装和配置

    千次阅读 2016-06-19 08:28:01
    推荐下载cocos2d-x-v3.10版本,自带创建项目的cococs软件,就不用在cmd中敲命令了(不过敲命令还是显得高大上一些)。2.Android NDK和Android SDK的下载地址:http://store.cocos.com/stuff/category/1/score_count.
  • 玩游戏是一件很有意思的事情,但如果自己可以开发一款游戏,我想那会更有意思,...前面铺垫这么多,该引出主题了,既然要决定做游戏,那就要选择一款引擎,因为对C++执念,所以自然地选择了Cocos2d-x这款引擎,对于Co
  • Cocos2d-x 3.10 环境搭建

    千次阅读 2016-04-06 00:36:52
    想当初成为程序员,就是希望能写出一款游戏,给自己和朋友玩一玩。我是个深度游戏迷,每个礼拜都会花好长的时间来打游戏的...我也不知道怎么想的,就想先尝试以下Cocos2d,就当来锻炼以下自己的学习能力吧。下面就开始
  • cocos2d-x安装与配置

    万次阅读 2017-05-12 15:18:40
    最近需要用到cocos2d-x环境,便想着在我这台比较破的电脑上安装。安装过程真的是一波三折。在网上找的教程都是比较老的了,心想也没办法了,就按照这个先这么装吧!于是我就先下了coco2d-x-3.15,然后运行了里面的...
  • 一 、介绍cocos2d-x cocos2d-x是什么:是MIT许可证下发布的开源游戏引擎。 cocos2d-x的特点: 1 跨平台:支持跨平台部署,覆盖平台包括iOS、Android、Windows Phone及Tizen等等 2 语言:允许开发人员利用C++、...
  • Cocos2dx零基础从入门到精通

    万次阅读 2018-12-30 22:36:23
    需要Cocos2d-x教学视频的可加微信(Wiki-_-_-_-) Cocos2d-x是当下最热门的开源游戏引擎,游戏开发快速、简易、功能强大。 其中Cocos2d-x核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖...
  • 15款Cocos2d-x游戏源码

    万次阅读 2017-11-30 17:52:12
    (1)用cocos2d-x开发的中国象棋游戏源码 使用Cocos2d-X2.2.3开发的一款中国象棋游戏,游戏中可以实现、新局面、悔棋、游戏音乐、胜利后会显示游戏结果。 源码下载:http://www.okbase.net/file/item/27881 ...
  • 本课程是《从零开始掌握Cocos2d-x 3.0(基于3.0正式版) 》课程配套的项目实战课程。建议对Cocos2d-x 3.0不了解的同学先学习该课程。本课程将利用《从零开始掌握Cocos2d-x 3.0(基于3.0正式版) 》中讲解的知识开发...
  • Cocos2d-x-Lua示例项目HelloLua

    万次阅读 2014-06-26 10:08:52
    Cocos2d-x-Lua示例项目HelloLua 本篇博客介绍Cocos2d-x中Lua的实例项目,就是使用Cocos2d-x创建的初始项目运行所呈现的农场,这里笔者取名为HelloLua。本篇博客会详细在代码中解析Cocos2d-x 3.1.1创建的Lua项目中...
  • 本站文章均为 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 ... -昨天刚写了如何搭建Cocos2d-X开发环境,这一篇就开始总结了。。。。。 不得不说要说总结,因为Cocos2d-X的代码和Cocos2d-ipho
  • Cocos2d-x实战 C++卷,完整扫描版

    千次下载 热门讨论 2020-07-30 23:33:23
    Cocos2d-x实战:C++卷》[1] 系统论述了Cocos2d-x游戏开发理论与实践。全书内容涵盖了Cocos2d-x的核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、数据交换格式、内存管理、性能优化、平台移植、程序...
  • Cocos2d-x v3.10安装及安卓开发环境搭建

    万次阅读 热门讨论 2017-05-07 22:13:37
    (1)下载Cocos2d-x v3.10: 点击http://www.cocos.com/,进入cocos官网,点击下载,在Cocos2d-x项目下点击查看历史版本,点击v3.10,下载好exe文件后双击安装,选择安装目录,请不要将Cocos2d-x文件夹放置c:\下...
  • Cocos2d-x高级开发教程:制作自己的《捕鱼达人》》是国内第一本全面深入讲解Cocos2d-x进阶内容的图书,Cocos2d-x创始人王哲作序推荐,《捕鱼达人》开发人员力作;《捕鱼达人》代码大揭秘,传授大家如何做一个...
  • 很久以前使用博客园博主子龙山人的一篇博文《Cocos2d-x win7+vs2010配置图文详解 (亲测)》成功配置过cocos2d-1.01-x...现在想要使用最新版本cocos2d-x-2.1.4,于是需要把之前安装到VS2010中cocos2d-1.01-x-0.9.1项目模
1 2 3 4 5 ... 20
收藏数 61,138
精华内容 24,455
热门标签
关键字:

cocos2d-x