由于各种原因还在使用1.9.3, 想了解一下是否使用不当导致的问题, 大概情况如下:
// 这样调用repeat是没问题的
shakeAction(node: cc.Node, time: number, shake: number, repeat: number) {
node.stopAllActions();
node.scale = 1;
node.runAction(
cc.sequence(
cc.sequence(
cc.scaleTo(time, 1 + shake, 1 - shake),
cc.scaleTo(time, 1 - shake, 1 + shake),
).repeat(repeat), // 这样调用repeat是没问题的
cc.scaleTo(time, 1),
)
);
}
// 这样调用repeat就有问题了
spfAction(sp: cc.Sprite, time: number, defSpf: cc.SpriteFrame, actSpf: cc.SpriteFrame, repeat: number) {
sp.node.stopAllActions();
sp.spriteFrame = actSpf;
sp.node.scaleX = 1;
sp.node.runAction(
cc.sequence(cc.sequence(
cc.delayTime(time),
cc.callFunc(() => sp.node.scaleX = -sp.node.scaleX), // 这个回调里打log, 大概率只会出现最后一次
// cc.delayTime(time), // 或者用2个delayTime包住一个callFunc, 也可以正常repeat
).repeat(repeat)),
cc.callFunc(() => {
sp.node.scaleX = 1;
sp.spriteFrame = defSpf;
}),
);
}
// 这样调用又没问题了
spfAction2(sp: cc.Sprite, time: number, defSpf: cc.SpriteFrame, actSpf: cc.SpriteFrame, repeat: number) {
sp.node.stopAllActions();
sp.spriteFrame = actSpf;
sp.node.scaleX = 1;
sp.node.runAction(
cc.sequence(
cc.repeat( // 用cc.repeat又可以解决了
cc.sequence(
cc.delayTime(time),
cc.callFunc(() => sp.node.scaleX = -sp.node.scaleX),
), repeat),
cc.callFunc(() => {
sp.node.scaleX = 1;
sp.spriteFrame = defSpf;
}),
)
);
}