iPhone вытаскивает из кадра вопрос - PullRequest
0 голосов
/ 27 июля 2011

У меня есть вопрос, основанный на производительности моего приложения.

Сначала немного предыстории: Я занимаюсь разработкой приложения для iPhone, которое работает на моем MacBook без проблем, но немного отстает от моегоустройство iPhone 4 dev.Поэтому я начал искать причину и быстро ее нашел.Приложение представляет собой игру, в которой используется метод drawRect, запускаемый таймером.

Проблема: В этом drawRect я использую метод drawInRect: для рисования фона из UIImage.Поскольку я хочу, чтобы фон двигался, у меня есть изображение, которое шире, чем дисплей iPhone, и я рисую его до -400 пикселей маленькими шагами, запускаемыми таймером, а затем сбрасываю его на 0 пикселей, чтобы получить «эффект движения» в моемигра.Это, кажется, заставляет мое приложение отставать.Когда я рисую его внутри рамок iPhone, у меня нет проблем, поэтому я почти уверен, что это проблема.

Есть ли какие-то решения для этого?Лучше техникес и тд?Я не хотел бы использовать анимацию из нескольких изображений для анимации фона.

С уважением,

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Я просто перечитал этот вопрос и подумал над решением для этого. Вместо того, чтобы перерисовывать его каждые 1/30 секунды, почему бы вам просто не нарисовать его один раз и не переопределить фрейм, в котором находится изображение. Создайте метод, который делает это, а затем установите новый nstimer, который вызывает этот новый метод каждые 1 30 секунд. Как то так

-(void) movePicture {
    position += 5;
    if (position <= 0) {
        [moveTimer invalidate];
    }
    picture.frame = CGRectMake(position,10,10,10);
    [self.view setNeedsDisplay];
}

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

0 голосов
/ 27 июля 2011

Как вы перемещаете это изображение по экрану?Вы запускаете движение, скажем, каждые 1/30 секунды, потому что если это не так, это может быть причиной "запаздывающего" взгляда.Я предлагаю настроить новый NSRunLoop и включить в него это движение, и запускать этот цикл запуска каждые 1/30 секунды, чтобы получить частоту кадров 30 FPS, которая будет выглядеть плавно.

Кроме того, опубликуйте код, который вы используете для этого, и, возможно, мы сможем определить проблему.

...