gpt4 book ai didi

swift - 设置后更改固定的物理体位置

转载 作者:行者123 更新时间:2023-11-28 07:18:48 24 4
gpt4 key购买 nike

有没有一种方法可以在设置 Sprite 固定位置后更改它。例如,下面的“顶部” Sprite 固定到“基础” Sprite ,我希望能够根据需要上下移动“顶部” Sprite (更改固定的 y 位置)。我可以看到旋转固定 Sprite 很容易,但移动位置我似乎找不到解决方案。我试过移除引脚 (pinned = false),更改位置然后重置引脚 (pinned = true),但位置没有改变(请参阅触摸开始部分)。

任何帮助或朝着正确方向的插入将不胜感激,谢谢!!!

func generateSprites() {

// BASE

let sizeSpriteBase = CGSize(width: 40, height: 36)

spriteBase = SKSpriteNode(texture: nil, color: UIColor.green, size: sizeSpriteBase)
spriteBase.position.x = 0
spriteBase.position.y = 0
spriteBase.zPosition = 10000
addChild(spriteBase)

let physicsBodyBase = SKPhysicsBody(rectangleOf: sizeSpriteBase)
physicsBodyBase.restitution = 0
physicsBodyBase.allowsRotation = false
physicsBodyBase.categoryBitMask = categoryMain
physicsBodyBase.collisionBitMask = categorySolid
physicsBodyBase.contactTestBitMask = categorySolid
spriteBase.physicsBody = physicsBodyBase

// TOP

let sizeSpriteTop = CGSize(width: 40, height: 8)

spriteTop = SKSpriteNode(texture: nil, color: UIColor.orange, size: sizeSpriteTop)
spriteTop.position.x = 4
spriteTop.position.y = spriteBase.size.height/2
spriteBase.addChild(spriteTop)

let physicsBodyTop = SKPhysicsBody(rectangleOf: sizeSpriteTop)
physicsBodyTop.pinned = true
physicsBodyTop.restitution = 0
physicsBodyTop.allowsRotation = false
physicsBodyTop.categoryBitMask = categoryMain
physicsBodyTop.collisionBitMask = categorySolid
physicsBodyTop.contactTestBitMask = categorySolid
spriteTop.physicsBody = physicsBodyTop

}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

spriteTop.physicsBody?.pinned = false
spriteTop.position.y -= 8
spriteTop.physicsBody?.pinned = true

}

最佳答案

您的代码看起来不错,但我认为您的问题是由游戏循环和您在 TouchesBegan 中更改物理体的方式引起的。 Touches Began 在每个游戏循环中只执行一次。因此,将固定属性设置为 false 然后设置为 true 等同于将其设置为 true。

改为尝试将固定属性设置为 false 并在 touchesBegan 方法中移动对象。然后覆盖 didFinishUpdate 方法,像

if pinned == false { pinned =  true}

哇哦,您是否将固定主体设置为 allowRotation = true !这让我很吃惊。

希望对你有帮助

关于swift - 设置后更改固定的物理体位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58785293/

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