mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-09 08:38:43 +08:00
[c] Fix frame and curve array initialization in timelines, add debugging methods.
This commit is contained in:
parent
315ad0e523
commit
a71d73928d
@ -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) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user