#include #include #include #include namespace extra2d { Scene::Scene() { defaultCamera_ = makePtr(); } void Scene::setCamera(Ptr camera) { camera_ = camera; } void Scene::setViewportSize(float width, float height) { viewportSize_ = Size(width, height); if (defaultCamera_) { defaultCamera_->setViewport(0, width, height, 0); } else if (camera_) { camera_->setViewport(0, width, height, 0); } } void Scene::setViewportSize(const Size &size) { setViewportSize(size.width, size.height); } void Scene::renderScene(Renderer &renderer) { if (!visible()) return; // Begin frame with background color renderer.beginFrame(backgroundColor_); renderContent(renderer); renderer.endFrame(); } void Scene::renderContent(Renderer &renderer) { if (!visible()) return; // 在渲染前批量更新所有节点的世界变换 batchUpdateTransforms(); Camera *activeCam = getActiveCamera(); if (activeCam) { renderer.setViewProjection(activeCam->getViewProjectionMatrix()); } renderer.beginSpriteBatch(); render(renderer); renderer.endSpriteBatch(); } void Scene::updateScene(float dt) { if (!paused_) { update(dt); } } void Scene::onEnter() { Node::onEnter(); } void Scene::onExit() { Node::onExit(); } void Scene::collectRenderCommands(std::vector &commands, int parentZOrder) { if (!visible()) return; // 从场景的子节点开始收集渲染命令 Node::collectRenderCommands(commands, parentZOrder); } Ptr Scene::create() { return makePtr(); } } // namespace extra2d