【问题标题】:Drawing Shapes With Objective C使用 Objective C 绘制形状
【发布时间】:2012-03-09 05:31:58
【问题描述】:

我必须开发一个应用程序,它必须以“模拟人生”风格呈现六边形“地板”,类似于 this,但更简单。

我真的对 CoreGraphics 知之甚少或一无所知,对 OpenGL 一无所知,您会使用哪种方式以“简单”和“快速”的方式完成这项工作?

【问题讨论】:

  • 地板是否需要是一个真实的 3d 空间,带有可移动的相机和 3d 世界中的其他东西?或者它是一个固定的图像/视角?如果是前者,没有“微不足道”的 3d,您可能需要 GL。如果你需要一些非常简单和固定的东西,CG 会容易得多。
  • 嗯,一开始我想我不必移动地板,但我敢打赌这将是下一步......

标签: objective-c cocoa-touch opengl-es xcode4.2


【解决方案1】:

有无数种方法可以实现这一目标。当我读到它时,您正在寻找 2D 透视图,谢天谢地,对于没有 3D 渲染经验的任何人来说,它都更容易获得。您可以按照 sch 的建议探索使用 3rd 方库。

如果您想要一个“原生”解决方案,您的选择将是基于 CG 或基于图像/UIKit 的东西。两者都相对容易获得。

使用 Quartz/CG,基本上您将绘制一系列线条和弧线来组成您想要的形状。我通常在纸上画草图,然后在代码中画出我需要的粗略片段和组件;用CG命令绘制路径真的不是很难。您可以非常轻松地构建一个 shape-factory 类,然后在需要将形状放入视图中时,您只需请求给定大小的给定形状即可。

如果您不愿意在代码中绘制路径,您最后的选择是使用 UIKit。使用这种方法,您可以在 Photoshop 中创建形状,将它们切成图像,然后将它们放入 imageviews 和您的应用程序中。然后,您可以使用 CALayer 变换在 2.5d 空间中操作这些图像。如果您的需求不高,这是一种相对简单的方法,并且看起来不错。不幸的是,这种方法不是高度动态的,不能很好地扩展,并且可能根本无法满足您在屏幕上寻找的性能阈值。

【讨论】:

  • 我认为 UIKit 不能满足我的需求,因为我的图块必须是“可点击的”(我应该告诉 Tapable 吗?)...
  • 如果您使用 UIImageViews 上呈现的图像,它们完全支持所有交互/触摸事件。如果您最终使用 CALayers 转换这些图像,您会失去很多交互,但您仍然可以使用层 hitTest 来确定给定的图像/层是否被点击。
  • 我想补充一下,如果你可以只使用 2d 视图,例如,像俯视一个布置家具的房间,那么你可以将每个形状放在它自己的 imageview 中,然后用户然后可以非常轻松地拖动这些图像或点击它们。
  • 那么,假设您必须绘制一个地板,假设 10 个瓷砖 x 10 个瓷砖,您将使用一组 100 个图像视图,我以编程方式绘制六边形?
  • 您可以使用 [UIColor colorWithPatternImage:[UIImage imageNamed:@"oneHex"]] 制作单个图块(例如,一个六边形)的图案图像,然后将其作为背景颜色应用于任何尺寸的视图。
【解决方案2】:

你应该看看Cocos2D。它使这样的编程游戏变得更加容易。它还支持tile maps,您可以使用它来创建地板。

【讨论】:

    【解决方案3】:

    尝试使用CATransform3D 将透视应用于您的二维视图。相关问题:How do I apply perspective?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多