mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-06 15:24:55 +08:00
boundingBox takes into account scale and position. #32
This commit is contained in:
parent
a299f8b2a8
commit
3defbc4132
@ -351,28 +351,34 @@ char* _Util_readFile (const char* path, int* length) {
|
||||
|
||||
- (CGRect) boundingBox {
|
||||
float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
|
||||
float scaleX = self.scaleX;
|
||||
float scaleY = self.scaleY;
|
||||
for (int i = 0; i < skeleton->slotCount; ++i) {
|
||||
Slot* slot = skeleton->slots[i];
|
||||
Attachment* attachment = slot->attachment;
|
||||
if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
|
||||
Cocos2dRegionAttachment* regionAttachment = SUB_CAST(Cocos2dRegionAttachment, attachment);
|
||||
minX = fmin(minX, regionAttachment->quad.bl.vertices.x);
|
||||
minY = fmin(minY, regionAttachment->quad.bl.vertices.y);
|
||||
maxX = fmax(maxX, regionAttachment->quad.bl.vertices.x);
|
||||
maxY = fmax(maxY, regionAttachment->quad.bl.vertices.y);
|
||||
minX = fmin(minX, regionAttachment->quad.br.vertices.x);
|
||||
minY = fmin(minY, regionAttachment->quad.br.vertices.y);
|
||||
maxX = fmax(maxX, regionAttachment->quad.br.vertices.x);
|
||||
maxY = fmax(maxY, regionAttachment->quad.br.vertices.y);
|
||||
minX = fmin(minX, regionAttachment->quad.tl.vertices.x);
|
||||
minY = fmin(minY, regionAttachment->quad.tl.vertices.y);
|
||||
maxX = fmax(maxX, regionAttachment->quad.tl.vertices.x);
|
||||
maxY = fmax(maxY, regionAttachment->quad.tl.vertices.y);
|
||||
minX = fmin(minX, regionAttachment->quad.tr.vertices.x);
|
||||
minY = fmin(minY, regionAttachment->quad.tr.vertices.y);
|
||||
maxX = fmax(maxX, regionAttachment->quad.tr.vertices.x);
|
||||
maxY = fmax(maxY, regionAttachment->quad.tr.vertices.y);
|
||||
minX = fmin(minX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||
minY = fmin(minY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||
minX = fmin(minX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||
minY = fmin(minY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||
minX = fmin(minX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||
minY = fmin(minY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||
minX = fmin(minX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||
minY = fmin(minY, regionAttachment->quad.tr.vertices.y * scaleY);
|
||||
maxX = fmax(maxX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||
maxY = fmax(maxY, regionAttachment->quad.tr.vertices.y * scaleY);
|
||||
}
|
||||
minX = self.position.x + minX;
|
||||
minY = self.position.y + minY;
|
||||
maxX = self.position.x + maxX;
|
||||
maxY = self.position.y + maxY;
|
||||
return CGRectMake(minX, minY, maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
|
||||
@ -189,28 +189,35 @@ void CCSkeleton::draw () {
|
||||
|
||||
CCRect CCSkeleton::boundingBox () {
|
||||
float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN;
|
||||
float scaleX = getScaleX();
|
||||
float scaleY = getScaleY();
|
||||
for (int i = 0; i < skeleton->slotCount; ++i) {
|
||||
Slot* slot = skeleton->slots[i];
|
||||
Attachment* attachment = slot->attachment;
|
||||
if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
|
||||
Cocos2dxRegionAttachment* regionAttachment = SUB_CAST(Cocos2dxRegionAttachment, attachment);
|
||||
minX = min(minX, regionAttachment->quad.bl.vertices.x);
|
||||
minY = min(minY, regionAttachment->quad.bl.vertices.y);
|
||||
maxX = max(maxX, regionAttachment->quad.bl.vertices.x);
|
||||
maxY = max(maxY, regionAttachment->quad.bl.vertices.y);
|
||||
minX = min(minX, regionAttachment->quad.br.vertices.x);
|
||||
minY = min(minY, regionAttachment->quad.br.vertices.y);
|
||||
maxX = max(maxX, regionAttachment->quad.br.vertices.x);
|
||||
maxY = max(maxY, regionAttachment->quad.br.vertices.y);
|
||||
minX = min(minX, regionAttachment->quad.tl.vertices.x);
|
||||
minY = min(minY, regionAttachment->quad.tl.vertices.y);
|
||||
maxX = max(maxX, regionAttachment->quad.tl.vertices.x);
|
||||
maxY = max(maxY, regionAttachment->quad.tl.vertices.y);
|
||||
minX = min(minX, regionAttachment->quad.tr.vertices.x);
|
||||
minY = min(minY, regionAttachment->quad.tr.vertices.y);
|
||||
maxX = max(maxX, regionAttachment->quad.tr.vertices.x);
|
||||
maxY = max(maxY, regionAttachment->quad.tr.vertices.y);
|
||||
minX = min(minX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||
minY = min(minY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||
maxX = max(maxX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||
maxY = max(maxY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||
minX = min(minX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||
minY = min(minY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||
maxX = max(maxX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||
maxY = max(maxY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||
minX = min(minX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||
minY = min(minY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||
maxX = max(maxX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||
maxY = max(maxY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||
minX = min(minX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||
minY = min(minY, regionAttachment->quad.tr.vertices.y * scaleY);
|
||||
maxX = max(maxX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||
maxY = max(maxY, regionAttachment->quad.tr.vertices.y * scaleY);
|
||||
}
|
||||
CCPoint position = getPosition();
|
||||
minX = position.x + minX;
|
||||
minY = position.y + minY;
|
||||
maxX = position.x + maxX;
|
||||
maxY = position.y + maxY;
|
||||
return CCRectMake(minX, minY, maxX - minX, maxY - minY);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user