transitions.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. var transitionsDemo = function (canvas, loadingComplete, bgColor) {
  2. var OUTLINE_COLOR = new spine.Color(0, 0.8, 0, 1);
  3. var canvas, gl, renderer, input, assetManager;
  4. var skeleton, skeletonNoMix, state, stateNoMix, bounds;
  5. var timeSlider, timeSliderLabel;
  6. var timeKeeper;
  7. if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1);
  8. function init() {
  9. gl = canvas.context.gl;
  10. renderer = new spine.SceneRenderer(canvas, gl);
  11. assetManager = new spine.AssetManager(gl, spineDemos.path, spineDemos.downloader);
  12. assetManager.loadTextureAtlas("atlas1.atlas");
  13. assetManager.loadJson("demos.json");
  14. input = new spine.Input(canvas);
  15. timeKeeper = new spine.TimeKeeper();
  16. timeSlider = $("#transitions-timeslider").data("slider");
  17. timeSlider.set(0.5);
  18. timeSliderLabel = $("#transitions-timeslider-label")[0];
  19. }
  20. function loadingComplete() {
  21. skeleton = loadSkeleton("spineboy");
  22. skeletonNoMix = new spine.Skeleton(skeleton.data);
  23. state = createState(0.25);
  24. state.multipleMixing = true;
  25. setAnimations(state, 0, 0);
  26. stateNoMix = createState(0);
  27. setAnimations(stateNoMix, -0.25, 0);
  28. state.apply(skeleton);
  29. skeleton.updateWorldTransform(spine.Physics.update);
  30. bounds = { offset: new spine.Vector2(), size: new spine.Vector2() };
  31. skeleton.getBounds(bounds.offset, bounds.size, []);
  32. setupInput();
  33. $("#transitions-overlay").removeClass("overlay-hide");
  34. $("#transitions-overlay").addClass("overlay");
  35. }
  36. function setupInput() {
  37. $("#transitions-die").click(function () {
  38. var entry = state.setAnimation(0, "death", false);
  39. setAnimations(state, 0, true, 0);
  40. entry.next.mixDuration = 0.1;
  41. var entry = stateNoMix.setAnimation(0, "death", false);
  42. setAnimations(stateNoMix, -0.25, -0.25 + -0.1);
  43. });
  44. }
  45. function createState(mix) {
  46. var stateData = new spine.AnimationStateData(skeleton.data);
  47. stateData.defaultMix = mix;
  48. var state = new spine.AnimationState(stateData);
  49. return state;
  50. }
  51. function setAnimations(state, delay, first) {
  52. state.addAnimation(0, "idle", true, first);
  53. state.addAnimation(0, "walk", true, 0.6);
  54. state.addAnimation(0, "jump", false, 1);
  55. state.addAnimation(0, "run", true, delay);
  56. state.addAnimation(0, "walk", true, 1.2);
  57. state.addAnimation(0, "run", true, 0.5);
  58. state.addAnimation(0, "jump", false, 1);
  59. state.addAnimation(0, "run", true, delay);
  60. state.addAnimation(0, "jump", true, 0.5);
  61. state.addAnimation(0, "walk", true, delay).listener = {
  62. start: function (trackIndex) {
  63. setAnimations(state, delay, 0.6);
  64. }
  65. };
  66. }
  67. function loadSkeleton(name) {
  68. var atlasLoader = new spine.AtlasAttachmentLoader(assetManager.get("atlas1.atlas"));
  69. var skeletonJson = new spine.SkeletonJson(atlasLoader);
  70. var skeletonData = skeletonJson.readSkeletonData(assetManager.get("demos.json")[name]);
  71. var skeleton = new spine.Skeleton(skeletonData);
  72. skeleton.setSkinByName("default");
  73. return skeleton;
  74. }
  75. function render() {
  76. timeKeeper.update();
  77. var delta = timeKeeper.delta * timeSlider.get();
  78. if (timeSliderLabel) {
  79. var oldValue = timeSliderLabel.textContent;
  80. var newValue = Math.round(timeSlider.get() * 100) + "%";
  81. if (oldValue !== newValue) timeSliderLabel.textContent = newValue;
  82. }
  83. var offset = bounds.offset;
  84. var size = bounds.size;
  85. renderer.camera.position.x = offset.x + size.x - 50;
  86. renderer.camera.position.y = offset.y + size.y / 2 - 40;
  87. renderer.camera.viewportWidth = size.x * 2;
  88. renderer.camera.viewportHeight = size.y * 2;
  89. renderer.resize(spine.ResizeMode.Fit);
  90. gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
  91. gl.clear(gl.COLOR_BUFFER_BIT);
  92. renderer.begin();
  93. state.update(delta);
  94. state.apply(skeleton);
  95. skeleton.updateWorldTransform(spine.Physics.update);
  96. skeleton.x = -200;
  97. skeleton.y = -100;
  98. renderer.drawSkeleton(skeleton, true);
  99. stateNoMix.update(delta);
  100. stateNoMix.apply(skeletonNoMix);
  101. skeletonNoMix.updateWorldTransform(spine.Physics.update);
  102. skeletonNoMix.x = size.x + 45;
  103. skeletonNoMix.y = -100;
  104. renderer.drawSkeleton(skeletonNoMix, true);
  105. renderer.end();
  106. }
  107. init();
  108. transitionsDemo.assetManager = assetManager;
  109. transitionsDemo.loadingComplete = loadingComplete;
  110. transitionsDemo.render = render;
  111. };