我们知道SpriteKit中的Action,经常有两种形态,一种是确值形式:XXXTo,还有一种是增量形式:XXXBy。然而speedBy却是一个比较Bug的存在,难怪Tutorial的ActionsCatalog demo程序中留下了这样的评论:
// speedBy:duration
// TODO: BUG??? Getting unexpected behavior on this...
[self.turtle runAction:[SKAction repeatActionForever:
[SKAction sequence:@[
[SKAction moveByX:0 y:self.size.height * 1/6 duration:0.25],
[SKAction moveByX:0 y:-self.size.height * 1/6 duration:0.25],
[SKAction moveByX:0 y:self.size.height * 1/6 duration:0.25],
[SKAction moveByX:0 y:-self.size.height * 1/6 duration:0.25],
[SKAction speedBy:-0.5 duration:0.1],
[SKAction moveByX:0 y:self.size.height * 1/6 duration:0.25],
[SKAction moveByX:0 y:-self.size.height * 1/6 duration:0.25],
[SKAction moveByX:0 y:self.size.height * 1/6 duration:0.25],
[SKAction moveByX:0 y:-self.size.height * 1/6 duration:0.25],
[SKAction speedBy:0.5 duration:0.1],
]]
]];
这个sprite上下运动几下后就不动了,完全出乎作者意料。我们可以猜测的是sprite的速度经过多次乘以0.5之后趋于0了,所以不动了。然而文档关于该API的说明似乎是速度加的关系,令人费解。根据测试的结果发现speedBy设置负值和零值会立即停下来。一旦速度变化,那么moveByX的duration将不起作用。