mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +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 {
|
- (CGRect) 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 = self.scaleX;
|
||||||
|
float scaleY = self.scaleY;
|
||||||
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];
|
||||||
Attachment* attachment = slot->attachment;
|
Attachment* attachment = slot->attachment;
|
||||||
if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
|
if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
|
||||||
Cocos2dRegionAttachment* regionAttachment = SUB_CAST(Cocos2dRegionAttachment, attachment);
|
Cocos2dRegionAttachment* regionAttachment = SUB_CAST(Cocos2dRegionAttachment, attachment);
|
||||||
minX = fmin(minX, regionAttachment->quad.bl.vertices.x);
|
minX = fmin(minX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||||
minY = fmin(minY, regionAttachment->quad.bl.vertices.y);
|
minY = fmin(minY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||||
maxX = fmax(maxX, regionAttachment->quad.bl.vertices.x);
|
maxX = fmax(maxX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||||
maxY = fmax(maxY, regionAttachment->quad.bl.vertices.y);
|
maxY = fmax(maxY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||||
minX = fmin(minX, regionAttachment->quad.br.vertices.x);
|
minX = fmin(minX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||||
minY = fmin(minY, regionAttachment->quad.br.vertices.y);
|
minY = fmin(minY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||||
maxX = fmax(maxX, regionAttachment->quad.br.vertices.x);
|
maxX = fmax(maxX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||||
maxY = fmax(maxY, regionAttachment->quad.br.vertices.y);
|
maxY = fmax(maxY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||||
minX = fmin(minX, regionAttachment->quad.tl.vertices.x);
|
minX = fmin(minX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||||
minY = fmin(minY, regionAttachment->quad.tl.vertices.y);
|
minY = fmin(minY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||||
maxX = fmax(maxX, regionAttachment->quad.tl.vertices.x);
|
maxX = fmax(maxX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||||
maxY = fmax(maxY, regionAttachment->quad.tl.vertices.y);
|
maxY = fmax(maxY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||||
minX = fmin(minX, regionAttachment->quad.tr.vertices.x);
|
minX = fmin(minX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||||
minY = fmin(minY, regionAttachment->quad.tr.vertices.y);
|
minY = fmin(minY, regionAttachment->quad.tr.vertices.y * scaleY);
|
||||||
maxX = fmax(maxX, regionAttachment->quad.tr.vertices.x);
|
maxX = fmax(maxX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||||
maxY = fmax(maxY, regionAttachment->quad.tr.vertices.y);
|
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);
|
return CGRectMake(minX, minY, maxX - minX, maxY - minY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -189,28 +189,35 @@ void CCSkeleton::draw () {
|
|||||||
|
|
||||||
CCRect CCSkeleton::boundingBox () {
|
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 scaleY = getScaleY();
|
||||||
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];
|
||||||
Attachment* attachment = slot->attachment;
|
Attachment* attachment = slot->attachment;
|
||||||
if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
|
if (!attachment || attachment->type != ATTACHMENT_REGION) continue;
|
||||||
Cocos2dxRegionAttachment* regionAttachment = SUB_CAST(Cocos2dxRegionAttachment, attachment);
|
Cocos2dxRegionAttachment* regionAttachment = SUB_CAST(Cocos2dxRegionAttachment, attachment);
|
||||||
minX = min(minX, regionAttachment->quad.bl.vertices.x);
|
minX = min(minX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||||
minY = min(minY, regionAttachment->quad.bl.vertices.y);
|
minY = min(minY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||||
maxX = max(maxX, regionAttachment->quad.bl.vertices.x);
|
maxX = max(maxX, regionAttachment->quad.bl.vertices.x * scaleX);
|
||||||
maxY = max(maxY, regionAttachment->quad.bl.vertices.y);
|
maxY = max(maxY, regionAttachment->quad.bl.vertices.y * scaleY);
|
||||||
minX = min(minX, regionAttachment->quad.br.vertices.x);
|
minX = min(minX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||||
minY = min(minY, regionAttachment->quad.br.vertices.y);
|
minY = min(minY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||||
maxX = max(maxX, regionAttachment->quad.br.vertices.x);
|
maxX = max(maxX, regionAttachment->quad.br.vertices.x * scaleX);
|
||||||
maxY = max(maxY, regionAttachment->quad.br.vertices.y);
|
maxY = max(maxY, regionAttachment->quad.br.vertices.y * scaleY);
|
||||||
minX = min(minX, regionAttachment->quad.tl.vertices.x);
|
minX = min(minX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||||
minY = min(minY, regionAttachment->quad.tl.vertices.y);
|
minY = min(minY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||||
maxX = max(maxX, regionAttachment->quad.tl.vertices.x);
|
maxX = max(maxX, regionAttachment->quad.tl.vertices.x * scaleX);
|
||||||
maxY = max(maxY, regionAttachment->quad.tl.vertices.y);
|
maxY = max(maxY, regionAttachment->quad.tl.vertices.y * scaleY);
|
||||||
minX = min(minX, regionAttachment->quad.tr.vertices.x);
|
minX = min(minX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||||
minY = min(minY, regionAttachment->quad.tr.vertices.y);
|
minY = min(minY, regionAttachment->quad.tr.vertices.y * scaleY);
|
||||||
maxX = max(maxX, regionAttachment->quad.tr.vertices.x);
|
maxX = max(maxX, regionAttachment->quad.tr.vertices.x * scaleX);
|
||||||
maxY = max(maxY, regionAttachment->quad.tr.vertices.y);
|
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);
|
return CCRectMake(minX, minY, maxX - minX, maxY - minY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user