【发布时间】:2011-03-06 16:59:41
【问题描述】:
我正在做一个学习练习,同时为我的孩子制作一个游戏。他有其中一个纸牌游戏(比如口袋妖怪),我们扫描了一堆,并试图制作一款他可以与“电脑”对战的游戏。所以游戏过程是你需要从选择你的卡片开始。我所做的是有一个类(Card(NSView 的子类),它由 IBOutlet(按钮)实例化,并将第一张卡片放在屏幕上以及滚动按钮 - 每次单击滚动按钮时,它都会确定下一张卡片应该是,然后调用一个方法(makeCard),该方法也实例化一个新卡片。
我不知道可可在这里做什么。 Card 基本上在它的 drawRect 中有一个对纹理图集的调用,我传入当前卡片的坐标来显示。这意味着每次我实例化 Card 时都会创建一个新的 NSView ,对吗?我本质上是在我的应用程序中构建一堆 NSView(因为每张卡的 x、y、w h)是相同的,我无法判断,但这在逻辑上似乎正在发生。它对应用程序速度没有影响,但似乎是不必要的混乱。
有没有一种方法可以只更新视图的一个实例中的图像,而不是为我要显示的每个实例实例化一张卡片?不管那个答案如何,一旦设置过程完成,我如何从窗口中删除视图? [查看 removeFromSuperview]?
明确地说,我不再想要卡片的视觉表示。由于所有卡片数据(包括纹理图集坐标)都存储在字典中,因此游戏设置部分只是吸引眼球。
另外,由于我在这里提出问题,如果没有 NSImage,我将如何从纹理图集中缩放图像。它们每个都是 180x250 像素,但在路上它们会出现在一个保持区域中,我宁愿它们不能是那个大小。
【问题讨论】:
-
这里有很多事情要做,如果你能画出你期望的东西(ascii 艺术或屏幕截图/图像)会有所帮助;另外,请描述您为什么要避免使用 NSImage。总体而言,您似乎正在尝试重新发明轮子并在多个地方进行不必要的优化。如果你想要一个可滚动的图像列表,你应该研究 NSTableView 和 NSCollectionView;如果你只想要一个你可以改变的图像,NSImageView。您最好不要将视图对象(卡片的描述)与模型对象(卡片)混为一谈。