如何使用单触和核心动画为精灵表设置动画?

时间:2012-02-08 04:23:36

标签: ios xamarin.ios core-animation sprite

下面的代码是我现在所处的位置,我已经做到了这一点,所以我可以点击一个按钮,从精灵表上的一个精灵换到另一个精灵。我锻炼的基本原理可能是垃圾,我真的不知道自己在做什么!如果是这样的话,请务必指引我。

我想知道的是如何遍历我的精灵表中的所有精灵。目前,我可以通过按钮点击在第一个和第二个(仅一次)之间切换。

UIImageView test = new UIImageView();
test.Image = UIImage.FromFile("necromancerSpriteSheet.png");

CGImage img = test.Image.CGImage;
CALayer layer = new CALayer();

layer.Contents = img;
layer.Bounds = new RectangleF(0, 0, 128, 128);
layer.Position = new PointF(150, 250);

UIImageView theImage = new UIImageView();

layer.ContentsRect = new RectangleF(0, 0, 0.33f, 0.33f);
layer.RemoveAllAnimations();
theImage.Layer.AddSublayer(layer);

button.TouchUpInside += (s, e) => {             
    layer.ContentsRect = new RectangleF(0.33f, 0, 0.33f, 0.33f);
    layer.RemoveAllAnimations();
    theImage.Layer.AddSublayer(layer);
};

我希望这个过程是将所有子图层加载/初始化,然后以某种方式简单地循环它们。尽管如此,我还没有找到如何实现这一目标的运气。

这是我的测试spritesheet如果它有帮助...
necromancer spritesheet

1 个答案:

答案 0 :(得分:3)

有很多方法可以解决这个问题,但是如果你想使用CoreAnimation来驱动工作表上的动画,我的建议是你使用关键帧动画(CAKeyFrameAnimation)来驱动动画。

为简化起见,我只想将所有项目放在一行中,然后使用以下内容:

var anim = (CAKeyFrameAnimation) CAKeyFrameAnimation.FromKeyPath ("position.x");
anim.Values = new NSNumber [9];
var times = new NSNumber [9];
for (int i = 0; i < 9; i++){
    anim.Values [i] = NSNumber.FromFloat (i*WIDTH);
    times [i] = NSNumber.FromFloat (i/9f);
}
anim.CalculationMode = CAKeyFrameAnimation.CalculationDiscrete

您可能需要稍微调整一下动画,我在没有测试的情况下完成了上述操作。