feat(sprite_renderer): 自动调整节点尺寸以匹配纹理大小
在 SpriteRenderer 的 onAttach 和 setTexture 方法中添加逻辑,当节点尺寸为默认值 (100x100) 且纹理有效时,自动将节点尺寸设置为纹理的宽高。同时移除示例中多余的纹理加载状态检查和调试输出,简化代码逻辑。
This commit is contained in:
parent
dcb3162525
commit
3c0743eb64
|
|
@ -14,9 +14,6 @@ public:
|
||||||
|
|
||||||
void update(float dt) override {
|
void update(float dt) override {
|
||||||
Scene::update(dt);
|
Scene::update(dt);
|
||||||
if (textureLoaded_) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
auto *rhiModule = RHIModule::get();
|
auto *rhiModule = RHIModule::get();
|
||||||
if (!rhiModule || !rhiModule->getDevice()) {
|
if (!rhiModule || !rhiModule->getDevice()) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -28,11 +25,7 @@ public:
|
||||||
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);
|
||||||
printf("图片加载成功: assets/test.png\n");
|
|
||||||
} else {
|
|
||||||
printf("图片加载失败: assets/test.png\n");
|
|
||||||
}
|
}
|
||||||
textureLoaded_ = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -40,7 +33,6 @@ private:
|
||||||
auto cameraNode = makePtr<Node>();
|
auto cameraNode = makePtr<Node>();
|
||||||
cameraNode->setName("MainCamera");
|
cameraNode->setName("MainCamera");
|
||||||
cameraNode->setPosition(0.0f, 0.0f);
|
cameraNode->setPosition(0.0f, 0.0f);
|
||||||
|
|
||||||
auto camera = makePtr<CameraComponent>();
|
auto camera = makePtr<CameraComponent>();
|
||||||
camera->setOrtho(0.0f, 1280.0f, 720.0f, 0.0f, -1.0f, 1.0f);
|
camera->setOrtho(0.0f, 1280.0f, 720.0f, 0.0f, -1.0f, 1.0f);
|
||||||
cameraNode->addComponent(camera);
|
cameraNode->addComponent(camera);
|
||||||
|
|
@ -52,17 +44,12 @@ private:
|
||||||
auto spriteNode = makePtr<Node>();
|
auto spriteNode = makePtr<Node>();
|
||||||
spriteNode->setName("ImageSprite");
|
spriteNode->setName("ImageSprite");
|
||||||
spriteNode->setPosition(640.0f, 360.0f);
|
spriteNode->setPosition(640.0f, 360.0f);
|
||||||
// spriteNode->setSize(384.0f, 384.0f);
|
|
||||||
spriteNode->setAnchor(0.5f, 0.5f);
|
spriteNode->setAnchor(0.5f, 0.5f);
|
||||||
|
|
||||||
spriteRenderer_ = makePtr<SpriteRenderer>();
|
spriteRenderer_ = makePtr<SpriteRenderer>();
|
||||||
// spriteRenderer_->setColor(Color::White);
|
|
||||||
spriteNode->addComponent(spriteRenderer_);
|
spriteNode->addComponent(spriteRenderer_);
|
||||||
addChild(spriteNode);
|
addChild(spriteNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ptr<SpriteRenderer> spriteRenderer_;
|
Ptr<SpriteRenderer> spriteRenderer_;
|
||||||
bool textureLoaded_ = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#include <assets/assets_module.h>
|
#include <assets/assets_module.h>
|
||||||
#include <event/events.h>
|
#include <event/events.h>
|
||||||
|
#include <renderer/texture.h>
|
||||||
#include <scene/components/sprite_renderer.h>
|
#include <scene/components/sprite_renderer.h>
|
||||||
#include <scene/node.h>
|
#include <scene/node.h>
|
||||||
#include <utils/logger.h>
|
#include <utils/logger.h>
|
||||||
|
|
@ -9,13 +10,51 @@ namespace extra2d {
|
||||||
SpriteRenderer::SpriteRenderer() {
|
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<float>(tex->getWidth()),
|
||||||
|
static_cast<float>(tex->getHeight()));
|
||||||
|
}
|
||||||
|
|
||||||
void SpriteRenderer::setMaterial(Handle<Material> material) {
|
void SpriteRenderer::setMaterial(Handle<Material> material) {
|
||||||
material_ = material;
|
material_ = material;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteRenderer::setTexture(Handle<Texture> texture) { texture_ = texture; }
|
void SpriteRenderer::setTexture(Handle<Texture> 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<float>(tex->getWidth()),
|
||||||
|
static_cast<float>(tex->getHeight()));
|
||||||
|
}
|
||||||
|
|
||||||
void SpriteRenderer::setColor(const Color &color) { color_ = color; }
|
void SpriteRenderer::setColor(const Color &color) { color_ = color; }
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue