SpriteKit部分纹理映射

时间:2017-01-19 06:31:49

标签: sprite-kit skspritenode

是否可以创建仅显示纹理的一部分的SKSpriteNode

例如,我可以创建一个大小 100x100 的正方形,显示大小 720x720 的纹理的特定区域,例如从x1=300到{{1} }和x2=400y1=600
谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

尝试这样的事情:

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

Overriden touchesMoved方法就是因为更好的例子。我在这里做的是:

  • 创建了SKCropNode
  • 为其添加了一个将被屏蔽的纹理
  • 定义了可见区域,即SKSpriteNode并将其分配给裁剪节点的掩码属性,这实际上是神奇的

结果如下:

masking

答案 1 :(得分:2)

如果你想将纹理分解为较小的纹理块以用作拼图,那么你想使用bash

以下是如何使用它的示例:

HttpClientBuilder clientBuilder = HttpClients.custom();
clientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, false));

您现在有一个子纹理块可用于其他节点。