转自 http://www.cocoachina.com/bbs/read.php?tid=194668

前天, 在CocoaChina 2014春季大会上, 激动人心的Cocos2d-x 3.0和CocoStudio 1.3发布了. Cocos2d-x 3.0做出令人兴奋的性能, 易用性等一系列改进, CocoStudio 1.3带来了稳定性和新特性. 今天让我们看下如何在新建Cocos 3.0rc0的Win32的工程中添加CocoStudio的支持.  
一 软件及其下载  
1. Cocos2d-x 3.0rc  
    http://cdn.cocos2d-x.org/cocos2d-x-3.0rc0.zip  
2. CocoStudio 1.3  
    在CocoStudio 1.3中可以直接创建Cocos2d-x项目, 所以这次的安装包有3个.  
    仅含CocoStudio 1.3  
    http://126.am/YDrVk1  
    CocoStudio 1.3包含了Cocos2d-x 3.0rc0  
    http://126.am/lorYp2  
    CocoStudio 1.3 包含了Cocos2d-x 2.2.3  
    http://126.am/eGo4f4  
3. Python 2.7.6  
    Cocos2d-x的脚本用到了Python, Win下没有自带Python, 大家还需要下载Python.  
    Python的版本我这里推荐大家用最新的2.7.6. 因为Python的2.x和3.x不兼容, 所以一定不能用3.x的版本  
    大家可以根据自己的系统下载对应的版本.  
    https://www.python.org/download/releases/2.7.6/  
4. Visual Studio  
    地球人都知道啦. 我今天演示采用的版本是Visual Studio 2013.  
    VS2010, VS2012, 下面提到的需要设置的地方, 都是相同的. 请大家自行下载安装.  
 
二 Python的安装和设置

  
安装基本上就是下一步, 下一步就好了. 中间安装路径, 我选择的是"C:\Python27\", 等下要用到这个路径.  
右键单击“计算机”,选择“属性”----》“高级系统设置”,在“高级”选项卡下选择“环境变量”!  
在“系统变量”下选中“Path”,并点击下方的编辑按钮:  
在弹出的“编辑系统变量”对话框中编辑“变量值”,在“变量值”的后面添加Python的安装路径(C:\Python27\),用英文分号(;)将其与后面的其他内容隔开。

  
同样地,在“PATHEXT“的变量值中添加 .PY;.PYM .  
打开cmd控制台,输入 python,如果出现如下提示,则说明python安装成功.  
如果你设置环境变量前已经打开了cmd, 需要重新打开cmd.  
三 创建Cocos2d-x 3.0rc0项目  
在Cocos2d-x 3.0rc0中, 引入cocos2d-console这一新的Cocos2d-x工具.  
在console中你可以完成2d-x的新建项目, 编译甚至在模拟器里面运行项目.  
我们先来看下如何使用cocos2d-console创建新的项目.  
我们将下载好的2d-x 3.0rc0解压到C:\cocos2d-x-3.0rc0.  
我们打开cmd, 切换到C:\cocos2d-x-3.0rc0 目录  
运行python setup.py.  
中间会询问几个Android开发需要的地址, 我们今天不涉及Android开发, 直接回车跳过即可.

  
最后会提示我们重启电脑, 我们重启电脑.  
接下来我们在C:\Work目录中创建新项目HelloCocos.  
打开终端, 切换到C:\Work目录中.运行cocos new命令.  
这里我们可以看到cocos new的用法.

  
我们接着输入命令 cocos new -p com.young40.hellococos -l cpp HelloCocos  
其中-p是包名, -l 选择了cpp即C++开发, HelloCocos是项目名称.你可以替换为自己喜欢的名称.  
我们打开C:\Work\HelloCocos\proj.win32\HelloCocos.sln, 如果提示升级项目, 选择确定即可.  
点击F5, 运行项目. 稍等编译完成后, 我们就可以看到我们熟悉的HellWorld了.  
四 在项目中添加CocoStudio支持  
我们在VS中找到"解决方案资源管理器", 在解决方案"HelloCocos"上点击右键, 选择添加现有项目.

  
在弹出的对话框中选择C:\Work\HelloCocos\cocos2d\cocos\editor-support\cocostudio\proj.win32\libCocosStudio.vcxproj  
然后继续添加C:\Work\HelloCocos\cocos2d\extensions\proj.win32\libExtensions.vcxproj  
然后继续添加C:\Work\HelloCocos\cocos2d\cocos\ui\proj.win32\libGUI.vcxproj  
然后我们在HelloCocos项目上点击右键选择添加引用

  
在弹出的对话框中选择添加引用, 并勾选libCocosStudio, libGUI和libExtensions后点击确定.

  
如果大家使用的是VS2012或者VS2013, 可能会看到项目被标记为VS2010, 这里我们升级下项目设置, 否则可能无法编译.

  
然后, 我们HelloCocos项目属性(点击右键选择属性)中选择 "配置属性" => "C/C++" => "附加包含目录" 并编辑.  
添加下面几行  
$(EngineRoot)cocos  
$(EngineRoot)extensions  
$(EngineRoot)cocos\editor-support\  
$(EngineRoot)cocos\editor-support\cocostudio

  
编译一下工程, 还是能运行吧. 如果遇到问题, 不妨来CocoaChina论坛的CocoStudio专区来继续交流.  
五 添加代码  
我们打开CocoStudio 1.3的动画编辑器, 打开一个HeroAnimation的示例, 并直接导出, 将导出的文件放C:\Work\HelloCocos\Resources下面.  
我们打开HelloWorld.cpp给其添加引用以及命名空间

#include "CocoStudio.h"
 
using namespace cocostudio;

然后修改下HelloWorld::init函数, 在return前加入

ArmatureDataManager::getInstance()->addArmatureFileInfo("Hero0.png" , "Hero0.plist" , "Hero.ExportJson");
 Armature *armature = Armature::create( "Hero");
            armature->setPosition(ccp(visibleSize.width * 0.5, visibleSize.height * 0.5));
            armature->getAnimation()->playWithIndex(0);
 this->addChild(armature);
 
 return true;

好了, 赶快运行下吧.

上文为转载的帖子,基本全部操作完成,最后加入cocostudio时有点坑。时间太久,忘记了当时遇到的都是哪些具体问题。归根结底就是,cocos2d更新太快,相应文档更新则太慢,不同版本间的代码兼容性略差造成的。

扒出来了自己的代码,运行了一下,可以出界面。

源码如下:

 #include "HelloWorldScene.h"
#include "CocoStudio.h"
using namespace cocostudio;
USING_NS_CC; Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create(); // 'layer' is an autorelease object
auto layer = HelloWorld::create(); // add layer as a child to scene
scene->addChild(layer); // return the scene
return scene;
} // on "init" you need to initialize your instance
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
} Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin(); /////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it. // add a "close" icon to exit the progress. it's an autorelease object
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/ ,
origin.y + closeItem->getContentSize().height/)); // create menu, it's an autorelease object
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu, ); /////////////////////////////
// 3. add your codes below... // add a label shows "Hello World"
// create and initialize a label auto label = LabelTTF::create("Hello World", "Arial", ); // position the label on the center of the screen
label->setPosition(Point(origin.x + visibleSize.width/,
origin.y + visibleSize.height - label->getContentSize().height)); // add the label as a child to this layer
this->addChild(label, ); // add "HelloWorld" splash screen"
auto sprite = Sprite::create("HelloWorld.png"); // position the sprite on the center of the screen
sprite->setPosition(Point(visibleSize.width/ + origin.x, visibleSize.height/ + origin.y)); // add the sprite as a child to this layer
this->addChild(sprite, ); cocos2d::ui::Widget * layout = cocostudio::GUIReader::getInstance()->widgetFromJsonFile("testingMyUI.json");
layout->setPosition(Point::ZERO);
layout->setScale(this->getContentSize().width / layout->getContentSize().width);
this->addChild(layout, );
layout->setOpacity(); auto fadeIn = FadeIn::create();
auto delay = DelayTime::create();
auto fadeOut = FadeOut::create();
auto callback = CallFuncN::create([=](Ref* pSender){ });
auto finalAction = Sequence::create(fadeIn,delay,fadeOut,callback,NULL);
layout->runAction(finalAction); return true;
} void HelloWorld::menuCloseCallback(Ref* pSender)
{
Director::getInstance()->end(); #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit();
#endif
}

HelloWorldScene.cpp

[转帖]Cocos2d-x 3.0rc0 的Win32工程添加CocoStudio库的更多相关文章

  1. 给新建的Cocos2d-x 3.X的Win32工程添加CocoStudio库

    1.我们在VS中找到"解决方案资源管理器", 在解决方案"HelloCocos"上点击右键, 选择添加现有项目. 在弹出的对话框中选择************* ...

  2. Win32工程中使用MFCdll的解决方法

    我的项目是Win32,先使用了 Standard Windows Libraries,可后期又要要使用MFC的dll,所以要更改工程属性 ,MFC 的dll可以使用了,但标准的windows的dll出 ...

  3. Win32编程之静态库编写与使用.动态链接库的编写与使用

    Win32编程之静态库编写与使用.动态链接库的编写与使用 一丶什么是静态库.什么是动态链接库. 静态库其实就是解决模块开发的一种解决方案.在以前.我们写代码的时候.每个人都可以独立写一个项目.但是现在 ...

  4. quick cocos2dx 3.x 配置win32工程

    公司项目主体部分用c++,而ui部分用lua写,所以选择了用quick框架.项目先开发了ios/mac版,这两天试着配置其win32工程,遇到一些问题,记录一下(纯c++版本cocos2dx配置方法应 ...

  5. cmake 如何生成一个win32工程

    只需要加上下面一句连接选项就可以了. IF(WIN32) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:W ...

  6. cocos2d JS touch(触摸监听)-快速添加事件监听器到管理器

    cc.eventManager.addListener({ event: cc.EventListener.TOUCH_ALL_AT_ONCE, onTouchesMoved: function (t ...

  7. win32程序应用mfc库

    引入<afx.h> 此时会出现如下错误: #ifdef _DLL#ifndef _AFXDLL#error Building MFC application with /MD[d] (CR ...

  8. [转帖]Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案

    Redis持久化--Redis宕机或者出现意外删库导致数据丢失--解决方案 https://www.cnblogs.com/xlecho/p/11834011.html echo编辑整理,欢迎转载,转 ...

  9. Cocos2d-x 开发 v3.2 建立新项目并添加库文件

    一.添加其它类库     3.0以上的设计耦合性强,项目中模块常以库的形式存在,需常添加链接库.在3.0中经常用到CocoStudio 编辑器的资源数据,所以需要添加CocoStudio 库. 1.1 ...

随机推荐

  1. 算法笔记_206:第五届蓝桥杯软件类决赛真题(Java语言A组)

    目录 1 海盗分金币 2 六角幻方 3 格子放鸡蛋 4 排列序数 5 幂一矩阵 6 供水设施    前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 海盗分金币 有5个海盗,相约进行一次帆船比赛. 比 ...

  2. 1z0-052 q209_7

    7: In which of the scenarios will the DBA perform recovery? (Choose all that apply.) A.The alert log ...

  3. eclipse 打包 apk 文件

    1.通过eclipse中的file ,点击Import 导入项目 2.选择Android 中的 Existing Android Code Into Workspace 3.通过 Brower 引入项 ...

  4. 通过配置CPU参数 worker_cpu_affinity 提升nginx性能

    简介 Nginx默认没有开启利用多核cpu,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核cpu的性能.cpu是任务处理,计算最关键的资源,cpu核越多,性能就越好. 规 ...

  5. HDUOJ----数塔

    数塔 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission ...

  6. ubuntu 中数据的迁移

    1.先停止mysql /etc/init.d/mysql stop

  7. js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)

    在前端开发工作中,由于浏览器兼容性等问题,我们会经常用到“停止事件冒泡”和“阻止浏览器默认行为”. 1..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器if ( ...

  8. JFinal常见问题和知识点笔记

    1.当主键Id命名不是“id”时,应该显式地将自定义的id指出来 例如: Db.deleteById("post_user","user_id", 5); 2. ...

  9. 【Linux】目录配置

    为什么每套Linux distributions的配置文件.执行文件.每个目录内放置的文件其实都差不多?因为有一套需要依据的标准!我们底下就来瞧一瞧. 因为利用Linux来开发产品或distribut ...

  10. go 学习笔记(1)--package

    引入包有以下几种方式: 1. 最简单的方式引入一个包的方式是直接引入包,例如: import "fmt" import "os" 2. 也可以通过下面的方式将包 ...