首先做一些说明:
(1)开发工具:
vc2008 cocos2d-2.0-x-2.0.4
(2)实现的效果图(气泡的实际效果,比我做的图片要好许多的,这个要把代码运行起来就知道了)
(3)用到的知识点:
1.CCSprite: 创建图片
2.CCMenuItemImage CCMenu:创建目录
3.schedule: 定时器
4.CocosDenshion::SimpleAudioEngine::sharedEngine():播放音乐
5.CocosDenshion::SimpleAudioEngine::sharedEngine():播放音效
6.CCLog:Log:日志
7.CCRANDOM_0_1():随机数
8.CCMoveTo:移动动画
9.runAction:播放动画方法
10.开启触摸功能:
//set tounch funtion enable
this->setTouchEnabled(true);
void HelloWorld::registerWithTouchDispatcher()
{
CCDirector* pDirector = CCDirector::sharedDirector();
pDirector->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority + 1, true);
}
bool HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event)
{
CCPoint touchLocation = touch->getLocation();
// updateSize(touchLocation);
CCLog("ccTouchBegan:touchLocation: touchLocation.x=%.2f ,touchLocation.y:=%.2f",touchLocation.x,touchLocation.y);
return true;
}
void HelloWorld::ccTouchMoved(CCTouch* touch, CCEvent* event)
{
CCPoint touchLocation = touch->getLocation();
//updateSize(touchLocation);
CCLog("ccTouchMoved:touchLocation: touchLocation.x=%.2f ,touchLocation.y:=%.2f",touchLocation.x,touchLocation.y);
}
void HelloWorld::ccTouchEnded(CCTouch* touch, CCEvent* event)
{
CCPoint touchLocation = touch->getLocation();
//updateSize(touchLocation);
CCLog("ccTouchEnded:touchLocation: touchLocation.x=%.2f ,touchLocation.y=%.2f",touchLocation.x,touchLocation.y);
}
(4)关键代码:
1.HelloWorldScene.h
class HelloWorld : public cocos2d::CCLayer
{
public:
float locaitonH;
float maxH;
float maxW;
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// there's no 'id' in cpp, so we recommand to return the exactly class pointer
static cocos2d::CCScene* scene();
virtual void onEnter();
// a selector callback
void startGame(CCObject* pSender);
void selectGame(CCObject* pSender);
void helpGame(CCObject* pSender);
void settingGame(CCObject* pSender);
void updateBubble(float dt);
//Touch function
virtual void registerWithTouchDispatcher();
virtual bool ccTouchBegan(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
virtual void ccTouchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
virtual void ccTouchEnded(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
// implement the "static node()" method manually
CREATE_FUNC(HelloWorld);
};
2.HelloWorldScene.cpp
#include "HelloWorldScene.h"
using namespace cocos2d;
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::create();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
// return the scene
return scene;
}
void HelloWorld::onEnter()
{
CCLayer::onEnter();
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
bool bRet = false;
do
{
//
// super init first
//
CC_BREAK_IF(! CCLayer::init());
//
// add your codes below...
//
//set tounch funtion enable
this->setTouchEnabled(true);
// Get window size and place the label upper.
CCSize size = CCDirector::sharedDirector()->getWinSize();
//MaxH = size.height;
// 1. Add bg image.
CCSprite* pSpriteBg = CCSprite::create("bg.png");
CC_BREAK_IF(! pSpriteBg);
// Place the sprite on the center of the screen
pSpriteBg->setPosition(ccp(size.width/2, size.height/2));
// Add the sprite to HelloWorld layer as a child layer.
this->addChild(pSpriteBg, 0);
//CCSprite* bubble = CCSprite::create("water.png");
//bubble->setPosition(ccp(size.width/2,size.height/6));
//bubble->setScale(0.5);
//this->addChild(bubble,2);
locaitonH = size.height/6;
maxH = size.height;
maxW = size.width;
// 2. Add title image.
CCSprite *spritetile=CCSprite::create("title.png");
CCSize s=spritetile->getContentSize();
spritetile->setPosition(ccp(size.width/2,size.height-s.height/2));
//add to 1 order
this->addChild(spritetile,1);
// 3. Add select and start Menu
CCMenuItemImage *start=CCMenuItemImage::create("start.png",//normal image
"start.png",//pressed image
this,
menu_selector(HelloWorld::startGame));
CCSize startSize=start->getContentSize();
start->setPosition(ccp(0,size.height/2));
CCMenuItemImage *select=CCMenuItemImage::create("select.png",
"select.png",
this,
menu_selector(HelloWorld::selectGame));
CCSize selectSize=select->getContentSize();
select->setPosition(ccp(0,size.height/2-startSize.height));
CCMenu *menu=CCMenu::create(start,select,NULL);//创建菜单,并将两个菜单项传入
menu->setPosition(ccp(size.width/2,0));//设置菜单的位置,若不设置则为屏幕的正中间
addChild(menu,1);
// 4. Add set and help Menu
CCMenuItemImage *help=CCMenuItemImage::create("help.png",//normal image
"help.png",//pressed image
this,
menu_selector(HelloWorld::helpGame));
CCSize helpSize=help->getContentSize();
help->setPosition(ccp(0,size.height/4));
CCMenuItemImage *setting=CCMenuItemImage::create("setting.png",
"setting.png",
this,
menu_selector(HelloWorld::settingGame));
CCSize settingSize=setting->getContentSize();
setting->setPosition(ccp(0,size.height/4 -helpSize.height));
CCMenu *menu_2=CCMenu::create(help,setting,NULL);//创建菜单,并将两个菜单项传入
menu_2->setPosition(ccp(size.width/6,0));//设置菜单的位置,若不设置则为屏幕的正中间
addChild(menu_2,1);
schedule( schedule_selector(HelloWorld::updateBubble), 3);
//play music
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("background-music.mp3", true);
//play effect
//CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect(EFFECT_FILE);
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::startGame(CCObject* pSender)
{
CCLog("startGame");
}
void HelloWorld::selectGame(CCObject* pSender)
{
CCLog("selectGame");
}
void HelloWorld::helpGame(CCObject* pSender)
{
CCLog("helpGame");
}
void HelloWorld::settingGame(CCObject* pSender)
{
CCLog("settingGame");
}
void HelloWorld::updateBubble(float dt)
{
CCSprite* bubble = CCSprite::create("water.png");
bubble->setScale(0.25);
int random_x =CCRANDOM_0_1()*200;
int random_y =CCRANDOM_0_1()*10;
bubble->setPosition(ccp(maxW/8+random_x,0));
CCMoveTo* moveTo = CCMoveTo::create(2.5, ccp(maxW/8+random_x+random_y,maxH+10));
bubble->runAction(moveTo);
this->addChild(bubble,2);
CCLog("updateBubble");
}
void HelloWorld::registerWithTouchDispatcher()
{
CCDirector* pDirector = CCDirector::sharedDirector();
pDirector->getTouchDispatcher()->addTargetedDelegate(this, kCCMenuHandlerPriority + 1, true);
}
bool HelloWorld::ccTouchBegan(CCTouch* touch, CCEvent* event)
{
CCPoint touchLocation = touch->getLocation();
// updateSize(touchLocation);
CCLog("ccTouchBegan:touchLocation: touchLocation.x=%.2f ,touchLocation.y:=%.2f",touchLocation.x,touchLocation.y);
return true;
}
void HelloWorld::ccTouchMoved(CCTouch* touch, CCEvent* event)
{
CCPoint touchLocation = touch->getLocation();
//updateSize(touchLocation);
CCLog("ccTouchMoved:touchLocation: touchLocation.x=%.2f ,touchLocation.y:=%.2f",touchLocation.x,touchLocation.y);
}
void HelloWorld::ccTouchEnded(CCTouch* touch, CCEvent* event)
{
CCPoint touchLocation = touch->getLocation();
//updateSize(touchLocation);
CCLog("ccTouchEnded:touchLocation: touchLocation.x=%.2f ,touchLocation.y=%.2f",touchLocation.x,touchLocation.y);
}
(5)源码下载地址:
http://download.csdn.net/detail/hfreeman2008/5483837
参考资料:
1.【Cocos2d-x游戏引擎开发笔记(3)】在屏幕上渲染菜单并添加消息响应