tank.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. var tankDemo = function (canvas, bgColor) {
  2. var canvas, gl, renderer, input, assetManager;
  3. var skeleton, state, offset, 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("atlas2.atlas");
  12. assetManager.loadJson("demos.json");
  13. timeKeeper = new spine.TimeKeeper();
  14. }
  15. function loadingComplete() {
  16. var atlasLoader = new spine.AtlasAttachmentLoader(assetManager.get("atlas2.atlas"));
  17. var skeletonJson = new spine.SkeletonJson(atlasLoader);
  18. var skeletonData = skeletonJson.readSkeletonData(assetManager.get("demos.json").tank);
  19. skeleton = new spine.Skeleton(skeletonData);
  20. state = new spine.AnimationState(new spine.AnimationStateData(skeleton.data));
  21. state.setAnimation(0, "drive", true);
  22. state.apply(skeleton);
  23. skeleton.updateWorldTransform(spine.Physics.update);
  24. offset = new spine.Vector2();
  25. bounds = new spine.Vector2();
  26. offset.x = -1204.22;
  27. bounds.x = 1914.52;
  28. bounds.y = 965.78;
  29. // skeleton.getBounds(offset, bounds);
  30. renderer.skeletonDebugRenderer.drawRegionAttachments = false;
  31. renderer.skeletonDebugRenderer.drawMeshHull = false;
  32. renderer.skeletonDebugRenderer.drawMeshTriangles = false;
  33. setupUI();
  34. }
  35. function setupUI() {
  36. playButton = $("#tank-playbutton");
  37. var playButtonUpdate = function () {
  38. isPlaying = !isPlaying;
  39. if (isPlaying)
  40. playButton.addClass("pause").removeClass("play");
  41. else
  42. playButton.addClass("play").removeClass("pause");
  43. }
  44. playButton.click(playButtonUpdate);
  45. playButton.addClass("pause");
  46. timeLine = $("#tank-timeline").data("slider");
  47. timeLine.changed = function (percent) {
  48. if (isPlaying) playButton.click();
  49. if (!isPlaying) {
  50. var animationDuration = state.getCurrent(0).animation.duration;
  51. var time = animationDuration * percent;
  52. state.update(time - playTime);
  53. state.apply(skeleton);
  54. skeleton.updateWorldTransform(spine.Physics.update);
  55. playTime = time;
  56. }
  57. };
  58. renderer.skeletonDebugRenderer.drawPaths = false;
  59. renderer.skeletonDebugRenderer.drawBones = false;
  60. $("#tank-drawbones").change(function () {
  61. renderer.skeletonDebugRenderer.drawPaths = this.checked;
  62. renderer.skeletonDebugRenderer.drawBones = this.checked;
  63. });
  64. }
  65. function render() {
  66. timeKeeper.update();
  67. var delta = timeKeeper.delta;
  68. if (isPlaying) {
  69. var animationDuration = state.getCurrent(0).animation.duration;
  70. playTime += delta;
  71. while (playTime >= animationDuration)
  72. playTime -= animationDuration;
  73. timeLine.set(playTime / animationDuration);
  74. state.update(delta);
  75. state.apply(skeleton);
  76. skeleton.updateWorldTransform(spine.Physics.update);
  77. }
  78. offset.x = skeleton.findBone("tankRoot").worldX;
  79. offset.y = skeleton.findBone("tankRoot").worldY;
  80. renderer.camera.position.x = offset.x - 300;
  81. renderer.camera.position.y = bounds.y - 505;
  82. renderer.camera.viewportWidth = bounds.x * 1.2;
  83. renderer.camera.viewportHeight = bounds.y * 1.2;
  84. renderer.resize(spine.ResizeMode.Fit);
  85. gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
  86. gl.clear(gl.COLOR_BUFFER_BIT);
  87. renderer.begin();
  88. renderer.drawSkeleton(skeleton, true);
  89. renderer.drawSkeletonDebug(skeleton, true);
  90. renderer.end();
  91. }
  92. init();
  93. tankDemo.assetManager = assetManager;
  94. tankDemo.loadingComplete = loadingComplete;
  95. tankDemo.render = render;
  96. };