99 lines
2.3 KiB
C++
99 lines
2.3 KiB
C++
#include <cstdio>
|
|
#include <extra2d.h>
|
|
#include <renderer/rhi_module.h>
|
|
|
|
using namespace extra2d;
|
|
|
|
class ImageDisplayScene : public Scene {
|
|
public:
|
|
void onEnter() override {
|
|
Scene::onEnter();
|
|
createCamera();
|
|
createImageSprite();
|
|
}
|
|
|
|
void update(float dt) override {
|
|
Scene::update(dt);
|
|
if (textureLoaded_) {
|
|
return;
|
|
}
|
|
auto *rhiModule = RHIModule::get();
|
|
if (!rhiModule || !rhiModule->getDevice()) {
|
|
return;
|
|
}
|
|
auto assets = getAssets();
|
|
if (!assets || !spriteRenderer_) {
|
|
return;
|
|
}
|
|
auto texture = assets->load<Texture>("assets/test.png");
|
|
if (texture.isValid()) {
|
|
spriteRenderer_->setTexture(texture);
|
|
printf("图片加载成功: assets/test.png\n");
|
|
} else {
|
|
printf("图片加载失败: assets/test.png\n");
|
|
}
|
|
textureLoaded_ = true;
|
|
}
|
|
|
|
private:
|
|
void createCamera() {
|
|
auto cameraNode = makePtr<Node>();
|
|
cameraNode->setName("MainCamera");
|
|
cameraNode->setPosition(0.0f, 0.0f);
|
|
|
|
auto camera = makePtr<CameraComponent>();
|
|
camera->setOrtho(0.0f, 1280.0f, 720.0f, 0.0f, -1.0f, 1.0f);
|
|
cameraNode->addComponent(camera);
|
|
setMainCamera(camera);
|
|
addChild(cameraNode);
|
|
}
|
|
|
|
void createImageSprite() {
|
|
auto spriteNode = makePtr<Node>();
|
|
spriteNode->setName("ImageSprite");
|
|
spriteNode->setPosition(640.0f, 360.0f);
|
|
// spriteNode->setSize(384.0f, 384.0f);
|
|
spriteNode->setAnchor(0.5f, 0.5f);
|
|
|
|
spriteRenderer_ = makePtr<SpriteRenderer>();
|
|
// spriteRenderer_->setColor(Color::White);
|
|
spriteNode->addComponent(spriteRenderer_);
|
|
addChild(spriteNode);
|
|
}
|
|
|
|
Ptr<SpriteRenderer> spriteRenderer_;
|
|
bool textureLoaded_ = false;
|
|
};
|
|
|
|
int main(int argc, char **argv) {
|
|
auto app = Application::create();
|
|
|
|
AppConfig config;
|
|
config.title = "Image Display Demo - Extra2D";
|
|
config.width = 1280;
|
|
config.height = 720;
|
|
|
|
if (!app->init(config)) {
|
|
printf("应用程序初始化失败!\n");
|
|
return -1;
|
|
}
|
|
|
|
SceneModule *sceneModule = app->getModule<SceneModule>();
|
|
if (!sceneModule) {
|
|
printf("获取场景模块失败!\n");
|
|
return -1;
|
|
}
|
|
|
|
Director *director = sceneModule->getDirector();
|
|
if (!director) {
|
|
printf("获取导演器失败!\n");
|
|
return -1;
|
|
}
|
|
|
|
auto scene = makePtr<ImageDisplayScene>();
|
|
director->runScene(scene);
|
|
|
|
app->run();
|
|
return 0;
|
|
}
|