diff --git a/examples/image_display_demo/main.cpp b/examples/image_display_demo/main.cpp index ff96804..3117abf 100644 --- a/examples/image_display_demo/main.cpp +++ b/examples/image_display_demo/main.cpp @@ -14,9 +14,6 @@ public: void update(float dt) override { Scene::update(dt); - if (textureLoaded_) { - return; - } auto *rhiModule = RHIModule::get(); if (!rhiModule || !rhiModule->getDevice()) { return; @@ -28,11 +25,7 @@ public: auto texture = assets->load("assets/test.png"); if (texture.isValid()) { spriteRenderer_->setTexture(texture); - printf("图片加载成功: assets/test.png\n"); - } else { - printf("图片加载失败: assets/test.png\n"); } - textureLoaded_ = true; } private: @@ -40,7 +33,6 @@ private: auto cameraNode = makePtr(); cameraNode->setName("MainCamera"); cameraNode->setPosition(0.0f, 0.0f); - auto camera = makePtr(); camera->setOrtho(0.0f, 1280.0f, 720.0f, 0.0f, -1.0f, 1.0f); cameraNode->addComponent(camera); @@ -52,17 +44,12 @@ private: auto spriteNode = makePtr(); spriteNode->setName("ImageSprite"); spriteNode->setPosition(640.0f, 360.0f); - // spriteNode->setSize(384.0f, 384.0f); spriteNode->setAnchor(0.5f, 0.5f); - spriteRenderer_ = makePtr(); - // spriteRenderer_->setColor(Color::White); spriteNode->addComponent(spriteRenderer_); addChild(spriteNode); } - Ptr spriteRenderer_; - bool textureLoaded_ = false; }; int main(int argc, char **argv) { diff --git a/src/scene/components/sprite_renderer.cpp b/src/scene/components/sprite_renderer.cpp index 3ec7f65..a1a93a9 100644 --- a/src/scene/components/sprite_renderer.cpp +++ b/src/scene/components/sprite_renderer.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -9,13 +10,51 @@ namespace extra2d { SpriteRenderer::SpriteRenderer() { } -void SpriteRenderer::onAttach(Node *owner) { Component::onAttach(owner); } +void SpriteRenderer::onAttach(Node *owner) { + Component::onAttach(owner); + if (!texture_.isValid() || !owner_) { + return; + } + Vec2 nodeSize = owner_->getSize(); + if (nodeSize.x != 100.0f || nodeSize.y != 100.0f) { + return; + } + auto *assets = getAssets(); + if (!assets) { + return; + } + Texture *tex = assets->get(texture_); + if (!tex) { + return; + } + owner_->setSize(static_cast(tex->getWidth()), + static_cast(tex->getHeight())); +} void SpriteRenderer::setMaterial(Handle material) { material_ = material; } -void SpriteRenderer::setTexture(Handle texture) { texture_ = texture; } +void SpriteRenderer::setTexture(Handle texture) { + texture_ = texture; + if (!owner_ || !texture_.isValid()) { + return; + } + Vec2 nodeSize = owner_->getSize(); + if (nodeSize.x != 100.0f || nodeSize.y != 100.0f) { + return; + } + auto *assets = getAssets(); + if (!assets) { + return; + } + Texture *tex = assets->get(texture_); + if (!tex) { + return; + } + owner_->setSize(static_cast(tex->getWidth()), + static_cast(tex->getHeight())); +} void SpriteRenderer::setColor(const Color &color) { color_ = color; }