From 4b31d819238292de1674c1641cb02d5dfea217b9 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Mon, 23 Dec 2013 15:04:37 +0100 Subject: [PATCH] Minor optimizations, clean up. --- spine-as3/spine-as3/src/spine/Bone.as | 2 +- spine-as3/spine-as3/src/spine/Skeleton.as | 6 +-- .../spine-as3/src/spine/SkeletonBounds.as | 6 +-- spine-as3/spine-as3/src/spine/SkeletonData.as | 10 ++--- spine-as3/spine-as3/src/spine/SkeletonJson.as | 15 ++++---- .../src/spine/animation/Animation.as | 2 +- .../src/spine/animation/AnimationState.as | 2 +- .../src/spine/animation/AttachmentTimeline.as | 2 +- .../src/spine/animation/ColorTimeline.as | 38 +++++++++---------- .../src/spine/animation/CurveTimeline.as | 30 +++++++-------- .../src/spine/animation/DrawOrderTimeline.as | 2 +- .../src/spine/animation/EventTimeline.as | 6 +-- .../src/spine/animation/Listeners.as | 2 +- .../src/spine/animation/RotateTimeline.as | 18 ++++----- .../src/spine/animation/ScaleTimeline.as | 18 ++++----- .../src/spine/animation/TranslateTimeline.as | 24 ++++++------ spine-as3/spine-as3/src/spine/atlas/Atlas.as | 4 +- .../attachments/BoundingBoxAttachment.as | 5 ++- .../src/spine/attachments/RegionAttachment.as | 24 ++++++++---- .../src/spine/starling/SkeletonSprite.as | 5 ++- 20 files changed, 117 insertions(+), 104 deletions(-) diff --git a/spine-as3/spine-as3/src/spine/Bone.as b/spine-as3/spine-as3/src/spine/Bone.as index d4453c710..37c7feffe 100644 --- a/spine-as3/spine-as3/src/spine/Bone.as +++ b/spine-as3/spine-as3/src/spine/Bone.as @@ -83,7 +83,7 @@ public class Bone { _worldScaleY = scaleY; _worldRotation = rotation; } - var radians:Number = _worldRotation * Math.PI / 180; + var radians:Number = _worldRotation * (Math.PI / 180); var cos:Number = Math.cos(radians); var sin:Number = Math.sin(radians); _m00 = cos * _worldScaleX; diff --git a/spine-as3/spine-as3/src/spine/Skeleton.as b/spine-as3/spine-as3/src/spine/Skeleton.as index 58c294e6b..833dc188d 100644 --- a/spine-as3/spine-as3/src/spine/Skeleton.as +++ b/spine-as3/spine-as3/src/spine/Skeleton.as @@ -58,7 +58,7 @@ public class Skeleton { _bones = new Vector.(); for each (var boneData:BoneData in data.bones) { var parent:Bone = boneData.parent == null ? null : _bones[data.bones.indexOf(boneData.parent)]; - _bones.push(new Bone(boneData, parent)); + _bones[_bones.length] = new Bone(boneData, parent); } _slots = new Vector.(); @@ -66,8 +66,8 @@ public class Skeleton { for each (var slotData:SlotData in data.slots) { var bone:Bone = _bones[data.bones.indexOf(slotData.boneData)]; var slot:Slot = new Slot(slotData, this, bone); - _slots.push(slot); - _drawOrder.push(slot); + _slots[_slots.length] = slot; + _drawOrder[_drawOrder.length] = slot; } } diff --git a/spine-as3/spine-as3/src/spine/SkeletonBounds.as b/spine-as3/spine-as3/src/spine/SkeletonBounds.as index 5828d773c..7e1645dde 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonBounds.as +++ b/spine-as3/spine-as3/src/spine/SkeletonBounds.as @@ -49,14 +49,14 @@ public class SkeletonBounds { boundingBoxes.length = 0; for each (var polygon:Polygon in polygons) - polygonPool.push(polygon); + polygonPool[polygonPool.length] = polygon; polygons.length = 0; for (var i:int = 0; i < slotCount; i++) { var slot:Slot = slots[i]; var boundingBox:BoundingBoxAttachment = slot.attachment as BoundingBoxAttachment; if (boundingBox == null) continue; - boundingBoxes.push(boundingBox); + boundingBoxes[boundingBoxes.length] = boundingBox; var poolCount:int = polygonPool.length; if (poolCount > 0) { @@ -64,7 +64,7 @@ public class SkeletonBounds { polygonPool.splice(poolCount - 1, 1); } else polygon = new Polygon(); - polygons.push(polygon); + polygons[polygons.length] = polygon; polygon.vertices.length = boundingBox.vertices.length; boundingBox.computeWorldVertices(x, y, slot.bone, polygon.vertices); diff --git a/spine-as3/spine-as3/src/spine/SkeletonData.as b/spine-as3/spine-as3/src/spine/SkeletonData.as index 5c069f853..3f98d1c2f 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonData.as +++ b/spine-as3/spine-as3/src/spine/SkeletonData.as @@ -48,7 +48,7 @@ public class SkeletonData { public function addBone (bone:BoneData) : void { if (bone == null) throw new ArgumentError("bone cannot be null."); - bones.push(bone); + bones[bones.length] = bone; } /** @return May be null. */ @@ -78,7 +78,7 @@ public class SkeletonData { public function addSlot (slot:SlotData) : void { if (slot == null) throw new ArgumentError("slot cannot be null."); - slots.push(slot); + slots[slots.length] = slot; } /** @return May be null. */ @@ -108,7 +108,7 @@ public class SkeletonData { public function addSkin (skin:Skin) : void { if (skin == null) throw new ArgumentError("skin cannot be null."); - skins.push(skin); + skins[skins.length] = skin; } /** @return May be null. */ @@ -126,7 +126,7 @@ public class SkeletonData { public function addEvent (eventData:EventData) : void { if (eventData == null) throw new ArgumentError("eventData cannot be null."); - events.push(eventData); + events[events.length] = eventData; } /** @return May be null. */ @@ -146,7 +146,7 @@ public class SkeletonData { public function addAnimation (animation:Animation) : void { if (animation == null) throw new ArgumentError("animation cannot be null."); - animations.push(animation); + animations[animations.length] = animation; } /** @return May be null. */ diff --git a/spine-as3/spine-as3/src/spine/SkeletonJson.as b/spine-as3/spine-as3/src/spine/SkeletonJson.as index c592fbdb8..0f479466a 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonJson.as +++ b/spine-as3/spine-as3/src/spine/SkeletonJson.as @@ -184,8 +184,9 @@ public class SkeletonJson { regionAttachment.updateOffset(); } else if (attachment is BoundingBoxAttachment) { var box:BoundingBoxAttachment = attachment as BoundingBoxAttachment; + var vertices:Vector. = box.vertices; for each (var point:Number in map["vertices"]) - box.vertices.push(point * scale); + vertices[vertices.length] = point * scale; } return attachment; @@ -214,7 +215,7 @@ public class SkeletonJson { readCurve(timeline, frameIndex, valueMap); frameIndex++; } - timelines.push(timeline); + timelines[timelines.length] = timeline; duration = Math.max(duration, timeline.frames[timeline.frameCount * 2 - 2]); } else if (timelineName == TIMELINE_TRANSLATE || timelineName == TIMELINE_SCALE) { @@ -236,7 +237,7 @@ public class SkeletonJson { readCurve(timeline1, frameIndex1, valueMap1); frameIndex1++; } - timelines.push(timeline1); + timelines[timelines.length] = timeline1; duration = Math.max(duration, timeline1.frames[timeline1.frameCount * 3 - 3]); } else @@ -266,7 +267,7 @@ public class SkeletonJson { readCurve(timeline2, frameIndex2, valueMap2); frameIndex2++; } - timelines.push(timeline2); + timelines[timelines.length] = timeline2; duration = Math.max(duration, timeline2.frames[timeline2.frameCount * 5 - 5]); } else if (timelineName2 == TIMELINE_ATTACHMENT) { @@ -277,7 +278,7 @@ public class SkeletonJson { for each (var valueMap3:Object in values2) { timeline3.setFrame(frameIndex3++, valueMap3["time"], valueMap3["name"]); } - timelines.push(timeline3); + timelines[timelines.length] = timeline3; duration = Math.max(duration, timeline3.frames[timeline3.frameCount - 1]); } else @@ -298,7 +299,7 @@ public class SkeletonJson { event.stringValue = eventMap.hasOwnProperty("string") ? eventMap["string"] : eventData.stringValue; timeline4.setFrame(frameIndex4++, eventMap["time"], event); } - timelines.push(timeline4); + timelines[timelines.length] = timeline4; duration = Math.max(duration, timeline4.frames[timeline4.frameCount - 1]); } @@ -334,7 +335,7 @@ public class SkeletonJson { } timeline5.setFrame(frameIndex5++, drawOrderMap["time"], drawOrder); } - timelines.push(timeline5); + timelines[timelines.length] = timeline5; duration = Math.max(duration, timeline5.frames[timeline5.frameCount - 1]); } diff --git a/spine-as3/spine-as3/src/spine/animation/Animation.as b/spine-as3/spine-as3/src/spine/animation/Animation.as index c102a8024..22ba6f566 100644 --- a/spine-as3/spine-as3/src/spine/animation/Animation.as +++ b/spine-as3/spine-as3/src/spine/animation/Animation.as @@ -99,7 +99,7 @@ public class Animation { return step; var current:int = high >>> 1; while (true) { - if (values[(current + 1) * step] <= target) + if (values[int((current + 1) * step)] <= target) low = current + 1; else high = current; diff --git a/spine-as3/spine-as3/src/spine/animation/AnimationState.as b/spine-as3/spine-as3/src/spine/animation/AnimationState.as index 31640373b..354190d85 100644 --- a/spine-as3/spine-as3/src/spine/animation/AnimationState.as +++ b/spine-as3/spine-as3/src/spine/animation/AnimationState.as @@ -139,7 +139,7 @@ public class AnimationState { private function expandToIndex (index:int) : TrackEntry { if (index < _tracks.length) return _tracks[index]; while (index >= _tracks.length) - _tracks.push(null); + _tracks[_tracks.length] = null; return null; } diff --git a/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as b/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as index f227f0967..bfa1af5f7 100644 --- a/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/AttachmentTimeline.as @@ -60,7 +60,7 @@ public class AttachmentTimeline implements Timeline { return; // Time is before first frame. var frameIndex:int; - if (time >= frames[frames.length - 1]) // Time is after last frame. + if (time >= frames[int(frames.length - 1)]) // Time is after last frame. frameIndex = frames.length - 1; else frameIndex = Animation.binarySearch(frames, time, 1) - 1; diff --git a/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as b/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as index 1c6d3bba4..33aded95f 100644 --- a/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/ColorTimeline.as @@ -37,7 +37,7 @@ import spine.Skeleton; import spine.Slot; public class ColorTimeline extends CurveTimeline { - static private const LAST_FRAME_TIME:int = -5; + static private const PREV_FRAME_TIME:int = -5; static private const FRAME_R:int = 1; static private const FRAME_G:int = 2; static private const FRAME_B:int = 3; @@ -55,10 +55,10 @@ public class ColorTimeline extends CurveTimeline { public function setFrame (frameIndex:int, time:Number, r:Number, g:Number, b:Number, a:Number) : void { frameIndex *= 5; frames[frameIndex] = time; - frames[frameIndex + 1] = r; - frames[frameIndex + 2] = g; - frames[frameIndex + 3] = b; - frames[frameIndex + 4] = a; + frames[int(frameIndex + 1)] = r; + frames[int(frameIndex + 2)] = g; + frames[int(frameIndex + 3)] = b; + frames[int(frameIndex + 4)] = a; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { @@ -67,29 +67,29 @@ public class ColorTimeline extends CurveTimeline { var slot:Slot = skeleton.slots[slotIndex]; - if (time >= frames[frames.length - 5]) { // Time is after last frame. + if (time >= frames[int(frames.length - 5)]) { // Time is after last frame. var i:int = frames.length - 1; - slot.r = frames[i - 3]; - slot.g = frames[i - 2]; - slot.b = frames[i - 1]; + slot.r = frames[int(i - 3)]; + slot.g = frames[int(i - 2)]; + slot.b = frames[int(i - 1)]; slot.a = frames[i]; return; } - // Interpolate between the last frame and the current frame. + // Interpolate between the previous frame and the current frame. var frameIndex:int = Animation.binarySearch(frames, time, 5); - var lastFrameR:Number = frames[frameIndex - 4]; - var lastFrameG:Number = frames[frameIndex - 3]; - var lastFrameB:Number = frames[frameIndex - 2]; - var lastFrameA:Number = frames[frameIndex - 1]; + var prevFrameR:Number = frames[int(frameIndex - 4)]; + var prevFrameG:Number = frames[int(frameIndex - 3)]; + var prevFrameB:Number = frames[int(frameIndex - 2)]; + var prevFrameA:Number = frames[int(frameIndex - 1)]; var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime); + var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); percent = getCurvePercent(frameIndex / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - var r:Number = lastFrameR + (frames[frameIndex + FRAME_R] - lastFrameR) * percent; - var g:Number = lastFrameG + (frames[frameIndex + FRAME_G] - lastFrameG) * percent; - var b:Number = lastFrameB + (frames[frameIndex + FRAME_B] - lastFrameB) * percent; - var a:Number = lastFrameA + (frames[frameIndex + FRAME_A] - lastFrameA) * percent; + var r:Number = prevFrameR + (frames[int(frameIndex + FRAME_R)] - prevFrameR) * percent; + var g:Number = prevFrameG + (frames[int(frameIndex + FRAME_G)] - prevFrameG) * percent; + var b:Number = prevFrameB + (frames[int(frameIndex + FRAME_B)] - prevFrameB) * percent; + var a:Number = prevFrameA + (frames[int(frameIndex + FRAME_A)] - prevFrameA) * percent; if (alpha < 1) { slot.r += (r - slot.r) * alpha; slot.g += (g - slot.g) * alpha; diff --git a/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as b/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as index c125a6681..f4c79b36d 100644 --- a/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/CurveTimeline.as @@ -55,11 +55,11 @@ public class CurveTimeline implements Timeline { } public function setLinear (frameIndex:int) : void { - curves[frameIndex * 6] = LINEAR; + curves[int(frameIndex * 6)] = LINEAR; } public function setStepped (frameIndex:int) : void { - curves[frameIndex * 6] = STEPPED; + curves[int(frameIndex * 6)] = STEPPED; } /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. @@ -79,11 +79,11 @@ public class CurveTimeline implements Timeline { var tmp2y:Number = (cy1 - cy2) * 3 + 1; var i:int = frameIndex * 6; curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; - curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; - curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; - curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; - curves[i + 4] = tmp2x * pre5; - curves[i + 5] = tmp2y * pre5; + curves[int(i + 1)] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[int(i + 2)] = tmp1x * pre4 + tmp2x * pre5; + curves[int(i + 3)] = tmp1y * pre4 + tmp2y * pre5; + curves[int(i + 4)] = tmp2x * pre5; + curves[int(i + 5)] = tmp2y * pre5; } public function getCurvePercent (frameIndex:int, percent:Number) : Number { @@ -93,19 +93,19 @@ public class CurveTimeline implements Timeline { return percent; if (dfx == STEPPED) return 0; - var dfy:Number = curves[curveIndex + 1]; - var ddfx:Number = curves[curveIndex + 2]; - var ddfy:Number = curves[curveIndex + 3]; - var dddfx:Number = curves[curveIndex + 4]; - var dddfy:Number = curves[curveIndex + 5]; + var dfy:Number = curves[int(curveIndex + 1)]; + var ddfx:Number = curves[int(curveIndex + 2)]; + var ddfy:Number = curves[int(curveIndex + 3)]; + var dddfx:Number = curves[int(curveIndex + 4)]; + var dddfy:Number = curves[int(curveIndex + 5)]; var x:Number = dfx; var y:Number = dfy; var i:int = BEZIER_SEGMENTS - 2; while (true) { if (x >= percent) { - var lastX:Number = x - dfx; - var lastY:Number = y - dfy; - return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + var prevX:Number = x - dfx; + var prevY:Number = y - dfy; + return prevY + (y - prevY) * (percent - prevX) / (x - prevX); } if (i == 0) break; diff --git a/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as b/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as index 7710027e3..118ed63c6 100644 --- a/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/DrawOrderTimeline.as @@ -60,7 +60,7 @@ public class DrawOrderTimeline implements Timeline { return; // Time is before first frame. var frameIndex:int; - if (time >= frames[frames.length - 1]) // Time is after last frame. + if (time >= frames[int(frames.length - 1)]) // Time is after last frame. frameIndex = frames.length - 1; else frameIndex = Animation.binarySearch(frames, time, 1) - 1; diff --git a/spine-as3/spine-as3/src/spine/animation/EventTimeline.as b/spine-as3/spine-as3/src/spine/animation/EventTimeline.as index 45ac7ff1d..9ac035544 100644 --- a/spine-as3/spine-as3/src/spine/animation/EventTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/EventTimeline.as @@ -62,7 +62,7 @@ public class EventTimeline implements Timeline { if (lastTime > time) { // Fire events after last time for looped animations. apply(skeleton, lastTime, int.MAX_VALUE, firedEvents, alpha); lastTime = -1; - } else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame. + } else if (lastTime >= frames[int(frameCount - 1)]) // Last time is after last frame. return; if (time < frames[0]) return; // Time is before first frame. @@ -73,12 +73,12 @@ public class EventTimeline implements Timeline { frameIndex = Animation.binarySearch(frames, lastTime, 1); var frame:Number = frames[frameIndex]; while (frameIndex > 0) { // Fire multiple events with the same frame. - if (frames[frameIndex - 1] != frame) break; + if (frames[int(frameIndex - 1)] != frame) break; frameIndex--; } } for (; frameIndex < frameCount && time >= frames[frameIndex]; frameIndex++) - firedEvents.push(events[frameIndex]); + firedEvents[firedEvents.length] = events[frameIndex]; } } diff --git a/spine-as3/spine-as3/src/spine/animation/Listeners.as b/spine-as3/spine-as3/src/spine/animation/Listeners.as index 14c2fd852..b02ffbc94 100644 --- a/spine-as3/spine-as3/src/spine/animation/Listeners.as +++ b/spine-as3/spine-as3/src/spine/animation/Listeners.as @@ -42,7 +42,7 @@ package spine.animation { public function add (listener:Function) : void { if (listener == null) throw new ArgumentError("listener cannot be null."); - _listeners.push(listener); + _listeners[_listeners.length] = listener; } public function remove (listener:Function) : void { diff --git a/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as b/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as index eac7889d5..261aef3e0 100644 --- a/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/RotateTimeline.as @@ -37,7 +37,7 @@ import spine.Event; import spine.Skeleton; public class RotateTimeline extends CurveTimeline { - static private const LAST_FRAME_TIME:int = -2; + static private const PREV_FRAME_TIME:int = -2; static private const FRAME_VALUE:int = 1; public var boneIndex:int; @@ -52,7 +52,7 @@ public class RotateTimeline extends CurveTimeline { public function setFrame (frameIndex:int, time:Number, angle:Number) : void { frameIndex *= 2; frames[frameIndex] = time; - frames[frameIndex + 1] = angle; + frames[int(frameIndex + 1)] = angle; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { @@ -62,8 +62,8 @@ public class RotateTimeline extends CurveTimeline { var bone:Bone = skeleton.bones[boneIndex]; var amount:Number; - if (time >= frames[frames.length - 2]) { // Time is after last frame. - amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + if (time >= frames[int(frames.length - 2)]) { // Time is after last frame. + amount = bone.data.rotation + frames[int(frames.length - 1)] - bone.rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -72,19 +72,19 @@ public class RotateTimeline extends CurveTimeline { return; } - // Interpolate between the last frame and the current frame. + // Interpolate between the previous frame and the current frame. var frameIndex:int = Animation.binarySearch(frames, time, 2); - var lastFrameValue:Number = frames[frameIndex - 1]; + var prevFrameValue:Number = frames[int(frameIndex - 1)]; var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime); + var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); percent = getCurvePercent(frameIndex / 2 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - amount = frames[frameIndex + FRAME_VALUE] - lastFrameValue; + amount = frames[int(frameIndex + FRAME_VALUE)] - prevFrameValue; while (amount > 180) amount -= 360; while (amount < -180) amount += 360; - amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + amount = bone.data.rotation + (prevFrameValue + amount * percent) - bone.rotation; while (amount > 180) amount -= 360; while (amount < -180) diff --git a/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as b/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as index 059ec01ed..a701dab45 100644 --- a/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/ScaleTimeline.as @@ -46,22 +46,22 @@ public class ScaleTimeline extends TranslateTimeline { return; // Time is before first frame. var bone:Bone = skeleton.bones[boneIndex]; - if (time >= frames[frames.length - 3]) { // Time is after last frame. - bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + if (time >= frames[int(frames.length - 3)]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[int(frames.length - 2)] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[int(frames.length - 1)] - bone.scaleY) * alpha; return; } - // Interpolate between the last frame and the current frame. + // Interpolate between the previous frame and the current frame. var frameIndex:int = Animation.binarySearch(frames, time, 3); - var lastFrameX:Number = frames[frameIndex - 2]; - var lastFrameY:Number = frames[frameIndex - 1]; + var prevFrameX:Number = frames[int(frameIndex - 2)]; + var prevFrameY:Number = frames[int(frameIndex - 1)]; var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime); + var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); percent = getCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + FRAME_X] - lastFrameX) * percent - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + FRAME_Y] - lastFrameY) * percent - bone.scaleY) * alpha; + bone.scaleX += (bone.data.scaleX - 1 + prevFrameX + (frames[int(frameIndex + FRAME_X)] - prevFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + prevFrameY + (frames[int(frameIndex + FRAME_Y)] - prevFrameY) * percent - bone.scaleY) * alpha; } } diff --git a/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as b/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as index 982381c0e..dd25f0257 100644 --- a/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as +++ b/spine-as3/spine-as3/src/spine/animation/TranslateTimeline.as @@ -37,7 +37,7 @@ import spine.Event; import spine.Skeleton; public class TranslateTimeline extends CurveTimeline { - static internal const LAST_FRAME_TIME:int = -3; + static internal const PREV_FRAME_TIME:int = -3; static internal const FRAME_X:int = 1; static internal const FRAME_Y:int = 2; @@ -53,8 +53,8 @@ public class TranslateTimeline extends CurveTimeline { public function setFrame (frameIndex:int, time:Number, x:Number, y:Number) : void { frameIndex *= 3; frames[frameIndex] = time; - frames[frameIndex + 1] = x; - frames[frameIndex + 2] = y; + frames[int(frameIndex + 1)] = x; + frames[int(frameIndex + 2)] = y; } override public function apply (skeleton:Skeleton, lastTime:Number, time:Number, firedEvents:Vector., alpha:Number) : void { @@ -63,22 +63,22 @@ public class TranslateTimeline extends CurveTimeline { var bone:Bone = skeleton.bones[boneIndex]; - if (time >= frames[frames.length - 3]) { // Time is after last frame. - bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; - bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + if (time >= frames[int(frames.length - 3)]) { // Time is after last frame. + bone.x += (bone.data.x + frames[int(frames.length - 2)] - bone.x) * alpha; + bone.y += (bone.data.y + frames[int(frames.length - 1)] - bone.y) * alpha; return; } - // Interpolate between the last frame and the current frame. + // Interpolate between the previous frame and the current frame. var frameIndex:int = Animation.binarySearch(frames, time, 3); - var lastFrameX:Number = frames[frameIndex - 2]; - var lastFrameY:Number = frames[frameIndex - 1]; + var prevFrameX:Number = frames[int(frameIndex - 2)]; + var prevFrameY:Number = frames[int(frameIndex - 1)]; var frameTime:Number = frames[frameIndex]; - var percent:Number = 1 - (time - frameTime) / (frames[frameIndex + LAST_FRAME_TIME] - frameTime); + var percent:Number = 1 - (time - frameTime) / (frames[int(frameIndex + PREV_FRAME_TIME)] - frameTime); percent = getCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + FRAME_X] - lastFrameX) * percent - bone.x) * alpha; - bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + FRAME_Y] - lastFrameY) * percent - bone.y) * alpha; + bone.x += (bone.data.x + prevFrameX + (frames[int(frameIndex + FRAME_X)] - prevFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + prevFrameY + (frames[int(frameIndex + FRAME_Y)] - prevFrameY) * percent - bone.y) * alpha; } } diff --git a/spine-as3/spine-as3/src/spine/atlas/Atlas.as b/spine-as3/spine-as3/src/spine/atlas/Atlas.as index d1b1f07e7..2db583889 100644 --- a/spine-as3/spine-as3/src/spine/atlas/Atlas.as +++ b/spine-as3/spine-as3/src/spine/atlas/Atlas.as @@ -89,7 +89,7 @@ public class Atlas { textureLoader.loadPage(page, line); - pages.push(page); + pages[pages.length] = page; } else { var region:AtlasRegion = new AtlasRegion(); @@ -140,7 +140,7 @@ public class Atlas { region.index = parseInt(reader.readValue()); textureLoader.loadRegion(region); - regions.push(region); + regions[regions.length] = region; } } } diff --git a/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as b/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as index df4421e78..41cfc4517 100644 --- a/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as +++ b/spine-as3/spine-as3/src/spine/attachments/BoundingBoxAttachment.as @@ -50,10 +50,11 @@ public dynamic class BoundingBoxAttachment extends Attachment { var m11:Number = bone.m11; var vertices:Vector. = this.vertices; for (var i:int = 0, n:int = vertices.length; i < n; i += 2) { + var ii:int = i + 1; var px:Number = vertices[i]; - var py:Number = vertices[i + 1]; + var py:Number = vertices[ii]; worldVertices[i] = px * m00 + py * m01 + x; - worldVertices[i + 1] = px * m10 + py * m11 + y; + worldVertices[ii] = px * m10 + py * m11 + y; } } } diff --git a/spine-as3/spine-as3/src/spine/attachments/RegionAttachment.as b/spine-as3/spine-as3/src/spine/attachments/RegionAttachment.as index 1c16a3950..b421826d6 100644 --- a/spine-as3/spine-as3/src/spine/attachments/RegionAttachment.as +++ b/spine-as3/spine-as3/src/spine/attachments/RegionAttachment.as @@ -126,14 +126,22 @@ public dynamic class RegionAttachment extends Attachment { var m01:Number = bone.m01; var m10:Number = bone.m10; var m11:Number = bone.m11; - vertices[X1] = offset[X1] * m00 + offset[Y1] * m01 + x; - vertices[Y1] = offset[X1] * m10 + offset[Y1] * m11 + y; - vertices[X2] = offset[X2] * m00 + offset[Y2] * m01 + x; - vertices[Y2] = offset[X2] * m10 + offset[Y2] * m11 + y; - vertices[X3] = offset[X3] * m00 + offset[Y3] * m01 + x; - vertices[Y3] = offset[X3] * m10 + offset[Y3] * m11 + y; - vertices[X4] = offset[X4] * m00 + offset[Y4] * m01 + x; - vertices[Y4] = offset[X4] * m10 + offset[Y4] * m11 + y; + var x1:Number = offset[X1]; + var y1:Number = offset[Y1]; + var x2:Number = offset[X2]; + var y2:Number = offset[Y2]; + var x3:Number = offset[X3]; + var y3:Number = offset[Y3]; + var x4:Number = offset[X4]; + var y4:Number = offset[Y4]; + vertices[X1] = x1 * m00 + y1 * m01 + x; + vertices[Y1] = x1 * m10 + y1 * m11 + y; + vertices[X2] = x2 * m00 + y2 * m01 + x; + vertices[Y2] = x2 * m10 + y2 * m11 + y; + vertices[X3] = x3 * m00 + y3 * m01 + x; + vertices[Y3] = x3 * m10 + y3 * m11 + y; + vertices[X4] = x4 * m00 + y4 * m01 + x; + vertices[Y4] = x4 * m10 + y4 * m11 + y; } } diff --git a/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as b/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as index ec97f5736..12266d24c 100644 --- a/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as +++ b/spine-starling/spine-starling/src/spine/starling/SkeletonSprite.as @@ -91,7 +91,10 @@ public class SkeletonSprite extends DisplayObject implements IAnimatable { var image:SkeletonImage; image = regionAttachment.rendererObject as SkeletonImage; - if (image == null) image = SkeletonImage(AtlasRegion(regionAttachment.rendererObject).rendererObject); + if (image == null) { + image = SkeletonImage(AtlasRegion(regionAttachment.rendererObject).rendererObject); + regionAttachment.rendererObject = image; + } var vertexData:VertexData = image.vertexData;