4

比較的小さな画像 (高さ 44 ピクセル) を使用し、それを拡大してピクセル アートの外観にしました。アンチエイリアシングが消えるようにフィルタリングモードを最も近いものに変更しようとしましたが、そうではありませんでした。エッジがぼやけて表示されます。同じ結果を得る背景で同じことを試しました。

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()

}
4

2 に答える 2

3

更新: 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 より後に到着した場合の単なる応急処置です。

于 2015-08-21T06:35:32.807 に答える
1

これは Xcode7 beta / iOS9 のバグです。Xcode 6 を使用している場合に機能します。

于 2015-07-28T08:22:00.950 に答える