- Изменено
Starling runtime math issue (cleared)
Spine version 3.8.86
Runtime version 3.8 (January 2020)
While using texture frame (orig and offset) in atlases, region attachments' coordinates are incorrect.
The bug was caused by RegionAttachment.as Line 76.
The original code was
var radians : Number = rotation * Math.PI / 180;
var ulDist : Number = Math.sqrt(localX * localX + localY * localY);
var ulAngle : Number = Math.atan2(localY, localX);
var urDist : Number = Math.sqrt(localX2 * localX2 + localY * localY);
var urAngle : Number = Math.atan2(localY, localX2);
var blDist : Number = Math.sqrt(localX * localX + localY2 * localY2);
var blAngle : Number = Math.atan2(localY2, localX);
var brDist : Number = Math.sqrt(localX2 * localX2 + localY2 * localY2);
var brAngle : Number = Math.atan2(localY2, localX2);
offset[BLX] = Math.cos(radians - blAngle) * blDist + x;
offset[BLY] = Math.sin(radians - blAngle) * blDist + y;
offset[ULX] = Math.cos(radians - ulAngle) * ulDist + x;
offset[ULY] = Math.sin(radians - ulAngle) * ulDist + y;
offset[URX] = Math.cos(radians - urAngle) * urDist + x;
offset[URY] = Math.sin(radians - urAngle) * urDist + y;
offset[BRX] = Math.cos(radians - brAngle) * brDist + x;
offset[BRY] = Math.sin(radians - brAngle) * brDist + y;
Copied from Unity runtime 3.8, I modified it to
var radians : Number = rotation * Math.PI / 180;
var cos:Number = Math.cos(radians);
var sin:Number = Math.sin(radians);
var localXCos:Number = localX * cos + x;
var localXSin:Number = localX * sin;
var localYCos:Number = localY * cos + y;
var localYSin:Number = localY * sin;
var localX2Cos:Number = localX2 * cos + x;
var localX2Sin:Number = localX2 * sin;
var localY2Cos:Number = localY2 * cos + y;
var localY2Sin:Number = localY2 * sin;
offset[BLX] = localXCos - localYSin;
offset[BLY] = localYCos + localXSin;
offset[ULX] = localXCos - localY2Sin;
offset[ULY] = localY2Cos + localXSin;
offset[URX] = localX2Cos - localY2Sin;
offset[URY] = localY2Cos + localX2Sin;
offset[BRX] = localX2Cos - localYSin;
offset[BRY] = localYCos + localX2Sin;
It seems that things work well this way
Hm, can you tell me how you reproduce this issue? Our demo scenes don't trigger this. I've created an issue in the spine-runtimes tracker here: [as3] Incorrect region attachment coordinates · #1739
I've made and uploaded a demo to reproduce this issue.
See http://www.filedropper.com/starlingspineissue
Please have a look at RegionAttachment.as Line 76.
Only lines near there were modified.
Thanks! I'll get to fixing it in the 3.8 and 4.0-beta branches asap.