clipping.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. var clippingDemo = function (canvas, bgColor) {
  2. var gl, renderer, assetManager;
  3. var skeleton, state, bounds;
  4. var timeKeeper;
  5. var playButton, timeline, isPlaying = true, playTime = 0;
  6. if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1);
  7. function init() {
  8. gl = canvas.context.gl;
  9. renderer = new spine.SceneRenderer(canvas, gl);
  10. assetManager = new spine.AssetManager(gl, spineDemos.path, spineDemos.downloader);
  11. assetManager.loadTextureAtlas("atlas1.atlas");
  12. assetManager.loadJson("demos.json");
  13. timeKeeper = new spine.TimeKeeper();
  14. }
  15. function loadingComplete() {
  16. var atlasLoader = new spine.AtlasAttachmentLoader(assetManager.get("atlas1.atlas"));
  17. var skeletonJson = new spine.SkeletonJson(atlasLoader);
  18. var skeletonData = skeletonJson.readSkeletonData(assetManager.get("demos.json").spineboy);
  19. skeleton = new spine.Skeleton(skeletonData);
  20. state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data));
  21. state.setAnimation(0, "portal", true);
  22. state.apply(skeleton);
  23. skeleton.updateWorldTransform(spine.Physics.update);
  24. var offset = new spine.Vector2();
  25. bounds = new spine.Vector2();
  26. skeleton.getBounds(offset, bounds, []);
  27. renderer.camera.position.x = offset.x + bounds.x + 200;
  28. renderer.camera.position.y = offset.y + bounds.y / 2 + 100;
  29. renderer.skeletonDebugRenderer.drawMeshHull = false;
  30. renderer.skeletonDebugRenderer.drawMeshTriangles = false;
  31. setupUI();
  32. }
  33. function setupUI() {
  34. playButton = $("#clipping-playbutton");
  35. var playButtonUpdate = function () {
  36. isPlaying = !isPlaying;
  37. if (isPlaying)
  38. playButton.addClass("pause").removeClass("play");
  39. else
  40. playButton.addClass("play").removeClass("pause");
  41. }
  42. playButton.click(playButtonUpdate);
  43. playButton.addClass("pause");
  44. timeline = $("#clipping-timeline").data("slider");
  45. timeline.changed = function (percent) {
  46. if (isPlaying) playButton.click();
  47. if (!isPlaying) {
  48. var animationDuration = state.getCurrent(0).animation.duration;
  49. var time = animationDuration * percent;
  50. state.update(time - playTime);
  51. state.apply(skeleton);
  52. skeleton.updateWorldTransform(spine.Physics.update);
  53. playTime = time;
  54. }
  55. };
  56. renderer.skeletonDebugRenderer.drawRegionAttachments = false;
  57. renderer.skeletonDebugRenderer.drawClipping = false;
  58. renderer.skeletonDebugRenderer.drawBones = false;
  59. renderer.skeletonDebugRenderer.drawMeshHull = false;
  60. renderer.skeletonDebugRenderer.drawMeshTriangles = false;
  61. $("#clipping-drawtriangles").click(function () {
  62. renderer.skeletonDebugRenderer.drawMeshHull = this.checked;
  63. renderer.skeletonDebugRenderer.drawMeshTriangles = this.checked;
  64. renderer.skeletonDebugRenderer.drawClipping = this.checked;
  65. renderer.skeletonDebugRenderer.drawRegionAttachments = this.checked;
  66. })
  67. }
  68. function render() {
  69. timeKeeper.update();
  70. var delta = timeKeeper.delta;
  71. if (isPlaying) {
  72. var animationDuration = state.getCurrent(0).animation.duration;
  73. playTime += delta;
  74. while (playTime >= animationDuration)
  75. playTime -= animationDuration;
  76. timeline.set(playTime / animationDuration);
  77. state.update(delta);
  78. state.apply(skeleton);
  79. skeleton.updateWorldTransform(spine.Physics.update);
  80. }
  81. renderer.camera.viewportWidth = bounds.x * 1.6;
  82. renderer.camera.viewportHeight = bounds.y * 1.6;
  83. renderer.resize(spine.ResizeMode.Fit);
  84. gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
  85. gl.clear(gl.COLOR_BUFFER_BIT);
  86. renderer.begin();
  87. renderer.drawSkeleton(skeleton, true);
  88. renderer.drawSkeletonDebug(skeleton, false, ["root"]);
  89. renderer.end();
  90. }
  91. init();
  92. clippingDemo.assetManager = assetManager;
  93. clippingDemo.loadingComplete = loadingComplete;
  94. clippingDemo.render = render;
  95. };