瀏覽代碼

setSkin with no previous skin attaches setup pose attachments.

No more API gotcha, setSlotsToSetupPose is not needed.
NathanSweet 11 年之前
父節點
當前提交
cee7e3f336

+ 15 - 3
spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java

@@ -116,7 +116,7 @@ public class Skeleton {
 
 	public void setSlotsToSetupPose () {
 		Array<Slot> slots = this.slots;
-		System.arraycopy(slots.items, 0, drawOrder.items, 0, slots.size);		
+		System.arraycopy(slots.items, 0, drawOrder.items, 0, slots.size);
 		for (int i = 0, n = slots.size; i < n; i++)
 			slots.get(i).setToSetupPose(i);
 	}
@@ -203,10 +203,22 @@ public class Skeleton {
 	}
 
 	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
-	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
+	 * from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no old skin,
+	 * each slot's setup mode attachment is attached from the new skin.
 	 * @param newSkin May be null. */
 	public void setSkin (Skin newSkin) {
-		if (skin != null && newSkin != null) newSkin.attachAll(this, skin);
+		if (skin == null) {
+			Array<Slot> slots = this.slots;
+			for (int i = 0, n = slots.size; i < n; i++) {
+				Slot slot = slots.get(i);
+				String name = slot.data.attachmentName;
+				if (name != null) {
+					Attachment attachment = newSkin.getAttachment(i, name);
+					if (attachment != null) slot.setAttachment(attachment);
+				}
+			}
+		} else if (newSkin != null) //
+			newSkin.attachAll(this, skin);
 		skin = newSkin;
 	}
 

+ 0 - 1
spine-libgdx/test/com/esotericsoftware/spine/SkeletonTest.java

@@ -163,7 +163,6 @@ public class SkeletonTest extends ApplicationAdapter {
 		// Configure skeleton from UI.
 
 		skeleton.setSkin(ui.skinList.getSelected());
-		skeleton.setSlotsToSetupPose();
 		state.setAnimation(0, ui.animationList.getSelected(), ui.loopCheckbox.isChecked());
 	}