【cocos2dx 3.2】一个都不能死7 游戏结束场景
2015年03月16日 13:01
0 点赞
0 评论
更新于 2025-11-21 17:17
分析
主要思路
- 创建一个
Layer类作为游戏结束场景。 - 将主场景中的碰撞事件修改为切换到游戏结束场景。
- 当点击 “Restart” 时,切换回主场景重新开始游戏。
代码实现
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
GameOver.cpp
#include "GameOver.h"
Scene* GameOver::createScene() {
auto GameOverScene = Scene::create();
auto GameOverLayer = GameOver::create();
GameOverScene->addChild(GameOverLayer);
return GameOverScene;
}
bool GameOver::init() {
if (!LayerColor::initWithColor(Color4B(255, 69, 0, 255))) {
return false;
}
// 获取可见区域的大小
Size visibleSize = Director::getInstance()->getVisibleSize();
// 创建并设置标题标签
title = LabelTTF::create();
title->setString("Game Over!");
title->setFontSize(60);
title->setPosition(visibleSize.width / 2, visibleSize.height - 100);
addChild(title);
// 创建并设置重启标签
auto restart = LabelTTF::create();
restart->setString("Restart!");
restart->setFontSize(80);
restart->setPosition(visibleSize.width / 2, visibleSize.height / 2);
addChild(restart);
// 创建触摸事件监听器
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [restart](Touch *t, Event *e) {
// 检查触摸点是否在重启标签范围内
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!” 按钮。点击 “Restart!” 按钮,游戏将重新开始,切换回主场景。