使用整数的CGPoint等价类型是什么?

18

你好!

我喜欢在C语言中使用严格类型检查。因此,如果我需要使用整数,则不希望存储一个由浮点数构成的二维向量。苹果公司提供了与CGPoint等价且存储数据类型为整数的解决方案吗?

我已经实现了我的类型Vector2i和它的伴随函数Vector2iMake(),就像实现CGPoint一样,但我的内心深处有一种声音在呼喊:苹果公司早就考虑到这个问题了。


更新说明:

我需要一种能够在棋盘游戏中存储坐标的数据类型,而这些坐标肯定是整数类型。如果我要实现基于瓦片的回合制策略游戏或基于瓦片的RPG游戏,情况也是一样的。


6
这个评价有点严厉! - Marcelo Cantos
3
这是一个合理的问题。 - TechZen
4个回答

7

回答这个问题,我不知道“NSIntegerPoint”,但制作一个并不难:

首先,您可以创建一个名为“NSIntegerPoint”的结构体。然后,将x和y坐标定义为NSInteger类型的属性。

以下是示例代码:

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

嗨,我已经按照这个思路实现了一些东西。不过还是谢谢你! - Ivan Vučica

6
如果您将游戏板表示为存储在非稀疏嵌套数组中的对象,则可以考虑对NSIndexPath进行子类化或直接使用它。
来自类参考文档:
NSIndexPath类表示到嵌套数组集合中特定节点的路径。此路径称为索引路径。
索引路径中的每个索引都表示从树中一个节点到另一个更深的节点的子项数组中的索引。

不错,我没有想到这个。使用“initWithIndexes:length:”方法,看起来非常可用。在接受之前还有37分钟的等待时间,但是如果没有更多的Obj-C-ish方法出现,我认为这是继续前进的最佳方式。 - Ivan Vučica

3
根据iPhone应用程序编程指南,所有提供的点都是基于浮点数的。当您使用它们与屏幕一起工作(最终期望整数),无论如何都应该使用浮点数,以便独立于屏幕分辨率等因素。

3
浮点数被专门使用,因为整数在设备之间和转换过程中无法使用。CGPoint 不太像固定点,更像二维显示区域的百分比。当你开始通过缩放、旋转、扭曲等方式对对象进行变换时,表示屏幕上单个像素的固定点的概念完全消失了。你只剩下相对于变换区域的位置。 - TechZen
1
虽然您的回答是正确的,但它并没有解决我的问题,因为我不打算将其用于图形点 -- 我需要整数向量来表示棋盘游戏中的坐标等。当然,我需要基于float的向量来进行图形处理,并在那里广泛使用它们。正在更新问题。 - Ivan Vučica
好的。答案是:“可能不是”。上面的答案是解释为什么。 最后,您可以定义自己的结构(就像您所做的那样),或者使用类似NSIndexSet的东西。 - kpower

0

虽然它(显然)存在于Mac OS X上,但我找到的唯一与iPhone相关的参考资料并不来自苹果公司,实际上提到了veclib.framework是一个私有的苹果框架。 - Ivan Vučica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接