152 lines
3.8 KiB
C++
152 lines
3.8 KiB
C++
#include <easy2d/easy2d.h>
|
||
#include <iostream>
|
||
|
||
// Nintendo Switch 平台支持
|
||
#ifdef __SWITCH__
|
||
#include <switch.h>
|
||
#endif
|
||
|
||
using namespace easy2d;
|
||
|
||
// 加载系统字体的辅助函数
|
||
easy2d::Ptr<easy2d::FontAtlas> loadSystemFont(int size) {
|
||
auto &resources = Application::instance().resources();
|
||
easy2d::Ptr<easy2d::FontAtlas> font = nullptr;
|
||
|
||
#ifdef __SWITCH__
|
||
// Nintendo Switch 系统字体路径
|
||
const char *switchFontPaths[] = {
|
||
"romfs:/font.TTF", // RomFS 中的字体(注意大小写)
|
||
"romfs:/font.ttf", // 小写备选
|
||
"sdmc:/switch/pushbox/font.ttf", // SD 卡字体
|
||
"/switch/pushbox/font.ttf", // 绝对路径
|
||
};
|
||
|
||
for (auto *path : switchFontPaths) {
|
||
font = resources.loadFont(path, size);
|
||
if (font) {
|
||
E2D_LOG_INFO("Loaded Switch font: %s", path);
|
||
return font;
|
||
}
|
||
}
|
||
#else
|
||
// Windows 系统字体
|
||
const char *winFontPaths[] = {
|
||
"C:/Windows/Fonts/arial.ttf",
|
||
"C:/Windows/Fonts/segoeui.ttf",
|
||
"C:/Windows/Fonts/simsun.ttc",
|
||
"C:/Windows/Fonts/simhei.ttf",
|
||
};
|
||
|
||
for (auto *path : winFontPaths) {
|
||
font = resources.loadFont(path, size);
|
||
if (font) {
|
||
E2D_LOG_INFO("Loaded Windows font: %s", path);
|
||
return font;
|
||
}
|
||
}
|
||
#endif
|
||
|
||
E2D_LOG_WARN("Failed to load any system font!");
|
||
return nullptr;
|
||
}
|
||
|
||
class SimpleScene : public Scene {
|
||
public:
|
||
SimpleScene() {
|
||
// 设置背景颜色为深蓝色 (使用 RGB 值)
|
||
setBackgroundColor(Color(0.0f, 0.0f, 0.5f, 1.0f));
|
||
|
||
// 创建一个红色填充矩形(用于测试渲染)
|
||
// 矩形在屏幕左上角,大小 200x200
|
||
Rect rectBounds(50, 50, 200, 200); // x, y, width, height
|
||
auto rect = ShapeNode::createFilledRect(rectBounds, Colors::Red);
|
||
addChild(rect);
|
||
|
||
// 创建一个黄色圆形
|
||
auto circle = ShapeNode::createFilledCircle(Vec2(400, 300), 100, Colors::Yellow);
|
||
addChild(circle);
|
||
|
||
// 创建一个绿色三角形
|
||
auto triangle = ShapeNode::createFilledTriangle(
|
||
Vec2(700, 200), Vec2(600, 400), Vec2(800, 400), Colors::Green);
|
||
addChild(triangle);
|
||
|
||
// 创建一个简单的标签
|
||
auto label = Text::create("Hello Switch!");
|
||
|
||
// 加载系统字体
|
||
auto font = loadSystemFont(48);
|
||
if (font) {
|
||
label->setFont(font);
|
||
E2D_LOG_INFO("Font loaded successfully!");
|
||
} else {
|
||
E2D_LOG_WARN("Font loading failed!");
|
||
}
|
||
|
||
label->setTextColor(Colors::White);
|
||
label->setPosition(640, 100); // 屏幕上方居中
|
||
label->setAnchor(0.5f, 0.5f);
|
||
addChild(label);
|
||
|
||
E2D_LOG_INFO("SimpleScene created successfully!");
|
||
}
|
||
};
|
||
|
||
int main(int argc, char **argv) {
|
||
// Nintendo Switch 初始化
|
||
#ifdef __SWITCH__
|
||
Result rc;
|
||
|
||
// 初始化 nxlink 调试输出(可选)
|
||
rc = socketInitializeDefault();
|
||
if (R_FAILED(rc)) {
|
||
std::cout << "socketInitializeDefault failed" << std::endl;
|
||
} else {
|
||
nxlinkStdio();
|
||
std::cout << "nxlink initialized!" << std::endl;
|
||
}
|
||
|
||
// 初始化 RomFS(可选)
|
||
rc = romfsInit();
|
||
if (R_FAILED(rc)) {
|
||
std::cout << "romfsInit failed" << std::endl;
|
||
}
|
||
#endif
|
||
|
||
std::cout << "Starting Easy2D Simple Test..." << std::endl;
|
||
|
||
// 配置应用
|
||
AppConfig config;
|
||
config.title = "Switch Simple Test";
|
||
config.width = 1280;
|
||
config.height = 720;
|
||
|
||
// 初始化 Easy2D
|
||
if (!Application::instance().init(config)) {
|
||
std::cerr << "Failed to initialize Easy2D!" << std::endl;
|
||
return -1;
|
||
}
|
||
|
||
std::cout << "Easy2D initialized successfully!" << std::endl;
|
||
|
||
// 创建场景并设置到场景管理器
|
||
auto scene = std::make_shared<SimpleScene>();
|
||
Application::instance().scenes().pushScene(scene);
|
||
|
||
std::cout << "Scene started!" << std::endl;
|
||
|
||
// 运行主循环
|
||
Application::instance().run();
|
||
|
||
// 清理
|
||
Application::instance().shutdown();
|
||
|
||
#ifdef __SWITCH__
|
||
romfsExit();
|
||
socketExit();
|
||
#endif
|
||
|
||
return 0;
|
||
}
|