mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +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 minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
|
||||||
float scaleX = self.scaleX;
|
float scaleX = self.scaleX;
|
||||||
float scaleY = self.scaleY;
|
float scaleY = self.scaleY;
|
||||||
ccV3F_C4B_T2F_Quad quad;
|
float vertices[8];
|
||||||
for (int i = 0; i < _skeleton->slotCount; ++i) {
|
for (int i = 0; i < _skeleton->slotCount; ++i) {
|
||||||
Slot* slot = _skeleton->slots[i];
|
Slot* slot = _skeleton->slots[i];
|
||||||
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
|
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
|
||||||
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
|
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
|
||||||
RegionAttachment_updateQuad(attachment, slot, &quad);
|
RegionAttachment_computeVertices(attachment, slot, vertices);
|
||||||
minX = fmin(minX, quad.bl.vertices.x * scaleX);
|
minX = fmin(minX, vertices[VERTEX_X1] * scaleX);
|
||||||
minY = fmin(minY, quad.bl.vertices.y * scaleY);
|
minY = fmin(minY, vertices[VERTEX_Y1] * scaleY);
|
||||||
maxX = fmax(maxX, quad.bl.vertices.x * scaleX);
|
maxX = fmax(maxX, vertices[VERTEX_X1] * scaleX);
|
||||||
maxY = fmax(maxY, quad.bl.vertices.y * scaleY);
|
maxY = fmax(maxY, vertices[VERTEX_Y1] * scaleY);
|
||||||
minX = fmin(minX, quad.br.vertices.x * scaleX);
|
minX = fmin(minX, vertices[VERTEX_X4] * scaleX);
|
||||||
minY = fmin(minY, quad.br.vertices.y * scaleY);
|
minY = fmin(minY, vertices[VERTEX_Y4] * scaleY);
|
||||||
maxX = fmax(maxX, quad.br.vertices.x * scaleX);
|
maxX = fmax(maxX, vertices[VERTEX_X4] * scaleX);
|
||||||
maxY = fmax(maxY, quad.br.vertices.y * scaleY);
|
maxY = fmax(maxY, vertices[VERTEX_Y4] * scaleY);
|
||||||
minX = fmin(minX, quad.tl.vertices.x * scaleX);
|
minX = fmin(minX, vertices[VERTEX_X2] * scaleX);
|
||||||
minY = fmin(minY, quad.tl.vertices.y * scaleY);
|
minY = fmin(minY, vertices[VERTEX_Y2] * scaleY);
|
||||||
maxX = fmax(maxX, quad.tl.vertices.x * scaleX);
|
maxX = fmax(maxX, vertices[VERTEX_X2] * scaleX);
|
||||||
maxY = fmax(maxY, quad.tl.vertices.y * scaleY);
|
maxY = fmax(maxY, vertices[VERTEX_Y2] * scaleY);
|
||||||
minX = fmin(minX, quad.tr.vertices.x * scaleX);
|
minX = fmin(minX, vertices[VERTEX_X3] * scaleX);
|
||||||
minY = fmin(minY, quad.tr.vertices.y * scaleY);
|
minY = fmin(minY, vertices[VERTEX_Y3] * scaleY);
|
||||||
maxX = fmax(maxX, quad.tr.vertices.x * scaleX);
|
maxX = fmax(maxX, vertices[VERTEX_X3] * scaleX);
|
||||||
maxY = fmax(maxY, quad.tr.vertices.y * scaleY);
|
maxY = fmax(maxY, vertices[VERTEX_Y3] * scaleY);
|
||||||
}
|
}
|
||||||
minX = self.position.x + minX;
|
minX = self.position.x + minX;
|
||||||
minY = self.position.y + minY;
|
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 minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
|
||||||
float scaleX = getScaleX();
|
float scaleX = getScaleX();
|
||||||
float scaleY = getScaleY();
|
float scaleY = getScaleY();
|
||||||
ccV3F_C4B_T2F_Quad quad;
|
float vertices[8];
|
||||||
for (int i = 0; i < skeleton->slotCount; ++i) {
|
for (int i = 0; i < skeleton->slotCount; ++i) {
|
||||||
Slot* slot = skeleton->slots[i];
|
Slot* slot = skeleton->slots[i];
|
||||||
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
|
if (!slot->attachment || slot->attachment->type != ATTACHMENT_REGION) continue;
|
||||||
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
|
RegionAttachment* attachment = (RegionAttachment*)slot->attachment;
|
||||||
RegionAttachment_updateQuad(attachment, slot, &quad);
|
RegionAttachment_computeVertices(attachment, slot, vertices);
|
||||||
minX = min(minX, quad.bl.vertices.x * scaleX);
|
minX = min(minX, vertices[VERTEX_X1] * scaleX);
|
||||||
minY = min(minY, quad.bl.vertices.y * scaleY);
|
minY = min(minY, vertices[VERTEX_Y1] * scaleY);
|
||||||
maxX = max(maxX, quad.bl.vertices.x * scaleX);
|
maxX = max(maxX, vertices[VERTEX_X1] * scaleX);
|
||||||
maxY = max(maxY, quad.bl.vertices.y * scaleY);
|
maxY = max(maxY, vertices[VERTEX_Y1] * scaleY);
|
||||||
minX = min(minX, quad.br.vertices.x * scaleX);
|
minX = min(minX, vertices[VERTEX_X4] * scaleX);
|
||||||
minY = min(minY, quad.br.vertices.y * scaleY);
|
minY = min(minY, vertices[VERTEX_Y4] * scaleY);
|
||||||
maxX = max(maxX, quad.br.vertices.x * scaleX);
|
maxX = max(maxX, vertices[VERTEX_X4] * scaleX);
|
||||||
maxY = max(maxY, quad.br.vertices.y * scaleY);
|
maxY = max(maxY, vertices[VERTEX_Y4] * scaleY);
|
||||||
minX = min(minX, quad.tl.vertices.x * scaleX);
|
minX = min(minX, vertices[VERTEX_X2] * scaleX);
|
||||||
minY = min(minY, quad.tl.vertices.y * scaleY);
|
minY = min(minY, vertices[VERTEX_Y2] * scaleY);
|
||||||
maxX = max(maxX, quad.tl.vertices.x * scaleX);
|
maxX = max(maxX, vertices[VERTEX_X2] * scaleX);
|
||||||
maxY = max(maxY, quad.tl.vertices.y * scaleY);
|
maxY = max(maxY, vertices[VERTEX_Y2] * scaleY);
|
||||||
minX = min(minX, quad.tr.vertices.x * scaleX);
|
minX = min(minX, vertices[VERTEX_X3] * scaleX);
|
||||||
minY = min(minY, quad.tr.vertices.y * scaleY);
|
minY = min(minY, vertices[VERTEX_Y3] * scaleY);
|
||||||
maxX = max(maxX, quad.tr.vertices.x * scaleX);
|
maxX = max(maxX, vertices[VERTEX_X3] * scaleX);
|
||||||
maxY = max(maxY, quad.tr.vertices.y * scaleY);
|
maxY = max(maxY, vertices[VERTEX_Y3] * scaleY);
|
||||||
}
|
}
|
||||||
CCPoint position = getPosition();
|
CCPoint position = getPosition();
|
||||||
return CCRectMake(position.x + minX, position.y + minY, maxX - minX, maxY - minY);
|
return CCRectMake(position.x + minX, position.y + minY, maxX - minX, maxY - minY);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user