2026-02-13 08:43:50 +08:00
|
|
|
|
// ============================================================================
|
|
|
|
|
|
// BaseScene.h - Flappy Bird 基础场景类
|
|
|
|
|
|
// 描述: 提供统一的居中视口适配功能,所有游戏场景都应继承此类
|
|
|
|
|
|
// ============================================================================
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
2026-02-25 06:23:53 +08:00
|
|
|
|
#include <extra2d.h>
|
2026-02-13 08:43:50 +08:00
|
|
|
|
|
|
|
|
|
|
namespace flappybird {
|
|
|
|
|
|
|
|
|
|
|
|
// 游戏逻辑分辨率(原始 Flappy Bird 尺寸)
|
|
|
|
|
|
static constexpr float GAME_WIDTH = 288.0f;
|
|
|
|
|
|
static constexpr float GAME_HEIGHT = 512.0f;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief Flappy Bird 基础场景类
|
|
|
|
|
|
* 所有游戏场景都应继承此类,以获得统一的居中视口适配功能
|
|
|
|
|
|
*/
|
|
|
|
|
|
class BaseScene : public extra2d::Scene {
|
|
|
|
|
|
public:
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 构造函数
|
|
|
|
|
|
*/
|
|
|
|
|
|
BaseScene();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 场景进入时调用
|
|
|
|
|
|
*/
|
|
|
|
|
|
void onEnter() override;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 渲染时调用,设置居中视口
|
|
|
|
|
|
* @param renderer 渲染后端
|
|
|
|
|
|
*/
|
2026-02-26 00:59:16 +08:00
|
|
|
|
void onRender(extra2d::Renderer &renderer) override;
|
2026-02-13 08:43:50 +08:00
|
|
|
|
|
2026-02-13 13:56:18 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief 渲染场景内容,确保视口正确设置
|
|
|
|
|
|
* @param renderer 渲染后端
|
|
|
|
|
|
*/
|
2026-02-26 00:59:16 +08:00
|
|
|
|
void renderContent(extra2d::Renderer &renderer) override;
|
2026-02-13 13:56:18 +08:00
|
|
|
|
|
2026-02-13 08:43:50 +08:00
|
|
|
|
protected:
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief 更新视口计算,使游戏内容在窗口中居中显示
|
|
|
|
|
|
*/
|
|
|
|
|
|
void updateViewport();
|
|
|
|
|
|
|
|
|
|
|
|
// 视口适配参数(用于在窗口中居中显示游戏内容)
|
|
|
|
|
|
float scaledGameWidth_ = 0.0f; // 缩放后的游戏宽度
|
|
|
|
|
|
float scaledGameHeight_ = 0.0f; // 缩放后的游戏高度
|
|
|
|
|
|
float viewportOffsetX_ = 0.0f; // 视口水平偏移
|
|
|
|
|
|
float viewportOffsetY_ = 0.0f; // 视口垂直偏移
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace flappybird
|