2013-04-16 21 views
3

我有一個CCSprite,它逐漸需要從一端線性耗盡,可以說從左到右。爲此,我試圖更改該精靈的textureRect屬性,以便從一端耗盡的部分是精靈顯示框的「外部」。改變由CCRenderTexture創建的CCSprite的textureRect

我以前做過這樣的事情與被從spritesheet.And它的工作perfectly.But我創建使用CCRenderTextureCCSprite加載並通過改變textureRect財產,整個精靈消失得到一個精靈。

第一張圖片是我從CCRenderTexture獲得的原始CCSprite。第二張圖片顯示了我想實現的目標。Sprite的黑色虛線矩形部分需要省略。只有精靈的藍色虛線部分需要從本質上來說,這個藍色的虛線矩形是我的textureRect。

changing textureRect property to show only portion of the whole sprite

有什麼辦法,我怎麼能讓我的精靈從一端減少。 通常創建的精靈和使用CCRenderTexture創建的精靈之間也是有區別的。

+0

你可以顯示截圖嗎?單詞不夠清楚。 –

+0

剛剛做了一個編輯。看一看 –

+0

在使用一些低級別的黑客之前,我做過類似的事情。我無法直接提供代碼,因爲這是我的項目之一的商業祕密和核心部分。但我可以與你分享一些解決方案。 如果你使用'CCProgressTimer',那麼解決方法是非常簡單的,而且我認爲它對你來說已經足夠了。 如果你有一些「特殊」要求,比如「我怎樣才能刪除精靈的圓圈部分」,那麼就需要一些低級別的攻擊。我認爲你應該向代碼展示如何用CCRenderTexture創建CCSprite。 –

回答

0

在使用一些低級別的黑客之前,我做過類似的事情。

有一個變通的解決方案,如果您使用CCProgressTimer,這是非常容易的,我想這應該夠你的例子。

但是你在評論中說,你有一些要求,比如「一氣呵成」,那麼就需要一些低級別的破解。從我的最後一個對象我的解決方案是:

1)獲取紋理圖像的原始數據。在cocos2d中,您可以使用CCRenderTexture,而在cocos2d-x中,您可以使用CCImage

2)CCRenderTexture有一個方法- (BOOL) saveToFile: (NSString *) name format: (tCCImageFormat) format 。您可以閱讀其源代碼,然後嘗試將其保存到二維數組中,而不是像byte raw[1024][768]。此數組中的每個元素代表圖片上的一個像素(類型可能不是byte,我不確定,幾乎忘記了細節)。格式必須是PNG,因爲需要透明。

3)直接修改原始數據,將像素的透明度設置爲0x0,使其消失。

4)重新初始化已修改一個CCRenderTexture使用圖像數據。

我不能提供直接將代碼,因爲是我的一個項目的商業祕密和核心部分。但我可以與你分享我的解決方案。您還需要了解一些關於PNG文件如何工作的知識。閱讀:

https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header

+0

我解決了我的問題。謝謝你的幫助。 –

0

原來我做一個愚蠢的mistake.While提供值的textureRect(的CGRect),我是在textureRect.origin.y實際​​上設置爲使我textureRect紋理的高度超越(高於)紋理區域。這解釋了爲什麼它們正在消失。