feat: 添加获取渲染边界的功能,计算所有精灵图的覆盖区域,确保返回的边界值有效且最小化。
This commit is contained in:
parent
c492839691
commit
ba9126d54a
@ -587,6 +587,67 @@ func (b *NamedSpriteBoard) RenderToImage() *image.RGBA {
|
||||
return img
|
||||
}
|
||||
|
||||
func (b *NamedSpriteBoard) GetRenderBounds() (minX, minY, maxX, maxY int) {
|
||||
// 计算所有精灵图覆盖的最大区域
|
||||
|
||||
// 初始化为最大/最小可能值,以便于后续比较
|
||||
initialized := false
|
||||
|
||||
// 遍历所有精灵计算边界
|
||||
currentGroup := b.indexHead
|
||||
for currentGroup != nil {
|
||||
currentNode := currentGroup.Head
|
||||
for currentNode != nil {
|
||||
sprite := currentNode.Sprite
|
||||
if sprite.Image != nil {
|
||||
srcBounds := sprite.Image.Bounds()
|
||||
spriteMinX := sprite.Position.X
|
||||
spriteMinY := sprite.Position.Y
|
||||
spriteMaxX := sprite.Position.X + srcBounds.Dx()
|
||||
spriteMaxY := sprite.Position.Y + srcBounds.Dy()
|
||||
|
||||
// 首次初始化边界值或更新边界
|
||||
if !initialized {
|
||||
minX, minY = spriteMinX, spriteMinY
|
||||
maxX, maxY = spriteMaxX, spriteMaxY
|
||||
initialized = true
|
||||
} else {
|
||||
// 更新边界值
|
||||
if spriteMinX < minX {
|
||||
minX = spriteMinX
|
||||
}
|
||||
if spriteMinY < minY {
|
||||
minY = spriteMinY
|
||||
}
|
||||
if spriteMaxX > maxX {
|
||||
maxX = spriteMaxX
|
||||
}
|
||||
if spriteMaxY > maxY {
|
||||
maxY = spriteMaxY
|
||||
}
|
||||
}
|
||||
}
|
||||
currentNode = currentNode.Next
|
||||
}
|
||||
currentGroup = currentGroup.Next
|
||||
}
|
||||
|
||||
// 如果没有精灵图,则使用默认大小
|
||||
if !initialized {
|
||||
minX, minY = 0, 0
|
||||
maxX, maxY = 1, 1
|
||||
}
|
||||
|
||||
// 确保有最小尺寸
|
||||
if maxX <= minX {
|
||||
maxX = minX + 1
|
||||
}
|
||||
if maxY <= minY {
|
||||
maxY = minY + 1
|
||||
}
|
||||
return minX, minY, maxX, maxY
|
||||
}
|
||||
|
||||
// SaveToPng 将精灵板渲染为图像并保存到文件
|
||||
func (b *NamedSpriteBoard) SaveToPng(filename string) error {
|
||||
// 渲染图像
|
||||
|
Loading…
x
Reference in New Issue
Block a user