【cocos2dx 3.2】一个都不能死7 游戏结束场景
2015年03月17日 15:47
0 点赞
0 评论
更新于 2025-11-21 17:30
分析
整体思路
- 创建一个
Layer类作为游戏结束场景。 - 将主场景中的碰撞事件改为切换到游戏结束场景。
- 当点击 “Restart” 时,切换回主场景重新开始游戏。
代码实现
1. GameOver.h 文件
#ifndef __GAMEOVER_H__
#define __GAMEOVER_H__
#include "cocos2d.h"
#include "HelloWorldScene.h"
USING_NS_CC;
// 头文件必须使用 #ifndef 进行包裹,否则可能会导致重复定义错误,例如某个定义被否决
class GameOver : public LayerColor {
public:
static Scene* createScene();
virtual bool init();
CREATE_FUNC(GameOver);
private:
LabelTTF *title;
};
#endif
2. GameOver.cpp 文件
#include "GameOver.h"
Scene* GameOver::createScene() {
// 创建一个新的场景
auto GameOverScene = Scene::create();
// 创建 GameOver 层
auto GameOverLayer = GameOver::create();
// 将 GameOver 层添加到场景中
GameOverScene->addChild(GameOverLayer);
return GameOverScene;
}
bool GameOver::init() {
// 初始化 LayerColor,设置背景颜色为橙色
if (!LayerColor::initWithColor(Color4B(255, 69, 0, 255))) {
return false;
}
// 获取可见区域的大小
Size visibleSize = Director::getInstance()->getVisibleSize();
// 创建 “Game Over!” 标签
title = LabelTTF::create();
title->setString("Game Over!");
title->setFontSize(60);
title->setPosition(visibleSize.width / 2, visibleSize.height - 100);
this->addChild(title);
// 创建 “Restart!” 标签
auto restart = LabelTTF::create();
restart->setString("Restart!");
restart->setFontSize(80);
restart->setPosition(visibleSize.width / 2, visibleSize.height / 2);
this->addChild(restart);
// 创建触摸事件监听器
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [restart](Touch *t, Event *e) {
// 检查触摸点是否在 “Restart!” 标签范围内
if (restart->getBoundingBox().containsPoint(restart->convertToNodeSpace(t->getLocation()))) {
// 切换回主场景
Director::getInstance()->replaceScene(HelloWorld::createScene());
}
return false;
};
// 添加触摸事件监听器
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, restart);
return true;
}
效果
通过上述代码,我们实现了一个简单的游戏结束场景。当游戏发生碰撞时,切换到该场景,显示 “Game Over!” 信息,并提供一个 “Restart!” 按钮,点击该按钮可以重新开始游戏。