Cocoa:删除NSView

时间:2011-03-06 16:59:41

标签: cocoa nsview

我正在学习练习,同时为我的孩子制作游戏。他有一个纸牌游戏(如口袋妖怪),我们扫描了一堆,并试图制作一个他可以对抗“计算机”的游戏。所以游戏过程是你需要从选择你的牌开始。我所做的是有一个类(卡片(NSView的子),它由IBOutlet(按钮)实例化并丢弃屏幕上的第一张卡片以及滚动按钮 - 每次点击滚动按钮它确定什么下一张卡应该然后调用一个方法(makeCard),它也会实例化一张新卡。

我对可可在这里做的事情很模糊。卡基本上有,在其drawRect中调用纹理图集,我传递当前卡的坐标来显示。这意味着每次我实例化一个新的NSView正在制作,对吗?我本质上是在我的应用程序中构建一堆NSView(因为x,y,w h)每张卡都是我无法分辨的,但这似乎在逻辑上发生了什么。它对app速度没有影响,但似乎不必要的混乱。

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

为了清楚起见,我不再需要卡片的直观表示了。由于所有卡片数据(包括纹理图集坐标)都存储在字典中,因此只有用于设置游戏部分的眼睛糖果。

另外,由于我在这里提问,如果没有NSImage,我怎么能够从纹理图集中缩放图像。它们各自180x250px,但在路上它们将在一个保持区域中表示,我宁愿它们不能那么大。

1 个答案:

答案 0 :(得分:1)

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

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