Способ получить максимальный контроль - хранить все ваши изображения в массиве.Если вы назвали свои изображения как-то как «frame.png» (то есть «frame1.png»), то вы можете быстро загрузить все ваши изображения следующим образом:
frames = [[NSMutableArray alloc] init]; // In header: NSMutableArray *frames;
for (int i = 1; i < 100; i++) // 100 can be replaced for any number of frames.
{
NSString *filename = [NSString stringWithFormat:@"frame%i.png", i];
[frames addObject:[NSImage imageNamed:filename]];
}
Это создает массив и заполняетэто с NSImage
s, названным в честь ваших файлов.%i
подставляется в строку для текущего значения i
.
Теперь вам понадобится другая переменная для отслеживания текущего кадра.Что-то вроде unsigned int currentFrame;
.Это можно увеличивать при каждом цикле обновления или устанавливать на определенное значение, предоставляя вам полный контроль над отображаемым фреймом.
Затем в цикле рендеринга вы можете рендерить любой сохраненный в данный момент фрейм следующим образом:
[(NSImage *)[frames objectAtIndex:currentFrame - 1] drawAtPoint:animPos fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0f];
где animPos
- точка NSP, содержащая позицию, в которой вы хотите нарисовать.- 1
есть в индексе, поэтому вы можете ссылаться на ваши кадры, начиная с 1, а не с 0. Этот код вытягивает изображение в кадре currentFrame
и отображает его на экране.
Поскольку вы используете массив, также убедитесь, что currentFrame
никогда не равно значению, превышающему максимальное количество кадров, что-то вроде: if (currentFrame > 100) currentFrame = 1;
.Это может привести к зацикливанию анимации, поскольку, когда она достигает последнего кадра, currentFrame будет возвращаться к начальному индексу массива.
Для получения дополнительной информации о рисовании вы должны посмотреть: Руководство по рисованию какао и Справочник по классу NSImage .Кроме того, если вам нужна дополнительная информация о том, как обновлять фрейм с каждым шагом времени, посмотрите NSTimer Class Reference .