如何在精灵图像或纹理中剪切一个洞,以便在swift中使用spriteKit显示它背后的内容

时间:2016-12-06 21:07:21

标签: swift sprite-kit skeffectnode

我想在spriteKit中显示一堆可拖动的图像。一些图像需要我动态地在图形中切出一个洞,这样我才能看到图像背后的内容。当我拖动图像时,我将能够通过我在图像中剪切的孔看到其他图像。

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

下面的这个堆栈交换链接看起来非常简单和有希望,但白色圆形切口似乎没有显示。至少不在模拟器中。我必须看看我是否通过testflight在我的iphone上获得了更好的结果。

Draw a hole in a rectangle with SpriteKit?

2 个答案:

答案 0 :(得分:1)

这称为反掩蔽。此时,在SpriteKit中似乎没有一种简单的方法可以做到这一点。

你必须假装它。最简单的方法是复制背景,并对其进行正面掩饰。

这看起来像一个洞,但不是一个洞。

将这个积极掩盖的复制放置在洞的位置,在"奶酪上面#34;那是"洞"在里面。

以下是我之前尝试了解如何在SpriteKit中执行此操作的方法:How to cut random holes in SKSpriteNodes

答案 1 :(得分:1)

使用此

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)

和touchesbegan期间

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×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

带透明孔的大面罩

Larger Mask with transparent hole