feat: 添加获取渲染边界的功能,计算所有精灵图的覆盖区域,确保返回的边界值有效且最小化。
This commit is contained in:
parent
c492839691
commit
ba9126d54a
@ -587,6 +587,67 @@ func (b *NamedSpriteBoard) RenderToImage() *image.RGBA {
|
|||||||
return img
|
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 将精灵板渲染为图像并保存到文件
|
// SaveToPng 将精灵板渲染为图像并保存到文件
|
||||||
func (b *NamedSpriteBoard) SaveToPng(filename string) error {
|
func (b *NamedSpriteBoard) SaveToPng(filename string) error {
|
||||||
// 渲染图像
|
// 渲染图像
|
||||||
|
Loading…
x
Reference in New Issue
Block a user