swift - 设置后更改固定的 Physicsbody 位置
问题描述
有没有办法在设置后更改精灵固定位置。例如,下面的“顶部”精灵固定在“基础”精灵上,我希望能够根据需要上下移动“顶部”精灵(更改固定的 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
}
解决方案
您的代码看起来不错,但我认为您的问题是由游戏循环和您在 TouchesBegan 中更改物理体的方式引起的。Touches Began 每个游戏循环仅执行一次。因此,将 pinned 属性设置为 false 然后为 true 将等同于将其设置为 true。
而是尝试将 pinned 属性设置为 false 并在 touchesBegan 方法中移动对象。然后覆盖 didFinishUpdate 方法,类似于
if pinned == false { pinned = true}
哦,您是否将固定主体设置为 allowRotation = true !这让我之前很吃惊。
希望这可以帮助
推荐阅读
- tensorflow - tf.compat.v1 的替代品
- sql - 查询每个 ID 的单个最旧记录
- python - discord.py 琐事命令错误,正确回答琐事时,它说我没有帐户可以给我货币,但我已注册
- reactjs - ReactJS 获取数据不显示
- python - Python:随机播放函数
- python - 在给定序列长度和模数的情况下计算 Pisano 周期
- c# - 带有 Enum 的 DataGridTemplateColumn 组合框正在更新具有相同值的所有行
- web - 将 www 和非 www 的 Web.config 重定向到 https
- c# - 使用 ReaderWriterLock 时,第二个线程是否实际等待
- node.js - Heroku 错误无法部署 Node JS 应用程序