(二)界面的交互

本文介绍如何使用Cocos2d-x创建游戏主场景,并实现角色移动及背景滚动效果。通过添加PlayGame图层,实现了玩家角色的上下左右移动功能,并设置了返回按钮返回上一界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接着我们再创建一个场景(游戏场景),在前面那个场景中单击"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界面。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值