Как нарисовать спрайт на фоне с помощью Quartz и CGLayers? - PullRequest
0 голосов
/ 09 сентября 2009

Я новичок в Кварце, и я изо всех сил пытаюсь понять, что Apple говорит, что это очень легко и просто.

Я создал два CGLayers: один для фиксированного фона и другой для спрайта. Я хочу, чтобы этот спрайт переместился.

И фоновый контекст, и контекст спрайта прорисованы вне экрана, и я бы хотел, чтобы оба они были видны на экране.

Чтобы сделать это - и я не уверен, что это правильный путь - я сделал следующее:

  1. Я создал UIImageView
  2. Я захватил содержимое слоя, используя

    resultImage = UIGraphicsGetImageFromCurrentImageContext ();
    myView.image = resultImage;

Это показывает мне на экране содержимое обоих кварцевых слоев.

Теперь у меня две проблемы:

  1. Этот подход медленный, как ад
  2. Когда я перемещаю слой, я должен повторить упомянутый код и ДАЖЕ ДЕЛАЯ ЭТО, СЛОЙ НЕ ДВИЖЕТСЯ !!!!

Итак, пожалуйста, гуру iPhone там, пожалуйста, скажите мне, если есть другой способ сделать это с кварцем и что я должен сделать, чтобы увидеть движение спрайта !!!!

спасибо за любую помощь!

1 Ответ

2 голосов
/ 09 сентября 2009

Основная причина использования CALayer s состоит в том, чтобы заставить графический процессор компоноваться непосредственно в экранную память. Использование UIGraphicsGetImageFromCurrentImageContext() приводит к компоновке изображения на графическом процессоре, его переносу в основную память и затем обратно, чтобы нарисовать его на экране, что будет очень медленно. Вместо этого вам следует сделать новые слои подуровнями слоя вашего вида:

[self.view.layer addSublayer:myNewLayer];

Хороший пример использования CALayer s в игре см. GeekGameBoard

...