mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-13 18:48:44 +08:00
Slightly better boundingBox.
This commit is contained in:
parent
567c7110b1
commit
bcc0b60050
@ -208,28 +208,28 @@
|
||||
float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
|
||||
float scaleX = self.scaleX;
|
||||
float scaleY = self.scaleY;
|
||||
ccV3F_C4B_T2F_Quad quad;
|
||||
float vertices[8];
|
||||
for (int i = 0; i < _skeleton->slotCount; ++i) {
|
||||
Slot* slot = _skeleton->slots[i];
|
||||
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
|
||||
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
|
||||
RegionAttachment_updateQuad(attachment, slot, &quad);
|
||||
minX = fmin(minX, quad.bl.vertices.x * scaleX);
|
||||
minY = fmin(minY, quad.bl.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, quad.bl.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, quad.bl.vertices.y * scaleY);
|
||||
minX = fmin(minX, quad.br.vertices.x * scaleX);
|
||||
minY = fmin(minY, quad.br.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, quad.br.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, quad.br.vertices.y * scaleY);
|
||||
minX = fmin(minX, quad.tl.vertices.x * scaleX);
|
||||
minY = fmin(minY, quad.tl.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, quad.tl.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, quad.tl.vertices.y * scaleY);
|
||||
minX = fmin(minX, quad.tr.vertices.x * scaleX);
|
||||
minY = fmin(minY, quad.tr.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, quad.tr.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, quad.tr.vertices.y * scaleY);
|
||||
RegionAttachment_computeVertices(attachment, slot, vertices);
|
||||
minX = fmin(minX, vertices[VERTEX_X1] * scaleX);
|
||||
minY = fmin(minY, vertices[VERTEX_Y1] * scaleY);
|
||||
maxX = fmax(maxX, vertices[VERTEX_X1] * scaleX);
|
||||
maxY = fmax(maxY, vertices[VERTEX_Y1] * scaleY);
|
||||
minX = fmin(minX, vertices[VERTEX_X4] * scaleX);
|
||||
minY = fmin(minY, vertices[VERTEX_Y4] * scaleY);
|
||||
maxX = fmax(maxX, vertices[VERTEX_X4] * scaleX);
|
||||
maxY = fmax(maxY, vertices[VERTEX_Y4] * scaleY);
|
||||
minX = fmin(minX, vertices[VERTEX_X2] * scaleX);
|
||||
minY = fmin(minY, vertices[VERTEX_Y2] * scaleY);
|
||||
maxX = fmax(maxX, vertices[VERTEX_X2] * scaleX);
|
||||
maxY = fmax(maxY, vertices[VERTEX_Y2] * scaleY);
|
||||
minX = fmin(minX, vertices[VERTEX_X3] * scaleX);
|
||||
minY = fmin(minY, vertices[VERTEX_Y3] * scaleY);
|
||||
maxX = fmax(maxX, vertices[VERTEX_X3] * scaleX);
|
||||
maxY = fmax(maxY, vertices[VERTEX_Y3] * scaleY);
|
||||
}
|
||||
minX = self.position.x + minX;
|
||||
minY = self.position.y + minY;
|
||||
|
||||
@ -200,28 +200,28 @@ CCRect CCSkeleton::boundingBox () {
|
||||
float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
|
||||
float scaleX = getScaleX();
|
||||
float scaleY = getScaleY();
|
||||
ccV3F_C4B_T2F_Quad quad;
|
||||
float vertices[8];
|
||||
for (int i = 0; i < skeleton->slotCount; ++i) {
|
||||
Slot* slot = skeleton->slots[i];
|
||||
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
|
||||
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
|
||||
RegionAttachment_updateQuad(attachment, slot, &quad);
|
||||
minX = min(minX, quad.bl.vertices.x * scaleX);
|
||||
minY = min(minY, quad.bl.vertices.y * scaleY);
|
||||
maxX = max(maxX, quad.bl.vertices.x * scaleX);
|
||||
maxY = max(maxY, quad.bl.vertices.y * scaleY);
|
||||
minX = min(minX, quad.br.vertices.x * scaleX);
|
||||
minY = min(minY, quad.br.vertices.y * scaleY);
|
||||
maxX = max(maxX, quad.br.vertices.x * scaleX);
|
||||
maxY = max(maxY, quad.br.vertices.y * scaleY);
|
||||
minX = min(minX, quad.tl.vertices.x * scaleX);
|
||||
minY = min(minY, quad.tl.vertices.y * scaleY);
|
||||
maxX = max(maxX, quad.tl.vertices.x * scaleX);
|
||||
maxY = max(maxY, quad.tl.vertices.y * scaleY);
|
||||
minX = min(minX, quad.tr.vertices.x * scaleX);
|
||||
minY = min(minY, quad.tr.vertices.y * scaleY);
|
||||
maxX = max(maxX, quad.tr.vertices.x * scaleX);
|
||||
maxY = max(maxY, quad.tr.vertices.y * scaleY);
|
||||
RegionAttachment_computeVertices(attachment, slot, vertices);
|
||||
minX = min(minX, vertices[VERTEX_X1] * scaleX);
|
||||
minY = min(minY, vertices[VERTEX_Y1] * scaleY);
|
||||
maxX = max(maxX, vertices[VERTEX_X1] * scaleX);
|
||||
maxY = max(maxY, vertices[VERTEX_Y1] * scaleY);
|
||||
minX = min(minX, vertices[VERTEX_X4] * scaleX);
|
||||
minY = min(minY, vertices[VERTEX_Y4] * scaleY);
|
||||
maxX = max(maxX, vertices[VERTEX_X4] * scaleX);
|
||||
maxY = max(maxY, vertices[VERTEX_Y4] * scaleY);
|
||||
minX = min(minX, vertices[VERTEX_X2] * scaleX);
|
||||
minY = min(minY, vertices[VERTEX_Y2] * scaleY);
|
||||
maxX = max(maxX, vertices[VERTEX_X2] * scaleX);
|
||||
maxY = max(maxY, vertices[VERTEX_Y2] * scaleY);
|
||||
minX = min(minX, vertices[VERTEX_X3] * scaleX);
|
||||
minY = min(minY, vertices[VERTEX_Y3] * scaleY);
|
||||
maxX = max(maxX, vertices[VERTEX_X3] * scaleX);
|
||||
maxY = max(maxY, vertices[VERTEX_Y3] * scaleY);
|
||||
}
|
||||
CCPoint position = getPosition();
|
||||
return CCRectMake(position.x + minX, position.y + minY, maxX - minX, maxY - minY);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user