gpt4 book ai didi

swift - SpriteKit : Change color of part of sprite which is intersecting with another sprite

转载 作者:可可西里 更新时间:2023-11-01 02:02:47 25 4
gpt4 key购买 nike

我有两个 SKSpriteNodes,它们是纯色(红色和蓝色)的基本矩形。

当用户拖动它们时。我想检查两个节点是否相交并更改与第二个节点相交的第一个节点部分的颜色。

我可以通过使用节点的 .intersects(..) 属性来判断节点是否相交。

但我无法弄清楚如何获得实际的交叉区域以及如何为节点的那部分着色使其不同于其原始颜色。

最佳答案

它可能会变得有点古怪,但是在您的节点通过相交检查之后:

//Note: I am assuming both frames are on the same parent node, you may need to convert if parents are different

let intersection = sprite1.frame.intersection(sprite2.frame)

我们现在有了矩形交叉点,所以让我们制作一个彩色 Sprite

let miniSprite = SKSpriteNode(color:.red,size:intersection.size) 
miniSprite.alpha = 0.5

将其添加到场景中

sprite1.parent.addChild(miniSprite)

设置位置

miniSprite.anchorPoint = CGPoint(x:0.0,y:0.0)
miniSprite.position = intersection.origin

将它移动到 sprite1(这将为我们转换位置)

miniSprite.move(toParent:sprite1)

我们现在有一个不同颜色的方框区域。

但是我们的 Sprite 不是正方形的吗?你可能会问。

这就是 SKCropNode 的用武之地。

让我们制作一个裁剪节点。

let croppedNode = SKCropNode()

我们要添加我们的 sprite1 作为 mask 节点

croppedNode.maskNode = sprite1.copy() as? SKNode

然后将其作为子项添加到 sprite1 sprite1.addChild(croppedNode)

我们现在有一个带有 Sprite 掩码的裁剪节点,让我们将迷你节点移动到这个新的裁剪节点

miniSprite.move(toParent:croppedNode)

好了,你现在应该有一个颜色发生交叉。

最终代码应该是这样的:

let intersection = sprite1.frame.intersection(sprite2.frame)
let miniSprite = SKSpriteNode(color:.red,size:intersection.size)
miniSprite.alpha = 0.5
sprite1.parent!.addChild(miniSprite)
miniSprite.anchorPoint = CGPoint(x:0.0,y:0.0)
miniSprite.position = intersection.origin
let croppedNode = SKCropNode()
croppedNode.maskNode = sprite1.copy() as? SKNode
croppedNode.anchorPoint = CGPoint(x:0.5,y:0.5)
sprite1.addChild(croppedNode)
miniSprite.move(toParent:croppedNode)

现在要记住一些事情,

zPosition 可能需要调整

这是它的工作示例:

override func didMove(to view: SKView) {
let sprite1 = SKSpriteNode(imageNamed: "Spaceship")
sprite1.anchorPoint = CGPoint(x:0.5,y:0.5)
sprite1.position = CGPoint.zero
sprite1.zPosition = 1



let sprite2 = SKSpriteNode(imageNamed: "Spaceship")
sprite2.anchorPoint = CGPoint(x:0.5,y:0.5)
sprite2.position = CGPoint(x:0,y:300)
addChild(sprite1)
addChild(sprite2)

let intersection = sprite1.frame.intersection(sprite2.frame)
let miniSprite = SKSpriteNode(color:.red,size:intersection.size)
miniSprite.alpha = 0.5

miniSprite.anchorPoint = CGPoint(x:0.0,y:0.0)
miniSprite.position = intersection.origin
miniSprite.zPosition = 2
sprite1.parent!.addChild(miniSprite)
let croppedNode = SKCropNode()
croppedNode.maskNode = sprite1.copy() as? SKNode
croppedNode.zPosition = 3
sprite1.addChild(croppedNode)

let biggy = SKSpriteNode(color: .white, size: (scene?.size)!)
miniSprite.move(toParent:croppedNode)
}

enter image description here

关于swift - SpriteKit : Change color of part of sprite which is intersecting with another sprite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com