【cocos2dx 3.2】一个都不能死7 游戏结束场景

2015年03月17日 15:47 0 点赞 0 评论 更新于 2025-11-21 17:30

分析

整体思路

  1. 创建一个 Layer 类作为游戏结束场景。
  2. 将主场景中的碰撞事件改为切换到游戏结束场景。
  3. 当点击 “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!” 按钮,点击该按钮可以重新开始游戏。

作者信息

menghao

menghao

共发布了 3994 篇文章