2015-07-12 52 views
4

我使用了一個相對較小的圖像(44pixel高),並調整它有一個像素藝術外觀。我試圖將濾波模式更改爲最接近的,所以抗鋸齒將消失,但它沒有。它看起來模糊的邊緣。我嘗試了與獲得相同結果的背景相同。SKTexture最近的濾波模式不起作用(使像素技術)

let myNode = SKSpriteNode() 

class GameScene: SKScene { 


    func makeNode() { 

     myNode.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2) 
     myNode.size = CGSize(width: 200, height: 200) 
     myNode.texture = SKTexture(imageNamed: "image") 
     myNode.texture!.filteringMode = .Nearest 

     return self.addChild(myNode) 
    } 
} 
override func didMoveToView(view: SKView) { 

    makeNode() 

} 
+1

過濾模式是棘手的雪碧套件。首先,你是否使用Atlas?另外,如果在將紋理分配給節點之前設置紋理上的過濾模式,會發生什麼情況。 –

+0

我還沒有試過在這裏使用阿特拉斯,我應該嗎? 第二個建議看起來非常有前途,但正如我所看到的那樣,它不起作用。我猜你的意思是這樣的: '...'' 質地讓= SKTexture(imageNamed: 「圖像」)'' = texture.filteringMode .Nearest' 'myNode.texture = texture' '... ' 非常感謝您的回覆!我非常感謝你的時間和精力! –

+0

嗯,我不確定。我知道人們之前已經有所作爲。你在設備上運行嗎?什麼版本? –

回答

3

更新: SKTexture最接近的過濾模式現在工作在Xcode 7 GM。不需要按照我的建議手動縮放圖像。


我在使用beta iOS 9的Xcode 7 beta 5中遇到了同樣的問題; 最近的過濾模式似乎被忽略。在我的項目中,使用最近鄰居縮放的比例先前在iOS 8上的Xcode 6中有效。

如果在最終發佈iOS 9之前未解決該錯誤,我會在放置它們之前對圖像進行預縮放在他們各自的地圖冊中。

爲此,我寫了一個簡單的Python腳本遞歸找到PNG文件,並使用imagmagick縮放它們。

如果你沒有安裝ImageMagick的,則可以使用macports像這樣安裝:

sudo port install ImageMagick 

如果你有homebrew它看起來像這樣:

brew install imagemagick 

我只是把這個腳本(下圖)在一個名爲imgscaler.py目錄內我上面的圖冊文件(我想在我的情況下,400%的比例),並從終端開始它的文件:

python imgscaler.py 

腳本是這樣的:

import subprocess 
import os 
import sys 
import fnmatch 


def main(): 
    execution_folder_name = os.getcwd() 
    file_extension_name = "png" 

    # 
    # Collect names of files that will be manipulated 
    matches = [] 
    for root, dirNames, fileNames in os.walk(execution_folder_name): 
     for filename in fnmatch.filter(fileNames, '*.' + file_extension_name): 
      full_name = os.path.join(root, filename) 
      matches.append(full_name) 

    scale_percentage = "400" 

    if not __query_yes_no("This script will scale images by " + scale_percentage + "% recursively from directory " + execution_folder_name + ". Proceed?"): 
     return 

    # 
    # Scale the images 
    for match in matches: 
     execution_str = "convert " + match + " -interpolate Nearest -filter point -resize " + scale_percentage + "% " + match + "\n" 
     sys.stdout.write(execution_str) 
     __run_command(execution_str) 


def __run_command(input_cmd): 
    """Runs a command on the terminal, and returns the output in a string array. 
    """ 
    process = subprocess.Popen(input_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) 
    output = [] 
    while True: 
     line = process.stdout.readline() 
     if line != '': 
      output.append(line) 
     else: 
      break 

    return output 


def __query_yes_no(question, default="yes"): 
    """Asks a yes or no question, returns a true is answered "yes". 
    """ 
    valid = {"yes": True, "y": True, "ye": True, 
      "no": False, "n": False} 
    if default is None: 
     prompt = " [y/n] " 
    elif default == "yes": 
     prompt = " [Y/n] " 
    elif default == "no": 
     prompt = " [y/N] " 
    else: 
     raise ValueError("invalid default answer: '%s'" % default) 

    while True: 
     sys.stdout.write(question + prompt) 
     sys.stdout.flush() 
     choice = raw_input().lower() 
     if default is not None and choice == '': 
      sys.stdout.write(default) 
      sys.stdout.write('\n') 
      sys.stdout.flush() 
      return valid[default] 
     elif choice in valid: 
      sys.stdout.write(choice) 
      sys.stdout.write('\n') 
      sys.stdout.flush() 
      return valid[choice] 
     else: 
      sys.stdout.write("Please respond with 'yes' or 'no' (or 'y' or 'n').\n") 
      sys.stdout.flush() 


main() 

更改scale_percentage到要縮放以任何比例。

BTW,我猜測這個比例問題將最終得到解決。我正在考慮以這種假設更新我的代碼。 如果SpriteKit中最近鄰居縮放的修復晚於iOS 9.0,那麼這只是一個帶012。因爲有一些錯誤

+0

哇!多好的解決方案!我正在研究這個iOS項目,併爲此感到樂趣。我還有很多其他項目需要開展工作,所以我很抱歉地說,我沒有時間將這個美麗的作品實施到我正在開發的應用程序中。特別是我認爲這個bug將在下一次蘋果事件(9月9日)前後得到解決。但非常感謝你!我相信它完美的作品! –

1

這是Xcode7 beta/iOS9中的一個錯誤。它可以工作,如果你使用Xcode 6.