天龙对skeleton文件做了一点小的改动, 要正确加载需要更改加载skeleton的代码.
对OgreSkeletonSerializer.cpp文件里面的SkeletonSerializer::readAnimationTrack函数进行修改.
void SkeletonSerializer::readAnimationTrack(DataStreamPtr & stream, Animation * anim,
Skeleton * pSkel)

{
// unsigned short boneIndex : Index of bone to apply to
unsigned short boneHandle;
readShorts(stream, & boneHandle, 1 );

// Find bone
Bone * targetBone = pSkel -> getBone(boneHandle);

// Create track
NodeAnimationTrack * pTrack = anim -> createNodeTrack(boneHandle, targetBone);

// Keep looking for nested keyframes
if ( ! stream -> eof())

{
unsigned short streamID = readChunk(stream);

// while(streamID == SKELETON_ANIMATION_TRACK_KEYFRAME && !stream->eof())
while ((streamID == SKELETON_ANIMATION_TRACK_KEYFRAME || streamID == 0x4120 ) && ! stream -> eof())

{
if (streamID == 0x4120 )

{
unsigned short len;
readShorts(stream, & len, 1 );
unsigned short flags;
readShorts(stream, & flags, 1 );

int count = (mCurrentstreamLen - 4 - 4 ) / 4 ;
if (len != count / 8 )
len = len;
float time;
for ( int i = 0 ; i < len; i += 1 )

{
readFloats(stream, & time, 1 );
TransformKeyFrame * kf = pTrack -> createNodeKeyFrame(time);

Quaternion rot = Quaternion::IDENTITY;
if (flags & 1 )

{
readObject(stream, rot);
}
kf -> setRotation(rot);

Vector3 trans = Vector3::ZERO;
if (flags & 2 )

{
readObject(stream, trans);
}
kf -> setTranslate(trans);
}
}
else
readKeyFrame(stream, pTrack, pSkel);

if ( ! stream -> eof())

{
// Get next stream
streamID = readChunk(stream);
}
}
if ( ! stream -> eof())

{
// Backpedal back to start of this stream if we've found a non-keyframe
stream -> skip( - STREAM_OVERHEAD_SIZE);
}

}

}