在最新的cocos集成环境中,CocosStudio已经集成到cocos中了,至于界面的制作和编辑器的基本使用在cocos官网有详细教程,
这里就不细说,资源下载和详情请参看官网教程:http://cn.cocos2d-x.org/tutorial/show?id=1650
接下来就是使用cocos2d-x3.4完成接下来的代码操作与打包,一步一步来。
1、cocos2d-x3.4环境问题,cocos2d-x3.4对NDK的要求是最新的,这里我使用的是r10d。如果使用eclipse进行打包,需要
eclipse版本在23以上,这里我是用的是2014年7月2号的版本(Eclipse IDE for Android Developers 23.0.2.1259578 )。
相应的SDKcocos2d-x3.4项目默认是20,(2014年7月2号的版本的ADT里面集成的SDK就是20)请自行下载。另外Python
和java请自行安装,并且配置好环境变量。建议新手直接下载cocosframeworks3.4进行安装,这样cocos相关的环境变量会自
动配置好。
2、使用eclipse进行android编译的还有一个重要的参数需要配置:NDK_MODULE_PATH,我嫌麻烦,直接配置在环境变量里。
3.4的这三个目录分别是cocos引擎根目录,external目录,和cocos目录,例如我的配置:
FrameWorks\frameworks\cocos2d-x-3.4rc1;D:\CocosFrameWorks\frameworks\cocos2d-x-3.4rc1\external;D:\CocosFrameWorks\frameworks\cocos2d-x-3.4rc1\cocos
3、接下来就是工程的创建和代码编写了,这里我使用c++开发,编辑器使用vs2013update4。
首先打开命令行窗口,使用cocos命令行创建工程:cocos new KissBear -p com.KissBear.cn -l cpp -d D:\cocosProjects
解释下命令参数:new是新建工程命令,-p是包名称,-l是开发语言,-d是工程存放目录
4、将cocosStudio导出的资源文件全部拷贝到工程目录下的Resources目录下。嗯,先看下cocosStudio的效果图:
/************************************************************************/
/* 头文件:BearMainScene.h*/
/************************************************************************/ #ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__ #include "cocos2d.h"
#include "ui/CocosGUI.h"
USING_NS_CC;
using namespace cocos2d::ui; class BearMainScene : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene(); virtual bool init(); CREATE_FUNC(BearMainScene); public:
int GetRandNum(); void update(float delta); //帧循环
void GetshowBear(); //获取要显示的小熊并且显示小熊
void setScore(); //设置分数
Vector<Node*> bearNodeArray; //存储所有的小熊列表
Node *alivebear; //当前显示的小熊
Sprite *sp_kiss; //嘴唇精灵
Text *scoreText; //分数控件 static float beginclock; //显示计时
int preBearNum; //上次显示的小熊编号
static float difftime; //显示时间差
static int totalScore; //总分数
}; #endif // __HELLOWORLD_SCENE_H__
实现文件:
#include "BearKissScene.h"
#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h" USING_NS_CC; float BearMainScene::difftime = 1.5;
int BearMainScene::totalScore = ;
float BearMainScene::beginclock = 0.0; Scene* BearMainScene::createScene()
{
auto scene = Scene::create();
auto layer = BearMainScene::create();
scene->addChild(layer);
return scene;
} bool BearMainScene::init()
{
if ( !Layer::init() )
{
return false;
} auto manilayer = CSLoader::createNode("MainScene.csb");
this->addChild(manilayer); char index[];
for (int i = ; i < ; i++)
{
std::string nodename = "ProjectNode_";
memset(index, , sizeof(char) * );
sprintf(index, "%d", i);
nodename = nodename.append(index);
auto sp_w = manilayer->getChildByName(nodename);
bearNodeArray.pushBack(sp_w);
} scoreText = (Text*)manilayer->getChildByName("Text_Score");
setScore(); sp_kiss = Sprite::create("m.png");
sp_kiss->setVisible(false);
sp_kiss->setAnchorPoint(Vec2(0.5, 0.5));
this->addChild(sp_kiss); GetshowBear(); //拉姆达表达式做碰撞监听
auto bearListener = EventListenerTouchOneByOne::create();
bearListener->onTouchBegan = [&](Touch *touch, Event* event){
auto bearrect = Rect(, , alivebear->getContentSize().width, alivebear->getContentSize().height);
auto startpos = alivebear->convertToNodeSpace(touch->getLocation()); if (bearrect.containsPoint(startpos) && alivebear->isVisible())
{
sp_kiss->setVisible(false);
sp_kiss->setPosition(touch->getLocation());
sp_kiss->setVisible(true);
totalScore += ;
//如果显示时间间隔大于0.1秒,那么分数每增长1000分,时间差减去0.1,这样子,就会随着分数的提高难度增加
if (difftime != 0.1)
{
if (totalScore % == )
{
difftime -= 0.1;
}
} setScore();
} return true;
}; bearListener->onTouchMoved = [](Touch *touch, Event* event){
}; bearListener->onTouchEnded = [&](Touch *touch, Event* event){ }; _eventDispatcher->addEventListenerWithSceneGraphPriority(bearListener, alivebear); this->scheduleUpdate(); return true;
} int BearMainScene::GetRandNum()
{
int num = ;
while ()
{
num = rand_0_1() * ;
if (num >= && num < )
{
break;
}
}
return num;
} void BearMainScene::GetshowBear()
{
int idx = GetRandNum();
while (idx == preBearNum)
{
idx = GetRandNum();
}
preBearNum = idx;
std::string spritename = "Sp_bear";
auto bearNode = bearNodeArray.at(idx);
alivebear = bearNode->getChildByName(spritename);
if (sp_kiss->isVisible())
{
sp_kiss->setVisible(false);
}
alivebear->setVisible(true);
} void BearMainScene::update(float delta)
{
beginclock += delta;
if (beginclock >= difftime)
{
beginclock = ;
alivebear->setVisible(false);
GetshowBear();
}
} void BearMainScene::setScore()
{
char scorestr[];
memset(scorestr, , sizeof(scorestr));
sprintf(scorestr, "%d", totalScore);
scoreText->setString(scorestr);
}
8、然后,修改appdelegate的glview属性:glview = GLViewImpl::createWithRect("MyKissBear", Rect(0, 0, 640, 960));
这里需要注意,如果想要跑WP8的工程createWithRect这个函数是没有的,需要使用setFrameSize去设置大小。
9、最后进入项目目录,打开命令行窗口:cocos run -p android -m release --ap-20 ,当然请把android手机连上电脑。这里需要
注意,这里编译的是release版本,是需要签名的,如果嫌麻烦,将release改成debug或者直接去掉,因为默认是debug版本编译的。
那么要签名的话,需要先生成签名文件,这里简单说下方法,同样进入项目目录,打开命令行窗口:keytool -genkey -alias demo.keystore -keyalg RSA -validity 3650 -keystore demo.keystore
demo.keystore是签名文件名称,RSA是加密方式,3650是有效天数,-alias是别名,还有个keysize,这里就不设置,默认就好。
签名文件生成之后,在执行前面的run命令,根据提示输入keystore路径,就好了。
10、如果使用ecliose编译,相关路径一定要配置好,我遇到的问题就是提示c++空指针,原因是因为我在首次打开eclipse是NDK路径
没有设置正确,即使NDK之后设置正确,打开也会报错,解决方法:删除android工程下的.cproject文件。
最后,上一张手机上的效果图:
好啦,到这里就结束了。