【问题标题】:Equivalent of CGPoint with integers?CGPoint 等价于整数?
【发布时间】:2010-04-10 10:40:53
【问题描述】:

干杯,

我喜欢在 C 语言中严格输入。因此,如果我特别需要整数,我不想存储浮点数的 2D 向量。是否有 Apple 提供的 CGPoint 等价物将数据存储为整数?

我已经实现了我的类型 Vector2i 及其配套函数 Vector2iMake() à la CGPoint,但我内心深处的某些东西尖叫着说 Apple 已经在那里了。


更新解释。

我需要一个数据类型来存储棋盘游戏中的坐标。这些绝对是整数。如果我要实施基于图块的回合制策略或基于图块的 RPG,情况也是如此。

【问题讨论】:

  • 否决这有点苛刻!
  • +1 这是一个合理的问题

标签: iphone c objective-c core-graphics


【解决方案1】:

(直接回答问题……)

我不知道“NSIntegerPoint”,但制作一个并不难:

struct NSIntegerPoint {
   NSInteger x;
   NSInteger y;
};

还有以下内容:

CG_INLINE NSIntegerPoint
NSIntegerPointMake(NSInteger x, NSInteger y)
{
  NSIntegerPoint p; p.x = x; p.y = y; return p;
}

CG_INLINE bool
__NSIntegerPointEqualToPoint(NSIntegerPoint point1, NSIntegerPoint point2)
{
  return point1.x == point2.x && point1.y == point2.y;
}
#define NSIntegerPointEqualToPoint __NSIntegerPointEqualToPoint

【讨论】:

  • 嗨,我已经按照这些思路实现了一些东西。不过谢谢!
【解决方案2】:

如果您碰巧将您的游戏板表示为存储在非稀疏嵌套数组中的对象,那么您可能需要考虑子类化NSIndexPath,或直接使用它。

来自类参考:

NSIndexPath 类表示嵌套数组集合树中特定节点的路径。此路径称为索引路径。

索引路径中的每个索引都表示从树中的一个节点到另一个更深的节点的子数组的索引。

【讨论】:

  • 不错。我没有想到这一点。使用initWithIndexes:length: 方法,它看起来非常有用。我必须再等 37 分钟才能接受,但如果没有更多的 Obj-C-ish 出现,我认为这是继续前进的最佳方式。
【解决方案3】:

根据 iPhone 应用程序编程指南,所有提供的点都是基于浮点数的。当你使用它们来处理屏幕时(最终需要整数),无论如何你都应该使用浮点数来独立于屏幕分辨率等。

【讨论】:

  • +1 明确使用浮点数,因为整数不能跨设备和整个转换工作。 CGPoint 与其说是一个固定点,不如说它更像是显示区域的二维百分比。当您开始通过缩放、旋转、倾斜等方式变换对象时,在屏幕上表示单个像素的固定点的想法完全消失了。您只剩下转换区域内的相对位置。
  • 虽然您的回答是有效的,但它并没有解决我的问题,因为我不打算将它用于图形点——我需要整数向量来表示棋盘游戏中的坐标。我当然需要基于float 的图形矢量,并在那里广泛使用它们。更新问题。
  • 好的。答案是:“可能,不是”。上面的答案就是原因的解释。最后,您可以定义自己的结构(如您所做的那样)或使用类似 NSIndexSet 的东西。
【解决方案4】:

【讨论】:

  • 虽然它(显然)存在于 Mac OS X 上,但我发现的对 iPhone 的唯一相关引用并非来自 Apple,实际上提到 veclib.framework 是一个私有的 Apple 框架。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 2014-07-29
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多