Как мне анимировать лист спрайта с помощью однотонной и основной анимации? - PullRequest
2 голосов
/ 08 февраля 2012

Код ниже, где я сейчас нахожусь, я сделал это, чтобы я мог нажать кнопку и переключаться с одного спрайта на листе спрайтов на другой.Основы, над которыми я работаю, могут быть чепухой, я действительно не знаю, что делаю!Во что бы то ни стало, держи меня прямо, если это так.

То, что я хочу знать, - это как перебрать все спрайты в моем листе спрайтов.В настоящее время я могу просто переключаться между первым и вторым (только один раз) нажатием кнопки.

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);
};

Я ожидаю, что процесс будет состоять из загрузки / инициализации всех подслоев, а затем просто зациклить их вкаким-то образом.Мне еще не повезло выяснить, как этого добиться.

Вот моя тестовая таблица, если она помогает ...necromancer spritesheet

1 Ответ

3 голосов
/ 09 февраля 2012

Существует много способов решения этой проблемы, но если вы хотите использовать 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

Возможно, вам придется немного подправить анимацию выше, я сделал выше, не тестируя.

...