一,启动开发环境
1,进入cocos2d-x的根目录,启动cocos2d-win32.vc2010.sln,
右键点击“Solution ’cocos2d-win32.vc2010’”,之后选择“Add->New Project”根据选项创建新工程
2,进入cocos2d-x的根目录,启动create-android-project.bat
输入包名字和android的工程名字,就会在根目录下有个工程名字的目录
3,运行cygwin,进入那个目录下的android目录,之后运行build_native.sh
4,运行eclipse,File->New->Project->Android Project,加入上面android目录的工程, 然后编译运行即可
二,SimpleGame例程
(1)添加一个精灵
//---->wzc add my spriteCCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCSprite* mySprite = CCSprite::spriteWithFile("Player.png");
mySprite->setPosition(ccp(mySprite->getContentSize().width/2,winSize.height/2));
this->addChild(mySprite);
(2)增加可移动的敌人
在HelloWorld::init()函数返回前增加调度函数,这个框架一般是处理游戏逻辑的//调度函数,每一秒调用函数HelloWorld::gameLogic
this->schedule(schedule_selector(HelloWorld::gameLogic), 1.0);
其中gameLogic函数要实现游戏的逻辑处理,在这我们实现增加可移动敌人的汉化HelloWorld::addTarget()
在addTarget()里主要创建一个精灵,设置位置,然后设置动作,其中有2个动作
//创建动作,CCMoveTo::actionWithDuration 是一个移动动作,参数1为持续时间,参数2未终点位置
CCFiniteTimeAction* actionMove = CCMoveTo::actionWithDuration((ccTime)actualDuration,
ccp(0-target->getContentSize().width/2, actualY));
//创建动作,回调函数动作,进行这个动作会回调函数,把调用他的节点作为参数传入回调函数
CCFiniteTimeAction* actionMoveDone = CCCallFuncN::actionWithTarget( this,
callfuncN_selector(HelloWorld::spriteMoveFinished));
//在回调函数里释放掉精灵(这是HelloWorld的成员方法)
void HelloWorld::spriteMoveFinished(CCNode* sender)
{
CCSprite *sprite = (CCSprite *)sender;
this->removeChild(sprite, true);
}
//最后把2个动作连起来并使精灵运行这2个动作
target->runAction(CCSequence::actions(actionMove,actionMoveDone,NULL));
(3)射击,开启多点触摸事件
1,开启多点触摸,可在init函数里this->setIsTouchEnabled(true);
2,重载触摸响应函数,多点触摸是ccTouchesEnded(有es)
virtual void ccTouchesEnded(CCSet *pTouch, CCEvent *pEvent);//其中一个响应函数
在响应函数里
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)
{
//获取其中一个触摸点
CCTouch* touch = (CCTouch*)( touches->anyObject() );
//取得触摸点坐标
CCPoint location = touch->locationInView(touch->view());
//转换成openGL坐标体系的坐标
location = CCDirector::sharedDirector()->convertToGL(location);
//然后做需要做的事情
//.......
}
(4)碰撞检测
首先,跟踪怪物和子弹是必需的。在游戏中,我们为这两种精灵加以不同的tag来区分它们。当tag=1时,表示这是怪物,而tag=2时,则表示这为子弹。
由于在CCNode里面有m_nTag这个成员变量,并且有setTag和getTag方法,因此CCSprite就继承了这些方法,我们可以利用之。
1,在类里增加2个动态数组成员来存储敌人和子弹
cocos2d::CCMutableArray<cocos2d::CCSprite*> *_targets;
cocos2d::CCMutableArray<cocos2d::CCSprite*> *_projectiles;
2,在构造函数里初始化 和 在析构函数里释放上面2个数组
3,在init函数里new出动态数组实例
4,修改addTarget(),把新目标添加到目标数组中,并设置其tag为1
修改ccTouchesEnded(),把新子弹加入到子弹数组中,并设置其tag为2。
5,实现一个调度函数update,每帧都调用.
每个子弹都检查时候与任何一个敌人发生碰撞
其中碰撞检测函数为CCRect::CCRectIntersectsRect(CCRect, CCRect)
6,在init函数里启动回调函数this->schedule( schedule_selector(HelloWorld::update) );
(5)播放声音
1,在HelloWorldScene.cpp里包含SimpleaudioEngine.h头文件2,播放背景音乐
在init()里添加背景音乐
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music-aac.wav", true);
3,播放发射子弹效应
CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("pew-pew-lei.wav");