AnimationBoundExample.hx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package flixelExamples;
  2. import flixel.util.FlxColor;
  3. import flixel.text.FlxText;
  4. import spine.Skin;
  5. import flixel.ui.FlxButton;
  6. import flixel.FlxG;
  7. import spine.flixel.SkeletonSprite;
  8. import spine.flixel.FlixelTextureLoader;
  9. import flixel.FlxState;
  10. import openfl.utils.Assets;
  11. import spine.SkeletonData;
  12. import spine.animation.AnimationStateData;
  13. import spine.atlas.TextureAtlas;
  14. class AnimationBoundExample extends FlxState {
  15. var loadBinary = true;
  16. override public function create():Void {
  17. FlxG.cameras.bgColor = 0xffa1b2b0;
  18. var button = new FlxButton(0, 0, "Next scene", () -> {
  19. FlxG.debugger.drawDebug = false;
  20. FlxG.switchState(() -> new ControlBonesExample());
  21. });
  22. button.setPosition(FlxG.width * .75, FlxG.height / 10);
  23. add(button);
  24. var atlas = new TextureAtlas(Assets.getText("assets/spineboy.atlas"), new FlixelTextureLoader("assets/spineboy.atlas"));
  25. var data = SkeletonData.from(loadBinary ? Assets.getBytes("assets/spineboy-pro.skel") : Assets.getText("assets/spineboy-pro.json"), atlas, .2);
  26. var animationStateData = new AnimationStateData(data);
  27. animationStateData.defaultMix = 0.25;
  28. var skeletonSpriteClipping = new SkeletonSprite(data, animationStateData);
  29. var animationClipping = skeletonSpriteClipping.state.setAnimationByName(0, "portal", true).animation;
  30. skeletonSpriteClipping.update(0);
  31. skeletonSpriteClipping.setBoundingBox(animationClipping, true);
  32. skeletonSpriteClipping.screenCenter();
  33. skeletonSpriteClipping.x = FlxG.width / 4 - skeletonSpriteClipping.width / 2;
  34. add(skeletonSpriteClipping);
  35. var textClipping = new FlxText();
  36. textClipping.text = "Animation bound with clipping";
  37. textClipping.size = 12;
  38. textClipping.x = skeletonSpriteClipping.x + skeletonSpriteClipping.width / 2 - textClipping.width / 2;
  39. textClipping.y = skeletonSpriteClipping.y + skeletonSpriteClipping.height + 20;
  40. textClipping.setBorderStyle(FlxTextBorderStyle.OUTLINE, FlxColor.RED, 2);
  41. add(textClipping);
  42. var skeletonSpriteNoClipping = new SkeletonSprite(data, animationStateData);
  43. var animationClipping = skeletonSpriteNoClipping.state.setAnimationByName(0, "portal", true).animation;
  44. skeletonSpriteNoClipping.update(0);
  45. skeletonSpriteNoClipping.setBoundingBox(animationClipping, false);
  46. skeletonSpriteNoClipping.screenCenter();
  47. skeletonSpriteNoClipping.x = FlxG.width / 4 * 3 - skeletonSpriteClipping.width / 2 - 50;
  48. add(skeletonSpriteNoClipping);
  49. var textNoClipping = new FlxText();
  50. textNoClipping.text = "Animation bound without clipping";
  51. textNoClipping.size = 12;
  52. textNoClipping.x = skeletonSpriteNoClipping.x + skeletonSpriteNoClipping.width / 2 - textNoClipping.width / 2;
  53. textNoClipping.y = skeletonSpriteNoClipping.y + skeletonSpriteNoClipping.height + 20;
  54. textNoClipping.setBorderStyle(FlxTextBorderStyle.OUTLINE, FlxColor.RED, 2);
  55. add(textNoClipping);
  56. var textInstruction = new FlxText();
  57. textInstruction.text = "Red rectangle is the animation bound";
  58. textInstruction.size = 12;
  59. textInstruction.screenCenter();
  60. textInstruction.y = textNoClipping.y + 40;
  61. textInstruction.setBorderStyle(FlxTextBorderStyle.OUTLINE, FlxColor.RED, 2);
  62. add(textInstruction);
  63. FlxG.debugger.drawDebug = true;
  64. super.create();
  65. }
  66. }