2014-02-12 26 views
5

我有一個iOS應用程序使用精靈套件,我準備添加我的作品。藝術品是像素藝術品,內在非常小巧。我試圖找到辦法來顯示這一點的最好方式,其中:如何在應用程序中使用像素藝術?

  1. 所有的藝術是相同的大小,即一個像素佔據了現實世界中的像素的確切數額在所有其他圖片。

  2. 嘗試使紋理看起來更平滑時,不會出現模糊現象,這通常會在縮放圖像時發生。

我試圖解決第二個像這樣:

self = [super init]; 
if(self){ 
    self.size=size; 
    self.texture = [SKTexture textureWithImageNamed:@"ForestTree1.png"]; 
    self.texture.filteringMode = SKTextureFilteringNearest; 

    [self.texture size]; 
} 
return self; 

上面的代碼是在SKSpriteNode的初始化,這將具有紋理。

這是我原來的圖像(放大,以供參考):

的問題是,我的成績一直是這樣的:

its blurry!!!!!

(底部被偏移的樹幹不是這個問題的一部分。)我沒有使用任何運動模糊或類似的東西。我不確定它爲什麼不能正確顯示。

編輯1: 我沒有提到上面提到的截圖時樹木一直在動畫。當他們還在他們看起來像這樣:

上面的影像是兩棵樹有一個重疊的,因爲一個錯誤的翻轉導致稍後固定。我的問題是現在如何在動畫發生時防止圖像模糊?

編輯2:

我加入樹的多個實例,每一個加載相同的紋理。我知道它是與動畫無關,因爲我更改了代碼以添加一棵樹並對其進行動畫處理,並且它完美地像素化。

+0

什麼樣的動畫?你改變精靈的大小嗎?如果是這樣,請嘗試在每次更改大小時設置最近的過濾器,這可能有幫助如果樹木在屏幕上移動,模糊可能僅僅是由於LCD餘輝/運動模糊。看到這個答案:http://stackoverflow.com/a/21466168/201863 – LearnCocos2D

+0

你看到模擬器或設備上的模糊? – user688518

+0

@ LearnCocos2D我在'SKScene'的每個'update:'調用中改變樹的位置。它正在模擬器中運行。也許當我定位它時,它會在像素之間呈現?我試着每次都設置過濾器,但是我沒有改變任何東西。 – 68cherries

回答

0

我已經解決了這個問題...但它真的是一個黑客。我有一個SKScene這是所有「樹」(SKSpriteNodes)的父節點。這個場景將會爲自己添加多個樹。起初我認爲這是一些問題,因爲如果我只添加一棵樹,它會正確顯示圖像。 answer to this question使我相信我需要以編程方式在(紋理在SKTextureAtlas中)創建一個SKTextureAtlas單例,並將它傳遞給樹類以從init方法獲取紋理。 我在SKScene中創建了一個屬性來保存紋理圖集,以便每次創建新類時都可以將它傳遞給樹類。我嘗試使用textureNamed:方法從紋理地圖集(在樹類中)加載紋理。這仍然沒有工作。我轉回到用SKTexture的textureWithImageNamed:方法加載紋理,它工作。更進一步,我更改爲代碼回來,以便樹子類將不會被髮送單身人士在所有,它仍然工作。

SKScene我得到使用紋理圖集:

[SKTextureAtlas atlasNamed:@"Textures"]; //Textures is the atlas name. 

,並設置返回值是上述SKTextureAtlas財產。我想,也許地圖集剛剛在代碼中的某個時間點進行初始化,所以我想這:

SKTextureAtlas *myAtlas = [SKTextureAtlas atlasNamed:@"Textures"]; 

和單獨在一行如下:

[SKTextureAtlas atlasNamed:@"Textures"] 

但既不工作。 顯然我需要在我的樹的父類中有一個屬性,它是SKTextureAtlas,它擁有該樹使用的紋理,而不參考任何SKTextureAtlas ...這是一個小故障還是什麼?它現在正在工作,但它感覺像一個黑客。

0

圖像中的像素必須與屏幕上的像素完美對應。

如果您的圖像是100x100,並且您在105x105的整個屏幕上顯示它,它會進行插值來找出如何去做。

如果以2的倍數的縮放分辨率(它應該正常工作)顯示它,我想你還是必須告訴渲染器在縮放時不要插入像素。

+0

似乎沒有工作。我將'SKSpriteNode'的'size'屬性設置爲圖像大小的兩倍,並且仍然是插值。 – 68cherries

1

你需要使用 「最近」 過濾:

self.texture.filteringMode = SKTextureFilteringNearest; 
+0

我曾試過這樣做,我改變了它,看看它是否有所作爲。原來它沒有。 – 68cherries

0
[self setScaleMode:SKSceneScaleModeAspectFill]; 

SKTexture* texture = [SKTexture textureWithImageNamed:@"image"]; 
[texture setFilteringMode:SKTextureFilteringNearest]; 

SKSpriteNode* imageNode = [SKSpriteNode spriteNodeWithTexture:texture]; 
[self addChild:imageNode]; 

適合我。有沒有模糊動畫

+0

我很感激幫助,但我找到了解決方案並回答了我自己的問題。 – 68cherries

相關問題