更新:
SKTexture の最も近いフィルタリング モードが Xcode 7 GM で動作するようになりました。以下で提案したように、画像を手動でスケーリングする必要はありません。
Xcode 7 beta 5 と beta iOS 9 で同じ問題が発生しています。Nearestフィルタリング モードは無視されているようです。私のプロジェクトでは、最近傍スケーリングによるスケーリングは、以前は iOS 8 の Xcode 6 で機能していました。
iOS 9 の最終リリースまでにバグが解決されない場合に備えて、それぞれのアトラスに配置する前に画像を事前にスケーリングしています。
これを行うために、単純な python スクリプトを作成して、再帰的に png ファイルを見つけ、imagmagickを使用してそれらをスケーリングしました。
imagemagick がインストールされていない場合は、次のようにmacportsを使用してインストールできます。
sudo port install ImageMagick
自作の場合は、次のようになります。
brew install imagemagick
このスクリプト (以下) を、アトラス ファイル (私の場合は 400% 拡大したい) の上のディレクトリ内の imgscaler.py というファイルに配置し、ターミナルから開始します。
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
スケーリングするパーセンテージに変更します。
ところで、このスケーリングの問題は最終的に解決されると思います。私は現在、この仮定を念頭に置いてコードを更新しています。 これは、SpriteKit の最近傍スケーリングに対する修正が iOS 9.0 より後に到着した場合の単なる応急処置です。