This commit is contained in:
2026-02-08 16:20:50 +08:00
parent 0ae47e5d6a
commit 8b88904ef7
72 changed files with 5963 additions and 2038 deletions

View File

@@ -3,6 +3,7 @@
#include "EngineFrame/Component/Sprite.h"
#include "EngineFrame/Base/Actor.h"
#include "EngineFrame/Component/Text.h"
#include "Asset/Asset_SoundPack.h"
Game::Game()
{
@@ -67,13 +68,6 @@ void Game::Init(std::function<void()> CallBack)
IMG_Init(IMG_INIT_PNG);
// 初始化SDL_mixer支持OGG格式
// 44100: 采样率, MIX_DEFAULT_FORMAT: 音频格式, 2: 声道数(立体声), 4096: 缓冲区大小
if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 4096) < 0)
{
SDL_LogError(SDL_LOG_CATEGORY_ERROR, "SDL_mixer初始化失败! Mix_Error: %s\n", Mix_GetError());
m_isRunning = false;
}
// 初始化 TTF
if (TTF_Init() == -1)
@@ -157,9 +151,16 @@ void Game::HandleEvents(SDL_Event *e)
void Game::Update(float deltaTime)
{
//调用松鼠的更新
// 内存回收机制
m_lastMemoryPrintTime += deltaTime;
if (m_lastMemoryPrintTime >= m_memoryPrintInterval)
{
m_lastMemoryPrintTime = 0;
MemoryReclaims();
}
// 调用松鼠的更新
SquirrelEx::GetInstance().Update(deltaTime);
if (m_scene != nullptr)
if (m_scene != nullptr)
m_scene->Update(deltaTime);
if (m_uiScene != nullptr)
m_uiScene->Update(deltaTime);
@@ -205,6 +206,12 @@ void Game::Clear()
SDL_Quit();
}
void Game::MemoryReclaims()
{
// 音频内存回收
Asset_SoundPack::GetInstance().Reclaims();
}
void Game::ChangeScene(RefPtr<Scene> scene)
{
if (m_scene != nullptr)
@@ -225,6 +232,11 @@ void Game::ChangeUIScene(RefPtr<Scene> scene)
m_uiScene->Enter();
}
RefPtr<Scene> Game::GetScene()
{
return m_scene;
}
RenderManager *Game::GetRenderer()
{
return m_renderer;

View File

@@ -51,10 +51,14 @@ public:
void Render();
void Clear();
void MemoryReclaims();
// 切换场景
void ChangeScene(RefPtr<Scene> scene);
// 设定UI层场景对象
void ChangeUIScene(RefPtr<Scene> scene);
// 获取当前游戏层场景
RefPtr<Scene> GetScene();
RenderManager *GetRenderer();
@@ -79,7 +83,7 @@ private:
#ifdef __SWITCH__
float m_Settingfps = 5000.0;
#else
float m_Settingfps = 5000.0;
float m_Settingfps = 144.0;
#endif
// 单帧时间
float m_frameTime = 0.f;
@@ -88,6 +92,10 @@ private:
// 每秒内的帧数计数器
u32 m_frameCounter;
u32 m_lastFpsPrintTime;
// 内存回收计时器
u32 m_lastMemoryPrintTime = 0;
// 内存回收间隔
u32 m_memoryPrintInterval = 5000;
public:
// 屏幕宽高