是否可以创建一个仅显示纹理的一部分的SKSpriteNode
?
例如,我可以创建一个大小为 100x100 的正方形来显示大小为 720x720 的纹理的特定区域,例如 x1=300
到 x2=400
和 y1=600
到 y2=700
?
感谢您的帮助。
最佳答案
尝试这样的事情:
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 并将其分配给 crop 节点的 mask 属性,这实际上起到了神奇作用
结果如下:
关于sprite-kit - SpriteKit 局部纹理贴图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41735213/