• Bugs
  • Starling runtime math issue (cleared)

  • Изменено
Related Discussions
...

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

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.