sprite-kit - SpriteKit 局部纹理贴图

标签 sprite-kit skspritenode

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

例如,我可以创建一个大小为 100x100 的正方形来显示大小为 720x720 的纹理的特定区域,例如 x1=300x2=400y1=600y2=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 属性,这实际上起到了神奇作用

结果如下:

masking

关于sprite-kit - SpriteKit 局部纹理贴图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41735213/

相关文章:

sprite-kit - Sprite Kit 在屏幕外从父级中删除 SKNode

ios - Swift:如何使用 Sprite 套件游戏实现额外的 View Controller ?

swift - 使用计时器与更新来运行游戏 SpriteKit

ios - 三 Sprite 节点碰撞

ios - 使用 SpriteKit 沿圆弧旋转 SKSpriteNode

xcode - 理解 SpriteKit 节点的概念

ios - 在 SpriteKit 中的 GameScene.swift 之前添加一个屏幕

swift - 从 SKScene 获取 SKLabelNode 的引用

swift - 如果我单击 "touches began",则更改 SKSpriteNode 的颜色返回我单击的颜色

swift - 对子弹施加冲量