diff --git a/spine-c/spine-c/src/spine/Animation.c b/spine-c/spine-c/src/spine/Animation.c index 89d9270d0..f1fa75a34 100644 --- a/spine-c/spine-c/src/spine/Animation.c +++ b/spine-c/spine-c/src/spine/Animation.c @@ -112,6 +112,7 @@ void _spTimeline_init (spTimeline* self, ) { int i, n; self->frames = spFloatArray_create(frameCount * frameEntries); + self->frames->size = frameCount * frameEntries; self->frameCount = frameCount; self->frameEntries = frameEntries; self->vtable.dispose = dispose; @@ -120,6 +121,7 @@ void _spTimeline_init (spTimeline* self, for (i = 0, n = propertyIdsCount; i < n; i++) self->propertyIds[i] = propertyIds[i]; + self->propertyIdsCount = propertyIdsCount; } void spTimeline_dispose (spTimeline* self) { @@ -139,7 +141,7 @@ void spTimeline_setBezier(spTimeline* self, int bezier, int frame, float value, } int spTimeline_getFrameCount (const spTimeline* self) { - return self->frameCount / self->frameEntries; + return self->frameCount; } float spTimeline_getDuration (const spTimeline* self) { @@ -166,6 +168,7 @@ void _spCurveTimeline_init (spCurveTimeline* self, float cx2, float cy2, float time2, float value2)) { _spTimeline_init(SUPER(self), frameCount, frameEntries, propertyIds, propertyIdsCount, dispose, apply, setBezier); self->curves = spFloatArray_create(frameCount + bezierCount * BEZIER_SIZE); + self->curves->size = frameCount + bezierCount * BEZIER_SIZE; } void _spCurveTimeline_dispose (spTimeline* self) { diff --git a/spine-sfml/c/example/main.cpp b/spine-sfml/c/example/main.cpp index c5fe85df0..c2d01069f 100644 --- a/spine-sfml/c/example/main.cpp +++ b/spine-sfml/c/example/main.cpp @@ -94,12 +94,12 @@ void testcase (void func(spSkeletonData* skeletonData, spAtlas* atlas), const char* jsonName, const char* binaryName, const char* atlasName, float scale) { spAtlas* atlas = spAtlas_createFromFile(atlasName, 0); - - spSkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas, scale); + UNUSED(jsonName); + /*spSkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas, scale); func(skeletonData, atlas); - spSkeletonData_dispose(skeletonData); + spSkeletonData_dispose(skeletonData);*/ - skeletonData = readSkeletonBinaryData(binaryName, atlas, scale); + spSkeletonData *skeletonData = readSkeletonBinaryData(binaryName, atlas, scale); func(skeletonData, atlas); spSkeletonData_dispose(skeletonData); @@ -289,8 +289,8 @@ void raptor (spSkeletonData* skeletonData, spAtlas* atlas) { skeleton->y = 590; spSkeleton_updateWorldTransform(skeleton); - spAnimationState_setAnimationByName(drawable->state, 0, "walk", true); - spAnimationState_addAnimationByName(drawable->state, 1, "gun-grab", false, 2); + spAnimationState_setAnimationByName(drawable->state, 0, "walk", true); + spAnimationState_addAnimationByName(drawable->state, 1, "gun-grab", false, 2); sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - raptor"); window.setFramerateLimit(60); @@ -438,7 +438,7 @@ void coin (spSkeletonData* skeletonData, spAtlas* atlas) { float delta = deltaClock.getElapsedTime().asSeconds(); deltaClock.restart(); - drawable->update(delta); + drawable->update(delta - delta); window.clear(); window.draw(*drawable); @@ -625,17 +625,17 @@ void testMixAndMatch(spSkeletonData* skeletonData, spAtlas* atlas) { } int main () { - testcase(ikDemo, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f); - testcase(testMixAndMatch, "data/mix-and-match-pro.json", "data/mix-and-match-pro.skel", "data/mix-and-match-pma.atlas", 0.5f); - testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f); - testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 1.0f); - testcase(spineboy, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f); - testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl-pma.atlas", 0.5f); - testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin-pma.atlas", 0.5f); + // testcase(ikDemo, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f); + // testcase(spineboy, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f); + testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin-pma.atlas", 0.5f); + testcase(testMixAndMatch, "data/mix-and-match-pro.json", "data/mix-and-match-pro.skel", "data/mix-and-match-pma.atlas", 0.5f); + testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f); + testcase(test, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 1.0f); + testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl-pma.atlas", 0.5f); testcase(vine, "data/vine-pro.json", "data/vine-pro.skel", "data/vine-pma.atlas", 0.5f); testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 0.2f); testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor-pma.atlas", 0.5f); testcase(stretchyman, "data/stretchyman-pro.json", "data/stretchyman-pro.skel", "data/stretchyman-pma.atlas", 0.6f); - // testcase(testSkinsApi, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f); + testcase(testSkinsApi, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f); return 0; } diff --git a/spine-sfml/c/src/spine/spine-sfml.cpp b/spine-sfml/c/src/spine/spine-sfml.cpp index 0d37050c0..c207b7efd 100644 --- a/spine-sfml/c/src/spine/spine-sfml.cpp +++ b/spine-sfml/c/src/spine/spine-sfml.cpp @@ -151,11 +151,21 @@ SkeletonDrawable::~SkeletonDrawable () { spColorArray_dispose(tempColors); } +void printSkeleton(spSkeleton* skeleton) { + int i, n; + printf("===== Skeleton\n"); + for (i = 0, n = skeleton->bonesCount; i < n; i++) { + spBone *bone = skeleton->bones[i]; + printf("%s: %f, %f, %f, %f, %f, %f\n", bone->data->name, bone->a, bone->b, bone->c, bone->d, bone->worldX, bone->worldY); + } +} + void SkeletonDrawable::update (float deltaTime) { spSkeleton_update(skeleton, deltaTime); spAnimationState_update(state, deltaTime * timeScale); spAnimationState_apply(state, skeleton); spSkeleton_updateWorldTransform(skeleton); + printSkeleton(skeleton); } void SkeletonDrawable::draw (RenderTarget& target, RenderStates states) const { diff --git a/spine-sfml/cpp/example/main.cpp b/spine-sfml/cpp/example/main.cpp index 36815c12a..0745be1e6 100644 --- a/spine-sfml/cpp/example/main.cpp +++ b/spine-sfml/cpp/example/main.cpp @@ -462,7 +462,7 @@ void coin (SkeletonData* skeletonData, Atlas* atlas) { skeleton->setPosition(320, 320); skeleton->updateWorldTransform(); - drawable.state->setAnimation(0, "animation", true); + // drawable.state->setAnimation(0, "animation", true); sf::RenderWindow window(sf::VideoMode(640, 640), "Spine SFML - coin"); window.setFramerateLimit(60); @@ -477,7 +477,7 @@ void coin (SkeletonData* skeletonData, Atlas* atlas) { float delta = deltaClock.getElapsedTime().asSeconds(); deltaClock.restart(); - drawable.update(delta); + drawable.update(delta - delta); window.clear(); window.draw(drawable); @@ -615,13 +615,13 @@ DebugExtension dbgExtension(SpineExtension::getInstance()); int main () { SpineExtension::setInstance(&dbgExtension); + testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin-pma.atlas", 0.5f); testcase(ikDemo, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f); testcase(mixAndMatch, "data/mix-and-match-pro.json", "data/mix-and-match-pro.skel", "data/mix-and-match-pma.atlas", 0.5f); testcase(goblins, "data/goblins-pro.json", "data/goblins-pro.skel", "data/goblins-pma.atlas", 1.4f); testcase(owl, "data/owl-pro.json", "data/owl-pro.skel", "data/owl-pma.atlas", 0.5f); testcase(spineboy, "data/spineboy-pro.json", "data/spineboy-pro.skel", "data/spineboy-pma.atlas", 0.6f); testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor-pma.atlas", 0.5f); - testcase(coin, "data/coin-pro.json", "data/coin-pro.skel", "data/coin-pma.atlas", 0.5f); testcase(vine, "data/vine-pro.json", "data/vine-pro.skel", "data/vine-pma.atlas", 0.5f); testcase(tank, "data/tank-pro.json", "data/tank-pro.skel", "data/tank-pma.atlas", 0.2f); testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor-pma.atlas", 0.5f); diff --git a/spine-sfml/cpp/src/spine/spine-sfml.cpp b/spine-sfml/cpp/src/spine/spine-sfml.cpp index 2e573eee7..272dc1ebb 100644 --- a/spine-sfml/cpp/src/spine/spine-sfml.cpp +++ b/spine-sfml/cpp/src/spine/spine-sfml.cpp @@ -77,11 +77,21 @@ SkeletonDrawable::~SkeletonDrawable() { delete skeleton; } +void printSkeleton(Skeleton* skeleton) { + int i, n; + printf("===== Skeleton\n"); + for (i = 0, n = skeleton->getBones().size(); i < n; i++) { + Bone *bone = skeleton->getBones()[i]; + printf("%s: %f, %f, %f, %f, %f, %f\n", bone->getData().getName().buffer(), bone->getA(), bone->getB(), bone->getC(), bone->getD(), bone->getWorldX(), bone->getWorldY()); + } +} + void SkeletonDrawable::update(float deltaTime) { skeleton->update(deltaTime); state->update(deltaTime * timeScale); state->apply(*skeleton); skeleton->updateWorldTransform(); + printSkeleton(skeleton); } void SkeletonDrawable::draw(RenderTarget &target, RenderStates states) const {