refactor(示例): 将纹理加载逻辑从事件监听移至更新循环

简化图像显示示例的纹理加载机制,移除对事件系统的依赖。
改为在每帧更新时检查纹理是否已加载,避免在渲染事件中设置纹理,
使代码更直观并减少不必要的监听器管理。
This commit is contained in:
ChestnutYueyue 2026-03-16 22:22:43 +08:00
parent 3686ba35c1
commit dafcf9bfef
1 changed files with 8 additions and 7 deletions

View File

@ -1,5 +1,4 @@
#include <cstdio> #include <cstdio>
#include <event/events.h>
#include <extra2d.h> #include <extra2d.h>
#include <renderer/rhi_module.h> #include <renderer/rhi_module.h>
@ -11,16 +10,18 @@ public:
Scene::onEnter(); Scene::onEnter();
createCamera(); createCamera();
createImageSprite(); createImageSprite();
onRenderBeginListener_.bind([this]() { trySetupTexture(); });
} }
void onExit() override { void update(float dt) override {
onRenderBeginListener_.reset(); Scene::update(dt);
Scene::onExit(); trySetupTexture();
} }
private: private:
void trySetupTexture() { void trySetupTexture() {
if (textureLoaded_) {
return;
}
auto *rhiModule = RHIModule::get(); auto *rhiModule = RHIModule::get();
if (!rhiModule || !rhiModule->getDevice()) { if (!rhiModule || !rhiModule->getDevice()) {
return; return;
@ -32,7 +33,7 @@ private:
auto texture = assets->load<Texture>("assets/test.png"); auto texture = assets->load<Texture>("assets/test.png");
if (texture.isValid()) { if (texture.isValid()) {
spriteRenderer_->setTexture(texture); spriteRenderer_->setTexture(texture);
onRenderBeginListener_.reset(); textureLoaded_ = true;
} }
} }
void createCamera() { void createCamera() {
@ -56,7 +57,7 @@ private:
addChild(spriteNode); addChild(spriteNode);
} }
Ptr<SpriteRenderer> spriteRenderer_; Ptr<SpriteRenderer> spriteRenderer_;
events::OnRenderBegin::Listener onRenderBeginListener_; bool textureLoaded_ = false;
}; };
int main(int argc, char **argv) { int main(int argc, char **argv) {