2016-12-15 7 views
4

を失うことなく、私はSKSpiteNodeを持っている:は品質

private var btnSound = SKSpriteNode(imageNamed: "btnSound") 

は今、私は(やり過ぎ本当に)2048×2048ピクセルのサイズではAdobe Illustratorでこの画像を作ったので、それは優れた分解能を持っています。私の問題は、画像のサイズを設定したときに、画像のラインがぎざぎざになったり、ギザギザになったりします...滑らかではありません。 imageイラストレーター(スクリーンショット)で、これは私が試してみましたimage

物事アプリ(スクリーンショット)の画像があるとき

 btnSound.position = CGPoint(x: self.frame.width * 1/5 , y: self.frame.height * (5.2/8)) 
     btnSound.size.width = self.frame.width * 1/7 
     btnSound.size.height = btnSound.size.width 
     btnSound.zPosition = 1 
     self.addChild(btnSound) 

これはイメージです:

これは私がそれをサイズ方法です。

  • 画像PNG
  • 作る画像PDF
  • を作ります
  • 私はUIGraphicsBeginImageContext方法に精通していないですけれども、それ300 DPI
  • シミュレータ/デバイス上のファイル名を指定して実行(iPhone7)
  • btnSound.setScale(preDetermineScale)
  • は、以下の機能を使用して作る、PNG 72 DPIを作ります。これで画像がぼやけてしまいます。相続人は、コードと結果の画像:私は自分が教えと私のように正しくこれを行う方法を学ぶのが大好きですので、プログラミングの全体の多くを行っていないよ

    func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage? { 
    
    let scale = newWidth/image.size.width 
    let newHeight = image.size.height * scale 
    UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight)) 
    image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)) 
    
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    
    return newImage 
    } 
    
    func setup() { 
    let btnSoundImg = UIImage(named: "btnSound") 
    let resizeBtnSoundImage = resizeImage(image: btnSoundImg!, newWidth: self.frame.width * 1/7) 
    let btnSoundTexture = SKTexture(image: resizeBtnSoundImage!) 
    
    btnSound.texture = btnSoundTexture 
    btnSound.position = CGPoint(x: self.frame.width * 1/5 , y: self.frame.height * (5.2/8)) 
    btnSound.size.width = self.frame.width * 1/7 
    btnSound.size.height = btnSound.size.width 
    btnSound.zPosition = 1 
    self.addChild(btnSound) 
    } 
    

blurry image

私は、UIImageViewsのサイズを変更するためのソリューションを見つけるだけです。

私が持っていたもう一つの考えは、ボタンのためだけに使用されているspriteNodeであってはならないかもしれないという考えでしたか?

+0

を与えるスケーリングするためのPhotoshopの賢明な使用されているようにあなたのアプリで? – Nik

+0

それはそれを修正するようではありません。私はそれらを大きくするので、後でもっと高い解像度でそれらを必要とするなら、私はそれらを調整することができます。また、デバイスの種類によって異なります。 – Steve

+1

btnSoundイメージにはどのような拡張機能がありますか?また、私はSpriteKitのスプライトに固執することをお勧めします。 UIKit要素を使用するには、いくつかの追加作業が必要です。別のシーンに遷移するときには、(ノードツリーの一部であるノードとは異なり)シーンにではなくビューに追加されるため、UIKit要素を手動で削除する必要があります。 – Whirlwind

答えて

7

まず最初に、最良の結果を得るために従うべきいくつかの原則があります。

  1. 等2.すなわち、50%、25%、12.5%6.25%の要因によってのみスケール

    このように、元の画像内の任意の4つの画素をするため、あなたのスケーリングされた画像内の1つのピクセルになりますそれぞれの段階でスケールが小さくなります。

  2. 元画像に指数2の正方形を作成します。したがって、128x128,256x256,512x512などです。既に2048x2048のサイジングでこれをカバーしています。

  3. ミップマッピングをオンにします。 https://developer.apple.com/reference/spritekit/sktexture/1519960-usesmipmaps

  4. あなたの画像のノイズやバンディングの最良の削減を得るために異なるフィルタリングモードで遊ぶ:あなたが上でそれを切り替える必要がありますのでこれは、SpriteKitベースでは、デフォルトでは、オフになってhttps://developer.apple.com/reference/spritekit/sktexture/1519659-filteringmodeヒント、リニアは、おそらくになりますより良い。

  5. 常に場合、手動でなぜあなたはちょうどそれが可能になるというサイズで、あなたのイメージを作成していないあなたに最高の結果と少なくとも柔軟性

+0

これは私のブックマークに入れられています... – Fluidity

+0

すばらしい応答をありがとう。私はミップマップを見ていましたが、以前は使用していませんでした。あなたはそれがどのように機能するか、あるいはこの特定の質問に少しだけ関与しているかについての例を挙げることができますか? – Steve