使用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游戏,同时也可以用它写各种图 ...
随机推荐
- linux下查看tomcat和jdk版本号
linux下查看tomcat和jdk版本号的命令: 这个需要进入到bin目录下面 ,执行"./version.sh"命令 [root@hncsweb bin]# ./version ...
- Devexpress DateEdit控件的值不反馈到数据源的处理方式。
如果在GridControl中要把编辑的值反馈到数据源,可以用Gridview1.PostEdit()方法. 可是在datalayout中使用就会遇到一些问题:比如说DateEdit控件,在保存数据的 ...
- iOS 判断View 是否是第一次显示
在实现某些需求的时候会有这样的情况,页面第一次加载显示的时候需要某些操作,而以后就不需要重复执行了, 一般这种处理都放在- (void)viewDidLoad或- (id)init因为一般这两个函数除 ...
- Struts2中Action接收参数的四种形式
1.Struts2的Action接收参数的三种形式. a. 使用Action的属性接收(直接在action中利用get方法来接收参数): login.js ...
- x.2
某些原因,和女朋友分手了,难过 订的M18XR3居然提前了半个多月到货,开心 想想一个人的孤单,还是有点难过 转眼间人生已经过去小半,剩下的除去苟延残喘20年,也就不到20年时间蹦跶.都说人生如戏,既 ...
- 关于aggregation 语法和表达式大全(最新3.4版)
用mongodb四年多了,从1.8版用到目前的3.4版,功能越来越强大,而且它的每一次升级带给我的都是惊喜,最近发现他的aggregation(管道)技术越来越丰富了,基本上将它提供的所有功能都集成了 ...
- 理解python的with语句
Python’s with statement provides a very convenient way of dealing with the situation where you have ...
- mac OS X Yosemite (10.10.5) 下 安装vim 7.4笔记
摘要 前言 需求与mac OS X 自带vim版本的冲突 默认Python解释器问题 并非Mac自带python的 homebrew 1. 前言 本文为自己作死折腾的问题记录 2. 需求与mac OS ...
- GSM Hacking Part① :使用SDR扫描嗅探GSM网络
0×00 写在开头 近期,发现Crazy Danish Hacker在YouTuBe发布了一个挺不错的教程视频:使用SDR嗅探监听GSM网络的通信流量(GSM Sniffing Teaser – So ...
- VS2010+PCL配置
原文出自(转载): http://blog.csdn.net/renshengrumenglibing/article/details/9073675 1.安装 pcl 的完全安装包可以到: http ...