cocos2d-x SimpleGame入门例程笔记

来源:互联网 发布:no sleep mac下载 编辑:程序博客网 时间:2024/05/19 22:26

一,启动开发环境

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 sprite
CCSize 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");
原创粉丝点击