【问题标题】:Objective-C iOS How to draw images to screenObjective-C iOS 如何将图像绘制到屏幕上
【发布时间】:2012-09-22 22:12:00
【问题描述】:

我打算为 iOS 设备创建游戏,我希望能够使用我自己的图像渲染器类将图像绘制到屏幕上。

我正在寻找一种类似于 microsoft XNA 中使用的方法,您可以在其中每帧绘制图像,我想知道如何去做。

我之前在 Objective-c 方面有过经验,而且我在 C# 方面也非常有经验(我确实知道这是一个不同的球类游戏),但我有一半期望 CoreGraphics 就像 c# 中的图形对象。但是,我无法将头绕在屏幕上。我能找到的唯一方法是重写他的 drawRect 方法,但这对我来说没用,因为我将在不同的时间绘制不同的东西并且需要它是动态的。

我考虑过使用核心图形绘制每个图像,并且我还考虑过另一种方法,即为每个图像中的每个像素绘制一个 1 px 矩形,但我不知道它的效果如何。

所以我需要帮助: - 从单独的图像渲染器类中的方法绘制图像(或矩形)。

  • 如何绘制类似于 microsoft xna 中的每一帧的图像。

在此先感谢您的帮助,我对这篇长文表示感谢。

【问题讨论】:

    标签: objective-c image graphics drawing


    【解决方案1】:

    从单独图像中的方法绘制图像(或矩形) 渲染器类。

    这可以使用 UIGraphicsBeginImageContext 和 UIGraphicsEndImageContext 代码块来完成。该技术基本上是,您开始图像上下文,使用您的绘图代码,从图像上下文获取 UIImage 引用并结束图像上下文。

    例如the answer to question "How do I use the NSString draw functionality to create a UIImage from text" 展示了如何从字符串创建图像。

    【讨论】:

      【解决方案2】:

      1) 对于所有“同步”部分,即每次刷新屏幕时绘制一个新帧,您应该使用CADisplayLink 类,该类允许您指定每次帧调用的您选择的方法需要绘制。

      被调用的方法会将CADisplayLink 对象作为其参数传递,您可以向该对象查询时间戳,从而知道需要绘制哪一帧。例如,如果您有一个球在移动的游戏,您可以将当前帧的时间戳与上一帧的时间戳进行比较,并知道经过了多少时间,因此您可能知道球的速度和最后位置,您可以轻松确定您需要绘制它的新位置。

      2) 对于其余部分,即所有绘图部分,除非您选择使用 OpenGL(在这种情况下,请查看 GLKit 以使您的代码更容易)您可以使用 Core Graphics 进行低级绘图自己。为此,您将在 Quartz 2D Programming Guide 中找到所需的一切,包括如何绘制像素 bezier 路径/矢量图形,以及如何在位图上下文中绘制屏幕外。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多