iphone - 如何使用 Quartz 和 CGLayers 在背景上绘制 Sprite ?

标签 iphone cocoa core-graphics quartz-graphics

我是 Quartz 的新手,我正在努力理解苹果所说的非常简单和直接的东西。

我创建了两个 CGLayer:一个用于固定背景,另一个用于 Sprite 。我希望这个 Sprite 能够移动。

背景上下文和 Sprite 上下文都是在屏幕外绘制的,我希望两者都能在屏幕上看到。

为了做到这一点 - 我不确定这是否是正确的方法 - 我做了以下操作:

  1. 我创建了一个 UIImageView
  2. 我已使用

    捕获了图层的内容

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

这在屏幕上显示了两个 quartz 层的内容。

现在我有两个问题:

  1. 这种方法非常慢
  2. 当我移动图层时,我必须重复上述代码,即使这样做,图层也不会移动!!!

所以,iPhone 专家们,请告诉我是否有另一种方法可以用 quartz 来做到这一点,以及我必须做什么才能看到 Sprite 移动!!!!

感谢您的帮助!

最佳答案

使用 CALayer 的主要原因是让 GPU 直接合成到屏幕内存上。使用 UIGraphicsGetImageFromCurrentImageContext() 会导致图像在 GPU 上合成,传输到主内存,然后再次返回以将其绘制在屏幕上,这会非常慢。您应该做的是将新图层设为 View 图层的子图层:

[self.view.layer addSublayer:myNewLayer];

有关如何在游戏中使用 CALayer 的好示例,请参阅:GeekGameBoard

关于iphone - 如何使用 Quartz 和 CGLayers 在背景上绘制 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1401122/

相关文章:

ios - 如何限制 UITextField 在 Swift 中只取数字?

objective-c - Cocoa 可以在 FileMaker 插件中使用吗?

objective-c - 回应二传手

ios - 如何检查 CGContext 是否包含点?

macos - 如何使虚线可移动

iphone - 检查以编程方式生成的 ImageView 的相交

iphone - 如何使用 CoreMidi 将 Midi 时间码转换为实际时间

iphone - 在 Xcode 4 中将文件添加到单独的目标

iphone - 找不到 'NSPasteboardWriting' 的协议(protocol)声明

ios - 使用 CoreGraphics 在 iPhone 上绘制简单的线条