Spine设置Animation的一个BUG

不知道Spine(2.1)的版本和cocos2dx(3.3RC0)的版本是否不匹配导致的,反正已修复

问题:部分Animation名字为null导致崩溃,仿写某游戏的时候,数据文件(json)有这个动画一直提示未找到,甚至崩溃,跟踪到了,SkeletonData.c,修改如下

原代码

spAnimation* spSkeletonData_findAnimation (const spSkeletonData* self, const char* animationName) {
	int i;
	for (i = 0; i < self->animationsCount; ++i)
	{
		if (strcmp(self->animations[i]->name, animationName) == 0)
		{
			return self->animations[i];
		}
	}
	return 0;
}

修改后的代码

spAnimation* spSkeletonData_findAnimation (const spSkeletonData* self, const char* animationName) {
	int i;
	for (i = 0; i < self->animationsCount; ++i)
	{
		if (!self->animations[i]->name)continue;
		if (strcmp(self->animations[i]->name, animationName) == 0)
		{
			return self->animations[i];
		}
	}
	return 0;
}

 

 

 

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/803714

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您需要在 TimeScale 为0时播放Spine动画,您可以使用 SpineAnimationState.TrackEntry 的时间计算方法,而不是依赖于 Unity 的 TimeScale。AnimationState.TrackEntry 是 Spine 动画的播放单元,它包含了动画的时间、速度、循环方式等信息。 您可以通过 AnimationState.SetAnimation 方法创建一个新的 TrackEntry,并在其中设置 Spine 动画的时间、速度、循环方式等信息。然后,您可以使用 AnimationState.TrackEntry 的时间计算方法来手动更新 Spine 动画的播放时间。例如,您可以使用 AnimationState.TrackEntry 的 AnimationTime 属性来手动更新 Spine 动画的时间。 下面是一个示例代码片段,可以在 TimeScale 为0 时播放 Spine 动画: ```csharp using UnityEngine; using Spine.Unity; public class SpineTimeScale : MonoBehaviour { public SkeletonAnimation skeletonAnimation; private AnimationState.TrackEntry trackEntry; private float lastTime; private void Start() { trackEntry = skeletonAnimation.state.SetAnimation(0, "animationName", true); trackEntry.timeScale = 1.0f; lastTime = Time.realtimeSinceStartup; } private void Update() { float deltaTime = Time.realtimeSinceStartup - lastTime; trackEntry.AnimationTime = trackEntry.AnimationTime + deltaTime * trackEntry.timeScale; skeletonAnimation.state.Apply(skeletonAnimation.skeleton); skeletonAnimation.skeleton.UpdateWorldTransform(); lastTime = Time.realtimeSinceStartup; } } ``` 在上面的示例中,我们创建了一个新的 TrackEntry,并在其中设置Spine 动画的时间、速度、循环方式等信息。然后,我们使用 AnimationState.TrackEntry 的 AnimationTime 属性来手动更新 Spine 动画的时间。 请注意,这种方法可能会导致一些性能问题,因为我们需要频繁地手动更新 Spine 动画。因此,如果您需要在 TimeScale 为0时播放Spine动画,最好使用其他的时间计算方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值