2011-03-06 67 views
0

我正在做一个学习练习,同时为我的孩子做一个游戏。他拥有其中一款纸牌游戏(比如口袋妖怪),我们扫描了一堆,正在尝试制作一款可以与“电脑”对战的游戏。所以游戏过程是你需要从选择你的卡片开始。我所做的是有一个类(Card(NSView的子集),它通过一个IBOutlet(按钮)实例化并丢弃屏幕上的第一张卡片以及滚动按钮 - 每次单击滚动按钮时,它决定了什么下一张卡应该是,然后调用一个方法(制作卡),这也可以实例化一张新卡可可:删除NSView

我对这里的可可在做什么很模糊卡基本上有,在其drawRect中调用纹理图集,在当前显卡的坐标中,这意味着每次我实例化一张新的NSView时,是正确的?我基本上是在每张卡片的应用程序中创建一堆NSViews(因为x,y,wh)是一样的我不能告诉,但这似乎是逻辑上发生了什么事情。它不影响应用程序速度,但它似乎是不必要的混乱。

有没有一种方法可以在视图的一个实例中更新图像,而不是为每个要展示的卡片实例化一张卡片?不管答案如何,一旦完成设置过程,我如何从窗口中删除视图? [查看removeFromSuperview]?

要说清楚的是,我不再需要卡片的可视化表示。因为所有卡片数据(包括纹理图集坐标)都存储在字典中,所以游戏设置部分只有眼睛糖果。

此外,由于我在这里提出问题,因此如果没有NSImage,我将如何从纹理图集缩放图像。他们每个都是180x250像素,但是他们会在一个控股区域代表他们的路线,我宁愿他们不能达到这个规模。

+1

这里有很多事情要做,如果你可以画出(ascii艺术或截图/图像)你期望的东西,这将有所帮助;另外,描述你为什么要避免NSImage。总的来说,你似乎试图在几个地方重新发明轮子并进行不必要的优化。如果你想要一个可滚动的图像列表,你应该研究NSTableView和NSCollectionView;如果你只是想要一个单一的图像,你可以改变,NSImageView。您可能最好不要将视图对象(卡片的描述)与模型对象(卡片)混为一谈。 – 2011-03-06 17:10:48

回答

1

的回答你的问题的一部分,因为我无法弄清楚它的其余部分:

CGImageCreateWithImageInRect将让您创建一个更大的图像的一部分的参考,如你的纹理地图集。然后你可以创建一个NSImage(如果你使用的是10.6或更高版本,使用-[NSImage initWIthCGImage:size:],否则你需要使用create a NSBitmapImageRep first)。然后,您可以在NSTableView单元格,NSCollectionView或NSImageView中显示NSImage。