设置后更改固定的 Physicsbody 位置

Posted

技术标签:

【中文标题】设置后更改固定的 Physicsbody 位置【英文标题】:Change Pinned Physicsbody Position After It's Been Set 【发布时间】:2019-11-10 02:36:48 【问题描述】:

有没有办法在设置后更改精灵的固定位置。例如,下面的“顶部”精灵固定在“基础”精灵上,我希望能够根据需要上下移动“顶部”精灵(更改固定的 y 位置)。我可以看到旋转固定的精灵很容易,但是移动位置我似乎找不到解决方案。我尝试移除引脚(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


【问题讨论】:

【参考方案1】:

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

尝试将 pinned 属性设置为 false 并在 touchesBegan 方法中移动对象。然后重写 didFinishUpdate 方法,类似于

if pinned == false  pinned =  true

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

希望对你有帮助

【讨论】:

以上是关于设置后更改固定的 Physicsbody 位置的主要内容,如果未能解决你的问题,请参考以下文章

到达页面底部后更改固定定位元素的边距顶部位置?

Linux系统标准化设置:克隆系统后网卡设置固定IP设置关闭防火墙和SELINUX更改主机名

悬停时的jquery图像预览-如何设置固定位置?

物理计算scenekit后获取节点位置

更改位置时的 Safari 渲染问题:固定到位置:相对

迁移 Xcode 项目后无法更改位置/路径设置