Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos3.4 横版游戏制作-《KillBear》- 开始界面大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

转载时请务必以超链接形式标明文章,原始出处 。
资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。


上一篇: Cocos3.4 横版游戏制作-《KillBear》-暂停层+屏蔽下层监听
上篇实现了游戏层中右上角添加一个按钮,用于暂停游戏功能的实现
本篇创建游戏开始界面,用于选择开始游戏还是退出游戏.


开发环境

win64 : vs2010
Cocos2d-x v3.4Final
TexturePackerGUI
MapEdit


简单的做一个开始界面.
我们需要:

  • 背景
  • 按钮

开始界面的背景,本例中使用一张已经做好的图片作为背景.

按钮放上3个,分别是:

  • 开始游戏
  • 游戏设置
  • 结束游戏

回调Scene来处理它们


代码

other

GameStart

  • .h
#ifndef _GAME_START_SCENE_H_
#define _GAME_START_SCENE_H_
#include <cocos2d.h>
USING_NS_CC;
//#include "LevelChooseLayer.h"
#include "GameScene.h"
#include "ui/CocosGUI.h"
#include "BarrierLayer.h"
using namespace ui;
class GameStartScene :public Layer { public: static cocos2d::Scene* createScene(); virtual bool init(); void StartGameCallBACk(Ref *pSender,Widget::TouchEventType type); void SetTingCallBACk(Ref *pSender,Widget::TouchEventType type); void CloseGameCallBACk(Ref *pSender,Widget::TouchEventType type); CREATE_FUNC(GameStartScen` ); }; #endif
  • .cpp
#include "GameStartScene.h"
#include "PopupLayer.h"
Scene* GameStartScene::createScene()
{
    auto scene = Scene::create();
    auto Layer = GameStartScene::create();
    scene->addChild(Layer);
    return scene;
}


bool GameStartScene ::init()
{   
    bool ret = false;
    do {
        Size visibleSize  = Director::geTinstance()->getVisibleSize();
        auto blackground  = Sprite::create("blackground.png");
        addChild(blackground);
        blackground->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));

        auto starT_Button = Button::create("button.png");
        starT_Button->settitleText("Start");
        starT_Button->settitleFontName("微软雅黑");
        starT_Button->settitleFontSize(16);
        starT_Button->setPosition(Vec2(visibleSize.width/2,visibleSize.height*0.75));
        starT_Button->addTouchEventListener(CC_CALLBACK_2(GameStartScene::StartGameCallBACk,this));
        addChild(starT_Button);

        auto setTing_button = Button::create("button.png");
        setTing_button->settitleText("Set");
        setTing_button->settitleFontName("微软雅黑");
        setTing_button->settitleFontSize(16);
        setTing_button->setPosition(Vec2(visibleSize.width/2,visibleSize.height*0.5));
        setTing_button->addTouchEventListener(CC_CALLBACK_2(GameStartScene::SetTingCallBACk,this));
        addChild(setTing_button);

        auto close_button = Button::create("button.png");
        close_button->settitleText("End");
        close_button->settitleFontName("微软雅黑");
        close_button->settitleFontSize(16);
        close_button->setPosition(Vec2(visibleSize.width/2,visibleSize.height*0.25));
        close_button->addTouchEventListener([=](Ref* pSender,Widget::TouchEventType type)
        {
            switch (type)
            {
            case cocos2d::ui::Widget::TouchEventType::ENDED:
                Director::geTinstance()->end();
                break;
            }
        });
        addChild(close_button);

        ret = true;
    } while(0);

    return ret;
}

void GameStartScene::StartGameCallBACk(Ref *pSender,Widget::TouchEventType type)
{
    CCLOG("StartGame");
    switch (type)
    {
    case cocos2d::ui::Widget::TouchEventType::ENDED:
        Director::geTinstance()->replaceScene(TransitionCrossFade::create(0.5f,GameScene::createScene()));
        break;
    }


}
void GameStartScene::SetTingCallBACk(Ref *pSender,Widget::TouchEventType type)
{

}
void GameStartScene::CloseGameCallBACk(Ref *pSender,Widget::TouchEventType type)
{
    switch (type)
    {
    case cocos2d::ui::Widget::TouchEventType::ENDED:
        Director::geTinstance()->end();
        break;
    }

}

需要注意的:
Director::geTinstance()->end();
结束整个游戏

而下面这2段代码功能相同,只是一个是直接在后面添加并编写当前回调函数,另一个是回调已经写好的函数

close_button->addTouchEventListener([=](Ref* pSender,Widget::TouchEventType type)
 {
 switch (typE)
 {
 case cocos2d::ui::Widget::TouchEventType::ENDED:
 Director::geTinstance()->end();
 break;
 }
 });

以下代码实际上并未使用

void GameStartScene::CloseGameCallBACk(Ref *pSender,Widget::TouchEventType type)
{
    switch (type)
    {
    case cocos2d::ui::Widget::TouchEventType::ENDED:
        Director::geTinstance()->end();
        break;
    }

}

这一句调用已经写好的Scene切换动画来实现切换

Director::geTinstance()->replaceScene(TransitionCrossFade::create(0.5f,GameScene::createScene()));

最后特比特别注意:
switch (typE)
本人在使用过程中忘了添加按键判定,由于Button点击一次有2种状态,Began和Ended.
导致在点击一次的情况下函数调用了2次,这种低级错误卡了我半个小时.
望各位特别关注,Button不是Menu,自己写回调代码需要注意.

AppDelegate

当游戏刚开始,希望载入的是GameStartScene而不是GameScene,需要在AppDelegate中修改它,当然最上方需要包含GameStartScene
- .cpp

#include "GameStartScene.h"
...
    auto scene = GameStartScene::createScene();
    director->runWithScene(scenE);

结果


结语

本篇非常简单的创建了一个开始界面,下篇通过ScrollView创建关卡选择界面. (为什么不用PageView?需要触摸回弹并利用ScrollView动画回弹效果)

@H_924_450@

大佬总结

以上是大佬教程为你收集整理的Cocos3.4 横版游戏制作-《KillBear》- 开始界面全部内容,希望文章能够帮你解决Cocos3.4 横版游戏制作-《KillBear》- 开始界面所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。