更新: 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。因爲有一些錯誤
過濾模式是棘手的雪碧套件。首先,你是否使用Atlas?另外,如果在將紋理分配給節點之前設置紋理上的過濾模式,會發生什麼情況。 –
我還沒有試過在這裏使用阿特拉斯,我應該嗎? 第二個建議看起來非常有前途,但正如我所看到的那樣,它不起作用。我猜你的意思是這樣的: '...'' 質地讓= SKTexture(imageNamed: 「圖像」)'' = texture.filteringMode .Nearest' 'myNode.texture = texture' '... ' 非常感謝您的回覆!我非常感謝你的時間和精力! –
嗯,我不確定。我知道人們之前已經有所作爲。你在設備上運行嗎?什麼版本? –