接着我们再创建一个场景(游戏场景),在前面那个场景中单击"raceNow”,刚进入游戏主场景了。
源码:
首先,在上面Racenow.h文件中添加一个新的图层 PlayGame
class PlayGame:public cocos2d::CCLayer
{
protected:
cocos2d::CCSprite* player;
public:
virtual bool init();
virtual void menuBackCallback(NSObject* pSender);
virtual void menuLifespanCallback(NSObject* pSender);
virtual void menuUpCallback(NSObject* pSender);
virtual void menuDownCallback(NSObject* pSender);
virtual void menuLeftCallback(NSObject* pSender);
virtual void menuRightCallback(NSObject* pSender);
LAYER_NODE_FUNC(PlayGame);
其次,在RaceNow.cpp文件中添加图层PlayGame的初使化函数
bool PlayGame::init()
{
if(!CCLayer::init())
{
return false;
}
setIsTouchEnabled(true);
CGSize s=CCDirector::sharedDirector()->getWinSize();
CCSprite* back=CCSprite::spriteWithFile("load.jpg");
back->setPosition (ccp(s.width/2,s.height/2));
addChild(back,0);
CCIntervalAction* fall_back=CCMoveBy::actionWithDuration(3,CGPointMake(0,-20));
CCIntervalAction* fall_up=fall_back->reverse();
CCRepeatForever* fall_back_4=CCRepeatForever::actionWithAction((CCIntervalAction*)CCSequence::actions(fall_back,fall_up,NULL));
back->runAction(fall_back_4);
player=CCSprite::spriteWithFile("role.jpg");
player->setPosition(ccp(s.width/2,s.height/2-20));
addChild(player,1);
CCMenuItemImage* quit=CCMenuItemImage::itemFromNormalImage("back.jpg","back_selected.jpg",this,menu_selector(PlayGame::menuBackCallback));
CCMenuItemImage* up=CCMenuItemImage::itemFromNormalImage("up.jpg","up.jpg",this,menu_selector(PlayGame::menuUpCallback));
CCMenuItemImage* down=CCMenuItemImage::itemFromNormalImage("down.jpg","down.jpg",this,menu_selector(PlayGame::menuDownCallback));
CCMenuItemImage* left=CCMenuItemImage::itemFromNormalImage("left.jpg","left.jpg",this,menu_selector(PlayGame::menuLeftCallback));
CCMenuItemImage* right=CCMenuItemImage::itemFromNormalImage("right.jpg","right.jpg",this,menu_selector(PlayGame::menuRightCallback));
CCMenuItemImage* life=CCMenuItemImage::itemFromNormalImage("lifespan.jpg","lifespan.jpg",this,menu_selector(PlayGame::menuLifespanCallback));
CCMenu* m=CCMenu::menuWithItems(quit,life,up,down,left,right,NULL);
m->setPosition(CGPointZero);
quit->setPosition(ccp(s.width-30,s.height-25));
life->setPosition(ccp(s.width-30,s.height-60));
up->setPosition(ccp(s.width/2-170,s.height/2-60));
down->setPosition(ccp(s.width/2-170,s.height/2-120));
left->setPosition(ccp(s.width/2-200,s.height/2-90));
right->setPosition(ccp(s.width/2-140,s.height/2-90));
addChild(m,1);
return true;
}
随后,修改RaceNow图层上的RaceNow按键的响应函数
void RaceNow::menuRaceNowCallback(NSObject* pSender)
{
CCScene* s=CCScene::node();
CCLayer* layer=PlayGame::node();
s->addChild(layer);
CCDirector::sharedDirector()->replaceScene(s);
}
最后,添加新图层PlayGame中的按钮响应函数:
void PlayGame::menuBackCallback(NSObject* pSender)
{
CCScene* s=CCScene::node();
CCLayer* l=RaceNow::node();
s->addChild(l);
CCDirector::sharedDirector()->replaceScene(s);
}
void PlayGame::menuLifespanCallback(NSObject* pSender)
{
}
void PlayGame::menuUpCallback(NSObject* pSender)
{
CCIntervalAction* run=CCMoveBy::actionWithDuration(0.5,CGPointMake(0,-10));
player->runAction(run);
}
void PlayGame::menuDownCallback(NSObject* pSender)
{
CCIntervalAction* run=CCMoveBy::actionWithDuration(0.5,CGPointMake(0,10));
player->runAction(run);
}
void PlayGame::menuLeftCallback(NSObject* pSender)
{
CCIntervalAction* run=CCMoveBy::actionWithDuration(0.5,CGPointMake(-10,0));
player->runAction(run);
}
void PlayGame::menuRightCallback(NSObject* pSender)
{
CCIntervalAction* run=CCMoveBy::actionWithDuration(0.5,CGPointMake(10,0));
player->runAction(run);
}
到此,就大功告成了。结果如下:
新的图层中,背景图片自动上下移动,上下左右四个方向按键,按了图中的精灵将向指定方向移动,单击back按键返回RaceNow界面。