bool ExampleLayer::init () { if (!CCLayer::init()) return false; atlas = new Atlas("spineboy.txt"); SkeletonJson json(atlas); json.scale = 0.5; skeletonData = json.readSkeletonData("spineboy-skeleton.json"); animation = json.readAnimation("spineboy-walk.json", skeletonData); CCSkeleton* skeletonNode = CCSkeleton::create(skeletonData); skeletonNode->state->setAnimation(animation, true); skeletonNode->debug = true; CCSize windowSize = CCDirector::sharedDirector()->getWinSize(); skeletonNode->setPosition(ccp(windowSize.width / 2, 20)); addChild(skeletonNode); return true; }
CCSkeleton* CCSkeleton::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) { CCSkeleton* node = new CCSkeleton(skeletonDataFile, atlasFile, scale); node->autorelease(); return node; }
CCSkeleton* CCSkeleton::createWithData (SkeletonData* skeletonData, bool ownsSkeletonData) { CCSkeleton* node = new CCSkeleton(skeletonData, ownsSkeletonData); node->autorelease(); return node; }
void CCSpineDebugDrawNode::draw() { CCObject* obj; CCARRAY_FOREACH(mSkeletons, obj) { CCSkeleton* skeletonNode = (CCSkeleton*) obj; const CCPoint skeletonPosition = skeletonNode->getPosition(); // Slots if (getIsDrawingSlotBoundingBoxes()) { const std::vector<Slot*>& slots = skeletonNode->skeleton->slots; ccV3F_C4B_T2F_Quad quad; // Green color for slot attachment bounding box ccDrawColor4B(0, 0, 255, 10); glLineWidth(1); for (int i = 0; i < slots.size(); i++) { if (slots[i]->attachment == NULL) continue; quad = ((RegionAttachment*) slots[i]->attachment)->quad; CCPoint points[4]; points[0] = ccpAdd(ccp(quad.bl.vertices.x, quad.bl.vertices.y), skeletonPosition); points[1] = ccpAdd(ccp(quad.br.vertices.x, quad.bl.vertices.y), skeletonPosition); points[2] = ccpAdd(ccp(quad.tr.vertices.x, quad.tr.vertices.y), skeletonPosition); points[3] = ccpAdd(ccp(quad.tl.vertices.x, quad.tl.vertices.y), skeletonPosition); ccDrawPoly(points, 4, true); } } // Bones if (getIsDrawingBones()) { const std::vector<Bone*>& bones = skeletonNode->skeleton->bones; Bone* bone = NULL; // Green color for bones glLineWidth(3); ccDrawColor4B(0, 255, 0, 255); // Bone line for (int i = 0; i < bones.size(); i++) { bone = bones[i]; float x = bone->data->length * bone->m00 + bone->worldX; float y = bone->data->length * bone->m10 + bone->worldY; ccDrawLine(ccpAdd(ccp(bone->worldX, bone->worldY), skeletonPosition), ccpAdd(ccp(x, y), skeletonPosition)); } // Bone head ccPointSize(5); // Root bone head is assigned blue color ccDrawColor4B(0, 0, 255, 255); for (int i = 0; i < bones.size(); i++) { bone = bones[i]; ccDrawPoint(ccpAdd(ccp(bone->worldX, bone->worldY), skeletonPosition)); // Restore green color for other bone heads if (i == 0) ccDrawColor4B(0, 255, 0, 255); } } }
CCSkeleton* CCSkeleton::create (SkeletonData* skeletonData) { CCSkeleton* node = new CCSkeleton(skeletonData); node->autorelease(); return node; }
CCSkeleton* CCSkeleton::create (SkeletonData* skeletonData, AnimationStateData* stateData) { CCSkeleton* node = new CCSkeleton(skeletonData, stateData); node->autorelease(); return node; }