下面的代码是我现在所处的位置,我已经做到了这一点,所以我可以点击一个按钮,从精灵表上的一个精灵换到另一个精灵。我锻炼的基本原理可能是垃圾,我真的不知道自己在做什么!如果是这样的话,请务必指引我。
我想知道的是如何遍历我的精灵表中的所有精灵。目前,我可以通过按钮点击在第一个和第二个(仅一次)之间切换。
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如果它有帮助...
答案 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
您可能需要稍微调整一下动画,我在没有测试的情况下完成了上述操作。