【cocos2dx-3.0beta-制作flappybird】玄关是必要的—游戏欢迎界面的创建

这一节里,我们主要是讲解游戏欢迎界面的制作。这里我们把游戏也当作一个场景(WelcomeScene)来实现——尽管它做的事情非常的简单,仅仅是加载了欢迎层(WelcomeLayer)

ok,让我们不妨先来看看我们最后完成的效果是什么样的吧。


在welcomelayer这一层中,主要有这么一些元素:
1)背景
2)地面
3)游戏名字、版权描述
4)开始游戏按钮
5)挥动翅膀的小鸟

那么,接下来我们要做的事情就非常简单明了了——把合适的 精灵放在合适的位置即可!

一、背景的放置:

原版的背景是随机的,这里我们做了一点小小的改动,即在白天的时候显示白天的背景,而在晚上的时候显示晚上的背景,那么具体如何实现的呢?且看如下代码:
 //get the current time, the background image will selected by current time day or night: bg_day or bg_night
 time_t t = time(NULL);
 tm* lt = localtime(&t);
 int hour = lt->tm_hour;

 //create the background image according to the current time;
 Sprite *background;
 if(hour >= 6 && hour <= 17){
     background = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrameByName("bg_day"));
 }else{
    background = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrameByName("bg_night"));
 }
 background->setAnchorPoint(Point::ZERO);
 background->setPosition(Point::ZERO);
 this->addChild(background);

二、地面效果:

咋一看地面是在不断滚动的,不难理解,让图片不断往左移动即可实现这种效果。那么,一张图片可以实现这样的效果吗?
事实上,通常我们采用两个精灵(land1,land2),不断交替地移动他们的X轴坐标。即当一张图片移出左边视野以后,就设置它的X轴坐标为右边最大值,这样它又可以开始第二次的从右往左移动了。如此交替反复滚动,就实现了我们所看到的地面滚动的效果了。
这里涉及到一个定时器的使用:
this->schedule(schedule_selector(WelcomeLayer::scrollLand), 0.01f);

即每隔0.01S执行一次WelcomeLayer::scrollLand()函数。
联系定时器的功能,也许你已经猜测scrollLand()函数所做的事情了,是的,其实就是不断的设置land1,和land2 的X轴坐标啦。好吧,让我们来看看它的庐山正面目吧:
void WelcomeLayer::scrollLand(float dt){
 this->land1->setPositionX(this->land1->getPositionX() - 2.0f);
 this->land2->setPositionX(this->land1->getPositionX() + this->land1->getContentSize().width - 2.0f);
 if(this->land2->getPositionX() == 0) {
  this->land1->setPositionX(0);
 }
}

三、游戏名称和版权信息

显然这两个只是普通的精灵而已,我们需要对他们的操作非常简单。创建Sprite->setPosition()->addChild()
下面简单举例对游戏名称的操作:
 //add the word game-title to the current scene
 Sprite *title = Sprite::createWithSpriteFrame(AtlasLoader::getInstance()->getSpriteFrameByName("title"));
 title->setPosition(Point(origin.x + visiableSize.width/2 , (visiableSize.height * 5) / 7));
 this->addChild(title);

四、开始按钮

相比游戏名称,我们发现当我们点击开始按钮的时候,它是有动作的。是的这里我们将引出一个菜单的概念。开始按钮实际上应该称之为菜单更加贴切。相比较Android里面的OnClick事件,这里的菜单通过回调函数来响应菜单项被选中时的事件。
1、一个菜单可以包括若干菜单项,我们不妨先建立一个菜单项:
auto menuItem = MenuItemSprite::create(startButton,activeStartButton,NULL,CC_CALLBACK_1(WelcomeLayer::menuStartCallback, this));
-------
1)MenuItemSprite::create() 的具体使用不妨参考一下cocosdx文档学习一下
2)CC_CALLBACK_1 为cocos2dx 3.0 新定义的关于回调函数的宏
3)显然,此处的menuStartCallback 就是菜单项选中以后的回调函数

2、然后,我们需要把这个菜单项放到某个菜单中去:
 auto menu = Menu::create(menuItem,NULL);

3、接下来我们要做的事情,当然就是放置这个菜单项了:
 menu->setPosition(Point(origin.x ,origin.y));
 this->addChild(menu,1);

五、挥动翅膀的小鸟

作为游戏的主角,我们单独写了一个小鸟类来处理小鸟的相关动作。
这一步,我们不妨简单地先添加一只不会动的小鸟(嗯,我想你可以的= =),而在之后的小节中,我们将详细讲解小鸟类的具体实现。

六、小结

在这一节当中,我们引入了精灵的概念,介绍了游戏欢迎界面的创建,菜单的使用,定时器的使用等等。如果你被这些概念弄糊涂了的话,不妨找一本cocos2dx的书籍来翻翻。当然最直接,最详细的第一手资料当属官方文档了。

具体代码以及游戏截屏还有游戏请移步该游戏在代码仓库: https://github.com/OiteBoys/Earlybird

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值