天天看點

Cocos2D添加精靈紋理濾鏡實作圖像複古效果的轉換

大熊貓豬·侯佩原創或翻譯作品.歡迎轉載,轉載請注明出處. 如果覺得寫的不好請多提意見,如果覺得不錯請多多支援點贊.謝謝! hopy ;)

大家知道cocos2d本身是一個非常強悍的2d遊戲引擎,其中自帶了很多使用的圖像處理功能,但是别忘了apple自帶的core graphics裡也有很多強大的圖像處理功能,比如濾鏡 cifilter.

apple在ios上提供了近百種不同的濾鏡效果,可以用來友善快捷的渲染圖像.至于cifilter的具體使用大家可以參考蘋果cg程式設計相關的書籍,這裡由于篇幅原因不深入介紹了.

在這些濾鏡中,我們選擇一個複古類型的濾鏡(cisepiatone)來說明使用方法:

寥寥幾行代碼實作了将樣闆圖像轉換為濾鏡效果的輸出檔案.

接下來的關鍵就是如何将精力的紋理轉換為圖檔,下面是轉換方法:

顯示通過精靈大小設定對應渲染器的渲染大小,然後取得渲染後精靈的圖檔檔案.

因為用濾鏡處理圖檔對性能有不小的影響,是以為了效率因素,我們接下來寫一個緩存用來存放濾鏡過濾後的效果:

大家可以看到隻有在緩存中找不到對應ccspriteframe時才實際處理圖檔(傳回nil表示不在緩存中),否則直接使用之前處理過的圖檔,這樣可以極大的提升效率.

最後需要在sprite的精靈幀改變的時候調用濾鏡處理方法,是以我們重載其setspriteframe方法:

因為在濾鏡處理後也要修改精靈的spriteframe是以這裡用一個bool類型的變量_isrtcaused區分一下,否則必定死循環也 ;)

下面我們看一下實際的效果,這是正常遊戲人物的顯示:

Cocos2D添加精靈紋理濾鏡實作圖像複古效果的轉換

下面是應用複古濾鏡後人物的效果:

Cocos2D添加精靈紋理濾鏡實作圖像複古效果的轉換

最後是實際遊戲運作的效果,注意這是在模拟器上運作略有卡頓,在真機上還是很順暢的:

Cocos2D添加精靈紋理濾鏡實作圖像複古效果的轉換

可以看到所有遊戲人物的顯示都被複古化了,包括遊戲界面按鈕中的人物,因為我是在gc類上做的效果.

有了cocoa中強大的圖像處理能力更是對cocos2d如虎添翼,後面如果大家感興趣我們再說說其他特效,比如馬賽克效果,曝光效果等等,see you ;)