2017-01-19 6 views
2

テクスチャの一部だけを表示するSKSpriteNodeを作成することはできますか?例えばSpriteKit部分テクスチャマッピング

は、私がx2=400からx1=300y1=600からy2=700のようなサイズ720x720のテクスチャの特定の領域を表示するサイズ100×100の正方形を作成することができますか?
ご協力いただきありがとうございます。

+1

SKCropNodeでこれを行うことができます:https://developer.apple.com/reference/spritekit/skcropnode – Whirlwind

+0

スプライト本体全体に完全なテクスチャを表示させたい、または完全なテクスチャのみのスプライトが必要なのですかスプライト本体の一部を表示しますか? – Knight0fDragon

+0

私がしようとしているのはパズルゲームです。テクスチャを取得し、テクスチャの異なる部分をそれぞれ表示するこのテクスチャから四角形を作成します。 –

答えて

2

あなたがパズルのピースとして使用するテクスチャの小さな塊にテクスチャを分割したい場合は、あなたがここでSKTexture(rect: in texture:)

を使用したい、それを使用する方法の例です:

let texture = SKTexture(...) //How ever you plan on getting main texture 
let subTextureRect = CGRect(x:0,y:0.width:10,height:10) // The actual location and size of where you want to grab the sub texture from main texture 
let subTexture = SKTexture(rect:subTextureRect, in:texture); 

あなたは今他のノードで使用するサブテクスチャのチャンクを持つ

+0

ありがとうございました! rect値を修正してうまくいきました。これらの投稿も役に立ちました。 http://stackoverflow.com/questions/30228104/what-is-happening-to-my-sprite-when-using-initrectintexture。 http://stackoverflow.com/questions/21874822/trying-to-use-only-a-portion-of-a-sktexture-using-texturewithrect-intexture。 –

3

はこのような何かを試してみてください:

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 

    let visibleArea = SKSpriteNode(color: .black, size: CGSize(width:100,height:100)) 

    let parentNode = SKSpriteNode(color: .white, size: CGSize(width:200, height:200)) 

    override func didMove(to view: SKView) { 

     let cropNode = SKCropNode() 

     let texture = SKSpriteNode(imageNamed: "Spaceship") 

     visibleArea.position = CGPoint(x: 0, y: 100) 
     cropNode.maskNode = visibleArea 

     cropNode.addChild(texture) 

     addChild(cropNode) 


    } 


    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
     if let touch = touches.first { 

      let location = touch.location(in: self) 

      let previousPosition = touch.previousLocation(in: self) 

       let translation = CGPoint(x: location.x - previousPosition.x , y: location.y - previousPosition.y) 

       visibleArea.position = CGPoint(x: visibleArea.position.x + translation.x , y: visibleArea.position.y + translation.y) 
     } 
    } 
} 

オーバーライドさtouchesMoved方法は、という理由だけで、より良い例でもあります。私はここで何をしたか、次のとおりです。

  • はSKCropNode
  • 作成SKSpriteNodeある
  • 定義された表示領域をマスクされることにテクスチャを追加し、実際に魔法を行い、作物のノードのマスクプロパティ、それを割り当て

ここでは結果である:

masking

+0

私はこのようなコマンドを避けなければならないことを知っていますが、私はそれを言わなければなりません。本当にありがとう! –

+0

私はそれを試しましたが、うまく動作しませんでした。私はこれをテストしている間に作物を使うことを学んだので、まだありがたいです。 –