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

2015年03月16日 13:01 0 点赞 0 评论 更新于 2025-11-21 17:17

分析

主要思路

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

作者信息

menghao

menghao

共发布了 3994 篇文章