swift - 如何使用 spriteKit 在 swift 中在 Sprite 图像或纹理中切一个洞以显示其背后的内容

标签 swift sprite-kit skeffectnode

我想在 spriteKit 中显示一堆可拖动的图像。有些图像需要我动态地在图形中切一个洞,以便我可以看到图像后面的内容。当我在图像周围拖动时,我将能够通过我在图像中切出的孔看到其他图像。

如果您需要视觉效果,请考虑拼图游戏。

下面的这个堆栈交换链接看起来非常简单并且很有前途,但是白色圆圈切口似乎没有显示。至少在模拟器中不是这样。我必须看看通过 testflight 在我的 iPhone 上是否能获得更好的结果。

Draw a hole in a rectangle with SpriteKit?

最佳答案

使用这个

https://developer.apple.com/reference/spritekit/skcropnode

https://www.hackingwithswift.com/read/14/2/getting-up-and-running-skcropnode

“彩色部分中的任何内容都将可见,透明部分中的任何内容都将不可见。”

我取得了第一次成功。显然,接下来我需要努力定位。

var taMain  =  SKTexture(imageNamed: "landscape144.jpg")
var sprite1 = SKSpriteNode()
sprite1 = SKSpriteNode(texture: taMain)
sprite1.xScale = 2
sprite1.yScale = 2
sprite1.zPosition = 1


var cropNode:SKCropNode =  SKCropNode()
cropNode.xScale = 1
cropNode.yScale = 1
cropNode.position = CGPoint(x: 0, y: 0)
cropNode.zPosition = 2

cropNode.maskNode =   SKSpriteNode(imageNamed:  "maskimage3.png") 
cropNode.maskNode?.position = CGPoint(x: 0, y: 0)

cropNode.addChild(sprite1)
self.addChild(cropNode)

在触摸开始期间

for touch: AnyObject in touches {
//uncomment 2 lines to help you get your image positioned on screen.  
//   it moves the whole cut image + hole
//let location = touch.locationInNode(self)
//    cropNode.position = location   

//Or uncomment these 2 lines to move just the mask
//let location = touch.locationInNode(cropNode) 
//    cropNode.maskNode?.position =  location //moves just the hole
}

在触摸开始期间,如果您想将图像和孔一起移动并在屏幕上找出一个合适的位置,您可以取消注释“cropNode.position = location”行。或者,如果您想移动孔,可以取消注释“cropNode.maskNode?.position = location”。

仅当您的蒙版图像足以覆盖您要剪切的整个图像时,移动孔才有效。否则,你最终会失去比你预期更多的形象。因此,出于我的目的,我可能最终会制作高度/宽度完全相同的图像和蒙版图像。然后,根据我的需要,我将加载不同的蒙版图像。

我的图片:


带透明孔的蒙版 144 x 144 像素

Mask with transparent hole   144 by 144 pixels


横向 144 x 144 像素

Landscape   144 by 144 pixels


iPhone 6 模拟器的结果 - xcode 6.2

Results in iphone 6 simulator  - xcode 6.2


带透明孔的较大 mask

Larger Mask with transparent hole

关于swift - 如何使用 spriteKit 在 swift 中在 Sprite 图像或纹理中切一个洞以显示其背后的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41004925/

相关文章:

Swift:防止井字游戏双击?

ios - 有没有一种简单的方法可以在 SpriteKit 的计算中使用小数?

ios - 在 SKEffectNode 中设置自定义 CIColorCube 过滤器

macos - 查询图形功能以决定是否应用 GPU 密集型效果(通过 SpriteKit)

Swift- SKEffectNode 需要一段时间才能出现

ios - 尝试从文本字段获取纬度和经度时无法转换类型的值

Swift 3 大写字符串

ios - UIApplicationOpenURLOptionsKey.sourceApplication 可以为零吗?

swift - 执行 Action 时让 Sprite 节点规模变大?

swift - 如何知道 SKAction.repeat(action, count) 何时完成