我试着在他走的时候做一个精灵bob,但是不管我怎么做,它要么上下浮动,要么同时做两个动画,你实际上看不到它的移动。下面我已经发布了我目前拥有的代码。有没有人能纠正我?
我也尝试过使用动画代理和animationDidStop,但似乎也不起作用。
- (void)walkAnimation {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationRepeatCount:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatAutoreverses:TRUE];
CGAffineTransform bobUP = CGAffineTransformMakeTranslation(0, -10);
//CGAffineTransform bobDOWN = CGAffineTransformMakeTranslation(0, +10);
//CGAffineTransform bob = CGAffineTransformConcat(bobUP, bobDOWN);
_spriteLayer.affineTransform = bobUP;
[UIView commitAnimations];
_spriteLayer.affineTransform = CGAffineTransformIdentity;
}
发布于 2011-12-02 16:44:08
您不能将这两个变换绑定在一个动画中,就像您接近它的方式一样。该CGAffineTransformConcat创建了一个转换,表示一个接一个地进行转换。第一个将-10转换为y,第二个将+10转换为y。如果你一个接一个地做,你就回到了开始的地方。当您将结果变换指定给sprite层时,您只需告诉它根本不要移动。
您有两个选项来实现您正在寻找的目标:
选项1:查看关键帧动画(查看CAKeyframeAnimation)。这些将允许您通过动画指定不同点处的属性状态。这可能需要更多的学习,但最终结果可能更具可读性和可维护性。
选项2:有两个动画-每个翻译一个。在每个动画结束时,如果要继续上下浮动,请触发另一个动画。如果您以后需要进行更改,这可能会令人困惑,并且很难跟上。
另外,无论哪种方式,我都建议您使用常量作为转换值。魔术数字也将使未来的变化需要更多的努力。您还应该转向使用块动画制作UIView动画(请查阅animateWithDuration: animations :)
https://stackoverflow.com/questions/8357717
复制相似问题