动画编辑器最后一帧不会播放吗?

动画编辑器最后一帧不会播放吗?难道最后一帧必须和起始帧一样?感觉有点奇怪。

会播放最后一帧,选择不循环播就能看见了,如果是选择了循环播放,有可能在那个刻度的时候被跳过了,循环播放并不能保证在编辑器中每一帧都按照顺序播放,因此导致了此现象

这个问题我在rc0的版本上测试了下,无论勾选还是不勾选循环,最后第一帧都播放不出来, play的参数为play(“death”, -1, 0);

不知道哪里的问题

请问这个是只有RC出现的么?是否有用过其他版本呢?

印象里beat版本也有过,查看了下代码
float Tween::updateFrameData(float currentPercent)
{
if (currentPercent > 1 && _movementBoneData->delay != 0)
{
currentPercent = fmodf(currentPercent, 1);
}

float playedTime = ((float)_rawDuration - 1) * currentPercent;

是否上边一行导致playerTime永远不会到达最后一帧, 如果把这个-1去掉是否会有什么副作用,我自己在游戏里看,好像没什么影响

你去掉以后 没有出现什么空指针问题吗

不能去掉
_rawDuration 是size
_rawDuration-1 才是需要的

其实还有一个问题就是第一帧的帧事件

例如 我有两个movement 一个叫"make" 一个叫"use"

make在第一帧有帧事件 “checkContent” 最后一帧(倒数第二个关键帧)有 “doUse”
use在第一帧有事件 “checkContent” 最后一帧有 “doMake”

那么先执行make 在frameEventCallback(帧事件的回调函数)中接收到帧事件doUse的时候 获取armature 调用play(“use”)
use 第一帧的 checkContent 就会执行不到(最好别说监听movement回调里的start …… 需求不一样)

解决方法是play改为 play(“use”, 1) ╮(╯_╰)╭ 要是策划跟我计较起来这1帧duration的问题我该怎么办呐

帮 7 楼顶一下。

都是3.0 才出问题的么
2.x 会出问题么,记得应该修复这个问题了

10 楼说3.0修复这个问题了。


貌似只有关注了本帖才会收到消息?

额,我的意思是我记得以前修复了这个问题,不知道现在的2.x 和 3.0 还存在这个问题么?
可以发个demo给我 或者是 有办法让testcpp里面的demo 复现这个问题呢?

不可棱。 我用的一直是最新版 这个问题上个礼拜刚发现解决的

你指的是 引擎里面已经修复了还是你自己修复的呢?
如果是自己修复的,可以随便简绍一下是哪儿的问题么

我们也遇到了这个问题,后来发现这是编辑器的bug,具体修复看下面python代码,直接检查json文件

def fix_last_frame_add(hero_path):
if not hero_path.endswith(’/’):
hero_path += ‘/’
list_hero = os.listdir(hero_path)
for hero in list_hero:
json_path = hero_path
json_path += hero
json_path += ‘/Json/’
json_path += hero
json_path += ‘.json’
if not os.path.exists(json_path):
continue
handle_json = open(json_path)
obj_json = json.load(handle_json)
handle_json.close()
flag_change = 0
for lam in obj_json’animation_data’]:
for lmv in lam’mov_data’]:
frame_index = 0
for lmb in lmv’mov_bone_data’]:
num_bone = len(lmb’frame_data’])
if frame_index <= lmb’frame_data’]‘fi’]:
frame_index = lmb’frame_data’]‘fi’]
for lmb in lmv’mov_bone_data’]:
num_bone = len(lmb’frame_data’])
if frame_index <= lmb’frame_data’]‘fi’]:
m = lmb’frame_data’]-1]
n = lmb’frame_data’]-2]
# if m’fi’] == n’fi’] + 1:
# lmb’frame_data’] = lmb’frame_data’]:-1]
# flag_change += 1
# print ‘delete last frame …’
if lmv’dr’] != m’fi’] + 1:
lmv’dr’] = m’fi’] + 1
flag_change += 1
print “已修正 dr 导致的最后一帧问题”, hero, lmv’name’], lmb’name’], ‘dr =’, lmv’dr’]
if flag_change > 0:
data_json = json.dumps(obj_json, indent=2, sort_keys=True)
handle_json = open(json_path, ‘w’)
handle_json.write(data_json)
handle_json.close()
if flag_change <= 0:
print “\n\tdr 正常,(解决由索引值导致的最后一帧无法播放的bug)”

3.2 3.3 + ccs1.6 我这重来灭有播过最后一帧 --------------------------------

哦哈哈 这么老的帖子还有人顶 老夫深感欣慰

找到dr的值,如果不等于fi + 1,就修改成等于就可以了!

哈哈,楼主都是圣斗士了,我还在新手上路呢

灌水灌的多:877: