123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- var spritesheetsDemo = function (canvas, bgColor) {
- var SKELETON_ATLAS_COLOR = new spine.Color(0, 0.8, 0, 0.8);
- var FRAME_ATLAS_COLOR = new spine.Color(0.8, 0, 0, 0.8);
- var canvas, gl, renderer, input, assetManager;
- var skeleton, animationState, offset, bounds;
- var skeletonSeq, walkAnim, walkLastTime = 0, walkLastTimePrecise = 0;
- var skeletonAtlas;
- var viewportWidth, viewportHeight;
- var frames = [], currFrame = 0, frameTime = 0, frameScale = 0, FPS = 30;
- var timeKeeper, input;
- var playTime = 0, framePlaytime = 0, clickAnim = 0;
- if (!bgColor) bgColor = new spine.Color(235 / 255, 239 / 255, 244 / 255, 1);
- function init() {
- gl = canvas.context.gl;
- renderer = new spine.SceneRenderer(canvas, gl);
- assetManager = new spine.AssetManager(gl, spineDemos.path, spineDemos.downloader);
- assetManager.loadTextureAtlas("atlas1.atlas");
- assetManager.loadJson("demos.json");
- timeKeeper = new spine.TimeKeeper();
- input = new spine.Input(canvas);
- }
- function loadingComplete() {
- var atlasLoader = new spine.AtlasAttachmentLoader(assetManager.get("atlas1.atlas"));
- var skeletonJson = new spine.SkeletonJson(atlasLoader);
- var skeletonData = skeletonJson.readSkeletonData(assetManager.get("demos.json").raptor);
- skeleton = new spine.Skeleton(skeletonData);
- var stateData = new spine.AnimationStateData(skeleton.data);
- stateData.defaultMix = 0.5;
- stateData.setMix("jump", "walk", 0.3);
- animationState = new spine.AnimationState(stateData);
- animationState.setAnimation(0, "walk", true);
- animationState.apply(skeleton);
- skeleton.updateWorldTransform(spine.Physics.update);
- offset = new spine.Vector2();
- bounds = new spine.Vector2();
- skeleton.getBounds(offset, bounds, []);
- skeleton.x -= 60;
- skeletonSeq = new spine.Skeleton(skeletonData);
- walkAnim = skeletonSeq.data.findAnimation("walk");
- walkAnim.apply(skeletonSeq, 0, 0, true, null, 1, true, false);
- skeletonSeq.x += bounds.x + 150;
- viewportWidth = ((700 + bounds.x) - offset.x);
- viewportHeight = ((0 + bounds.y) - offset.y);
- resize();
- setupUI();
- setupInput();
- $("#spritesheets-overlay").removeClass("overlay-hide");
- $("#spritesheets-overlay").addClass("overlay");
- }
- function setupUI() {
- timeSlider = $("#spritesheets-timeslider").data("slider");
- timeSlider.set(0.5);
- timeSliderLabel = $("#spritesheets-timeslider-label")[0];
- }
- function setupInput() {
- input.addListener({
- down: function (x, y) {
- setAnimation((clickAnim++ % 2 == 0) ? "roar" : "jump");
- },
- up: function (x, y) { },
- moved: function (x, y) { },
- dragged: function (x, y) { }
- });
- $("#spritesheets-roar").click(function () {
- setAnimation("roar");
- });
- $("#spritesheets-jump").click(function () {
- setAnimation("jump");
- });
- }
- function setAnimation(name) {
- animationState.setAnimation(0, name, false);
- animationState.addAnimation(0, "walk", true, 0);
- }
- function resize() {
- renderer.camera.position.x = offset.x + viewportWidth / 2 - 25;
- renderer.camera.position.y = offset.y + viewportHeight / 2 - 100;
- renderer.camera.viewportWidth = viewportWidth * 1.2;
- renderer.camera.viewportHeight = viewportHeight * 1.2;
- renderer.resize(spine.ResizeMode.Fit);
- }
- function render() {
- timeKeeper.update();
- var delta = timeKeeper.delta;
- resize();
- delta *= timeSlider.get();
- if (timeSliderLabel) {
- var oldValue = timeSliderLabel.textContent;
- var newValue = Math.round(timeSlider.get() * 100) + "%";
- if (oldValue !== newValue) timeSliderLabel.textContent = newValue;
- }
- var animationDuration = animationState.getCurrent(0).animation.duration;
- playTime += delta;
- while (playTime >= animationDuration) {
- playTime -= animationDuration;
- }
- walkLastTimePrecise += delta;
- while (walkLastTimePrecise - walkLastTime > 1 / FPS) {
- var newWalkTime = walkLastTime + 1 / FPS;
- walkAnim.apply(skeletonSeq, walkLastTime, newWalkTime, true, null, 1, spine.MixBlend.setup, spine.MixDirection.mixIn);
- walkLastTime = newWalkTime;
- }
- skeletonSeq.updateWorldTransform(spine.Physics.update);
- animationState.update(delta);
- var current = animationState.getCurrent(0);
- if (current.animation.name == "walk") current.trackTime = walkLastTimePrecise;
- animationState.apply(skeleton);
- skeleton.updateWorldTransform(spine.Physics.update);
- gl.clearColor(bgColor.r, bgColor.g, bgColor.b, bgColor.a);
- gl.clear(gl.COLOR_BUFFER_BIT);
- renderer.begin();
- var frame = frames[currFrame];
- renderer.drawSkeleton(skeleton, true);
- renderer.drawSkeleton(skeletonSeq, true);
- renderer.end();
- }
- init();
- spritesheetsDemo.assetManager = assetManager;
- spritesheetsDemo.loadingComplete = loadingComplete;
- spritesheetsDemo.render = render;
- };
|