#include "AnimationManager.h" #include "EngineCore/Game.h" AnimationManager::AnimationManager() { } void AnimationManager::PreRender() { Actor::PreRender(); // 标记是否是第一个子对象(用于初始化min/max值) bool isFirst = true; float minX = 0.0f, minY = 0.0f; // 所有子对象的最小X、Y坐标 float maxX = 0.0f, maxY = 0.0f; // 所有子对象的最大X、Y坐标(右下角) RefPtr child = m_BaseNodes.GetFirst(); while (child) { // 转换为Animation对象 Animation *ani = static_cast(child.Get()); float width = ani->CurrentFrame->_RenderGuidanceInfo.rect.w; float height = ani->CurrentFrame->_RenderGuidanceInfo.rect.h; float x = ani->CurrentFrame->_RenderGuidanceInfo.rect.x; float y = ani->CurrentFrame->_RenderGuidanceInfo.rect.y; // 计算子对象的右下角坐标(左上角 + 宽高) float currentMaxX = x + width; float currentMaxY = y + height; // 初始化或更新min/max值 if (isFirst) { minX = x; minY = y; maxX = currentMaxX; maxY = currentMaxY; isFirst = false; } else { minX = std::min(minX, x); minY = std::min(minY, y); maxX = std::max(maxX, currentMaxX); maxY = std::max(maxY, currentMaxY); } child = child->GetNext(); } // 计算最终的包围盒矩形 if (!isFirst) // 至少有一个子对象时才计算 { m_RenderRect.x = minX; // 矩形左上角X m_RenderRect.y = minY; // 矩形左上角Y m_RenderRect.w = maxX - minX; // 矩形宽度(右下角X - 左上角X) m_RenderRect.h = maxY - minY; // 矩形高度(右下角Y - 左上角Y) } } void AnimationManager::Render() { Actor::Render(); } void AnimationManager::AddAnimation(RefPtr ani) { this->AddChild(ani); } void AnimationManager::Clear() { this->RemoveAllChild(); }