2011-03-06 37 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。