Cocos3.4 横版游戏制作-《KillBear》- 开始界面
来源:互联网 发布:白酒网络营销策划书 编辑:程序博客网 时间:2024/05/30 02:53
转载时请务必以超链接形式标明文章,原始出处 。
资源为网上寻找的,仅研究学习用,若是侵犯版权请通知本人整改。
上一篇: 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动画回弹效果)
- Cocos3.4 横版游戏制作-《KillBear》- 开始界面
- Cocos3.4 横版游戏制作-《KillBear》-添加地图
- Cocos3.4 横版游戏制作-《KillBear》-加入Hero
- Cocos3.4 横版游戏制作-《KillBear》-前言
- Cocos3.4 横版游戏制作-《KillBear》-添加摇杆并控制Hero
- Cocos3.4 横版游戏制作-《KillBear》-边缘检测 地图滚动
- Cocos3.4 横版游戏制作-《KillBear》-添加血条 攻击按键
- Cocos3.4 横版游戏制作-《KillBear》-添加敌人+简单AI实现
- Cocos3.4 横版游戏制作-《KillBear》-攻击判定+伤害飘血
- Cocos3.4 横版游戏制作-《KillBear》-技能及CD实现
- Cocos3.4 横版游戏制作-《KillBear》-暂停层+屏蔽下层监听
- Cocos3.3横版游戏-前言
- Cocos3.3横版游戏-Part1
- 【cocos3.9+box2d+tileMap】制作马里奥游戏(一)
- 【cocos3.x+box2d+tileMap】制作马里奥游戏(三)创世纪
- quick cocos2d-x 实战:做一个手机横版格斗游戏4:游戏开始界面背景图代码
- 游戏开始界面
- 开始接触游戏制作
- Graphviz JAVA API
- Linux(MAC) SSH远程文件/目录传输命令scp
- 一起学习 POI (使用 maven 构建)(3)-为单元格数据设置对齐、边框、背景、合并单元格
- 编写高性能的JavaScript事件
- short 型转换成int型
- Cocos3.4 横版游戏制作-《KillBear》- 开始界面
- 1014数据的插入与删除
- 解决FastCGI 进程超过了配置的活动超时时限的问题
- 数据访问方法
- Linux进程的堆
- 第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览SYNC.TXT翻译参考(原创)
- PAT(B)1013. 数素数 (20)
- 反汇编程序分析计算机是如何工作的
- 专门用于画图的设备描述表类