使用cocos2d-x3.4结合cocos2.1.5制作小游戏《亲亲小熊》
在最新的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文件。
最后,上一张手机上的效果图:

好啦,到这里就结束了。
使用cocos2d-x3.4结合cocos2.1.5制作小游戏《亲亲小熊》的更多相关文章
- 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计
前段时间一直在忙.没有时间更新博客.今天还是抽点时间把最后一小部分游戏的实现放上来吧. BaseLayer.h: #import <GameKit/GameKit.h> #import & ...
- 基于cocos2d开发的android小游戏——採花仙
/*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...
- cocos2d 小游戏
今天写了一个小游戏,发现看过的代码自己来写还是会经常出错,还是要多自己动手写写哈. 先上几张游戏界面图 void HelloWorld::addTarget() { //首先初始化精灵 CCSprit ...
- [cocos2d demo]认字小游戏
2013.9.5更新第二版 游戏分三个场景,分别为主场景,加载场景以及游戏场景,游戏场景分为背景层,逻辑层以及UI层 1.背景:旋转太阳,移动波浪,漂浮的云 2.UI层:随机生成字附带在帆船上移动,当 ...
- iPhone开发与cocos2d 经验谈
转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...
- Mac下搭建cocos2d 和cocos2d -x 环境
来源:http://blog.csdn.net/duxinfeng2010/article/details/7985024 cocos2d是一个开源框架,用于构建2D游戏.演示程序和其他图形界面交互应 ...
- 一个cocos2d程序的完整人生(从环境到代码全过程)
今天我的打砖块小游戏Beta0.1终于完成了,比较开心,写一下这个程序从出生到长大的全过程把. 这是个博客集合帖,具体的操作细节我都在其它博文中有详细说明,下面会给出链接 首先,我想我还是要介绍一 ...
- cocos2d的框架思路
这是我第一次写cocos的框架思路哈,虽然只是写完了一个程序,按理来说应该再多写一些,多积累一些经验了再来写这个框架的构成,但是我觉得还是把我这次写代码的所有想法先记下来哈,等到以后继续写cocos的 ...
- 关于cocos2d这个东西
我是在今年6月份左右接触到cocos2d这个东西的,当时就是想写个小游戏,结果买书的时候误打误撞就买了cocos2d的书. cocos2d是一个开源的游戏引擎,用于构建2d游戏,同时也可以用它写各种图 ...
随机推荐
- C/C++技术常用网站
软件下载网站[visual studio 2005编译器] http://www.xdowns.com/ debug调试大牛 http://blogs.msdn.com/oldnewthing/ ht ...
- 这种代码怎么改写?以致于在下次增加CustomsType时,不需要再加 if 语句。
最近看到项目里一段代码如下: excelObject excel = new excelObject(); if (loadbill.CustomsType == 1) excel.IDownload ...
- Java集合运用技巧
需要唯一吗? 需要:Set 需要制定顺序吗? 需要:TreeSet 不需要:HashSet 但是想要一个和存储一致的顺序(有序):LinkedHashSet 不需要:List 需要频繁增删吗? 需要: ...
- Spark源码学习1.7——Master.scala
master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...
- RABBITMQ(小总结 持续更新...
(一)理解消息通信 1.消息通信概念---消费者.生产者和代理 生产者(producer)创建消息,然后发送到代理服务器(RaabitMQ). 其中消息包括两部分内容:有效载荷(payload)和标签 ...
- js中遍历出查询后的listmodel(下拉框系列)
function selectclassname(){ $.ajax({ url:"queryschoolclasslists.action", async:false, data ...
- datatables ajax后端请求那些坑
在对datatables做后端数据填充的时候,遇到一个,翻页问题.在多次操作翻页后,总是提示加载中.反了很多博客没有找到原因. 经过测试,发现原来自己坑了自己. 代码如下: datatables : ...
- Android应用开发SharedPreferences存储数据的使用方法
Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...
- 可编辑的div元素去除粘贴复制带来的额外样式,实现纯文本粘贴
$(function(){ var update = function(original){ var new_content = $('.testmr').html(); var new ...
- mongo链接solr的过程与问题
我的环境: 1:ubunt 16 2:mongodb 2.6.1 3:solr 6.3 4:JDK 1.8 准备过程: 1:安装mongo-connector #pip install mongo-c ...