瀏覽代碼

Fixed animations without bone keys.

NathanSweet 12 年之前
父節點
當前提交
2e88c59280
共有 1 個文件被更改,包括 44 次插入42 次删除
  1. 44 42
      spine-lua/SkeletonJson.lua

+ 44 - 42
spine-lua/SkeletonJson.lua

@@ -162,50 +162,52 @@ function SkeletonJson.new (attachmentLoader)
 		local duration = 0
 
 		local bonesMap = map["bones"]
-		for boneName,timelineMap in pairs(bonesMap) do
-			local boneIndex = skeletonData:findBoneIndex(boneName)
-			if boneIndex == -1 then error("Bone not found: " .. boneName) end
-
-			for timelineName,values in pairs(timelineMap) do
-				if timelineName == TIMELINE_ROTATE then
-					local timeline = Animation.RotateTimeline.new()
-					timeline.boneIndex = boneIndex
-
-					local keyframeIndex = 0
-					for i,valueMap in ipairs(values) do
-						local time = valueMap["time"]
-						timeline:setKeyframe(keyframeIndex, time, valueMap["angle"])
-						readCurve(timeline, keyframeIndex, valueMap)
-						keyframeIndex = keyframeIndex + 1
-					end
-					table.insert(timelines, timeline)
-					duration = math.max(duration, timeline:getDuration())
-
-				elseif timelineName == TIMELINE_TRANSLATE or timelineName == TIMELINE_SCALE then
-					local timeline
-					local timelineScale = 1
-					if timelineName == TIMELINE_SCALE then
-						timeline = Animation.ScaleTimeline.new()
+		if bonesMap then
+			for boneName,timelineMap in pairs(bonesMap) do
+				local boneIndex = skeletonData:findBoneIndex(boneName)
+				if boneIndex == -1 then error("Bone not found: " .. boneName) end
+
+				for timelineName,values in pairs(timelineMap) do
+					if timelineName == TIMELINE_ROTATE then
+						local timeline = Animation.RotateTimeline.new()
+						timeline.boneIndex = boneIndex
+
+						local keyframeIndex = 0
+						for i,valueMap in ipairs(values) do
+							local time = valueMap["time"]
+							timeline:setKeyframe(keyframeIndex, time, valueMap["angle"])
+							readCurve(timeline, keyframeIndex, valueMap)
+							keyframeIndex = keyframeIndex + 1
+						end
+						table.insert(timelines, timeline)
+						duration = math.max(duration, timeline:getDuration())
+
+					elseif timelineName == TIMELINE_TRANSLATE or timelineName == TIMELINE_SCALE then
+						local timeline
+						local timelineScale = 1
+						if timelineName == TIMELINE_SCALE then
+							timeline = Animation.ScaleTimeline.new()
+						else
+							timeline = Animation.TranslateTimeline.new()
+							timelineScale = self.scale
+						end
+						timeline.boneIndex = boneIndex
+
+						local keyframeIndex = 0
+						for i,valueMap in ipairs(values) do
+							local time = valueMap["time"]
+							local x = (valueMap["x"] or 0) * timelineScale
+							local y = (valueMap["y"] or 0) * timelineScale
+							timeline:setKeyframe(keyframeIndex, time, x, y)
+							readCurve(timeline, keyframeIndex, valueMap)
+							keyframeIndex = keyframeIndex + 1
+						end
+						table.insert(timelines, timeline)
+						duration = math.max(duration, timeline:getDuration())
+
 					else
-						timeline = Animation.TranslateTimeline.new()
-						timelineScale = self.scale
+						error("Invalid timeline type for a bone: " .. timelineName .. " (" .. boneName .. ")")
 					end
-					timeline.boneIndex = boneIndex
-
-					local keyframeIndex = 0
-					for i,valueMap in ipairs(values) do
-						local time = valueMap["time"]
-						local x = (valueMap["x"] or 0) * timelineScale
-						local y = (valueMap["y"] or 0) * timelineScale
-						timeline:setKeyframe(keyframeIndex, time, x, y)
-						readCurve(timeline, keyframeIndex, valueMap)
-						keyframeIndex = keyframeIndex + 1
-					end
-					table.insert(timelines, timeline)
-					duration = math.max(duration, timeline:getDuration())
-
-				else
-					error("Invalid timeline type for a bone: " .. timelineName .. " (" .. boneName .. ")")
 				end
 			end
 		end