mirror of
https://github.com/zhenyan121/SporeBG-Conid.git
synced 2026-04-10 06:14:08 +08:00
Using WindowManager to begin and end frame
This commit is contained in:
@@ -11,6 +11,10 @@ cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COM
|
||||
ninja
|
||||
```
|
||||
|
||||
## 目前更新计划
|
||||
- 使用位图渲染文字,移除TTF
|
||||
|
||||
|
||||
## 待添加玩法
|
||||
- 生命值
|
||||
- 道具(直接消灭一个孢子之类的)
|
||||
|
||||
@@ -53,10 +53,13 @@ SDL_AppResult GameApplication::handleInputEvent(SDL_Event* event) {
|
||||
m_sceneManager->handleClickCurrent(input.mouseCilckOn);
|
||||
}
|
||||
m_sceneManager->handleMousePosition(input.mouseCurrentPosition);
|
||||
m_windowManager->setFullscreen(input.isFullscreen);
|
||||
return result;
|
||||
}
|
||||
|
||||
void GameApplication::run() {
|
||||
m_windowManager->Clear();
|
||||
m_sceneManager->updateCurrent();
|
||||
m_sceneManager->renderCurrent();
|
||||
m_windowManager->Present();
|
||||
}
|
||||
@@ -36,7 +36,7 @@ TTF_Font* FontManager::loadFont(const std::string& fontID, int ptSize) {
|
||||
// 字体加载失败,抛出异常
|
||||
throw std::runtime_error("无法加载字体: " + fontID);
|
||||
}
|
||||
|
||||
TTF_SetFontHinting(font, TTF_HINTING_MONO); // 单色渲染,不抗锯齿
|
||||
// 将新加载的字体存入缓存
|
||||
m_fonts[key] = font;
|
||||
return font;
|
||||
|
||||
@@ -91,7 +91,7 @@ TextRenderer::CachedText TextRenderer::createAndCacheTexture(const std::string&
|
||||
SDL_Log("错误:无法创建纹理\n");
|
||||
return result;
|
||||
}
|
||||
|
||||
SDL_SetTextureScaleMode(texture, SDL_SCALEMODE_NEAREST);
|
||||
// 保存结果
|
||||
result.texture = texture;
|
||||
result.width = width;
|
||||
|
||||
@@ -68,7 +68,7 @@ protected:
|
||||
SDL_Renderer* m_renderer; ///< SDL 渲染器指针
|
||||
EventCallback m_eventCallback; ///< 场景事件回调函数
|
||||
|
||||
void beginFrame() {
|
||||
/*void beginFrame() {
|
||||
if (!m_renderer) {
|
||||
SDL_Log("Renderer is null in beginFrame!");
|
||||
return;
|
||||
@@ -77,12 +77,12 @@ protected:
|
||||
SDL_SetRenderDrawColor(m_renderer, 255, 255, 255, 255);
|
||||
SDL_RenderClear(m_renderer);
|
||||
//std::cout << "begin frame\n";
|
||||
}
|
||||
}*/
|
||||
|
||||
void endFrame() {
|
||||
/*void endFrame() {
|
||||
// 提交到屏幕
|
||||
//std::cout << "end frame\n";
|
||||
SDL_RenderPresent(m_renderer);
|
||||
}
|
||||
}*/
|
||||
};
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ private:
|
||||
std::stack<std::shared_ptr<Scene>> m_scenes; ///< 场景栈,存储场景层级关系(使用 shared_ptr)
|
||||
std::unordered_map<std::string, std::shared_ptr<Scene>> m_sceneCache; ///< 场景缓存,按名字缓存场景以便切换时复用
|
||||
std::unordered_map<std::string, std::function<std::shared_ptr<Scene>()>> m_sceneFactories; ///< 场景工厂映射,按名字动态创建场景实例
|
||||
|
||||
|
||||
/**
|
||||
* @brief 获取窗口尺寸的辅助方法
|
||||
* @return 返回 {宽度, 高度},如果获取失败则返回默认值 {1600, 900}
|
||||
|
||||
@@ -33,7 +33,7 @@ void GameScene::update() {
|
||||
}
|
||||
|
||||
void GameScene::render() {
|
||||
beginFrame();
|
||||
|
||||
m_boardRenderer->drawBackground();
|
||||
m_boardRenderer->drawBoard();
|
||||
|
||||
@@ -41,7 +41,7 @@ void GameScene::render() {
|
||||
m_boardRenderer->drawMovementRange();
|
||||
m_boardRenderer->renderBlackOverlay();
|
||||
m_uiRenderer->renderUI(m_gameUIManager->getUIRenderData());
|
||||
endFrame();
|
||||
|
||||
}
|
||||
|
||||
void GameScene::handleClick(float screenX, float screenY) {
|
||||
|
||||
@@ -31,11 +31,11 @@ void MainMenuScene::update() {
|
||||
}
|
||||
|
||||
void MainMenuScene::render() {
|
||||
beginFrame();
|
||||
|
||||
// 渲染场景内容
|
||||
const UIRenderData& uiRenderData = m_mainMenuUIManager->getUIRenderData();
|
||||
m_uiRenderer->renderUI(uiRenderData);
|
||||
endFrame();
|
||||
|
||||
}
|
||||
|
||||
void MainMenuScene::handleClick(float x, float y) {
|
||||
|
||||
@@ -7,6 +7,7 @@ struct GameConfig {
|
||||
int windowHeight = 900;
|
||||
std::string windowTitle = "孢子棋";
|
||||
bool vsync = true;
|
||||
int uiScale = 2;
|
||||
} ;
|
||||
|
||||
// 获取棋盘渲染区域信息(用于坐标转换)
|
||||
|
||||
Reference in New Issue
Block a user