【问题标题】:SpriteKit Sprites slightly moving when isDynamic is false当 isDynamic 为 false 时 SpriteKit Sprites 轻微移动
【发布时间】:2016-11-02 10:03:12
【问题描述】:

我正在使用 Swift 3 和 Sprite Kit 开发游戏。我有一个不应该移动的点网格,但对于检测碰撞很重要。我的问题是,这些点在轻微移动。你看不到它在移动,但如果我打印位置,我会看到它们在移动。这就是我创建点的方式:

for dot in dots {
        //dot subclasses SKSpriteNode
        dot.name = "dot\(index)"
        dot.size = CGSize(width: DotWidth, height: DotHeight)
        dot.position = pointFor(column: dot.column, row: dot.row)
        dotsLayer.addChild(dot)
        //dot.sprite = sprite
        dot.physicsBody = SKPhysicsBody(circleOfRadius: 2)
        dot.physicsBody?.affectedByGravity = false
        dot.physicsBody?.allowsRotation = false
        dot.physicsBody?.isDynamic = false

        dot.physicsBody?.categoryBitMask = PhysicsCategory.Dot
        dot.physicsBody?.contactTestBitMask = PhysicsCategory.Stick
        dot.physicsBody?.collisionBitMask = PhysicsCategory.None
        dot.physicsBody?.usesPreciseCollisionDetection = true
        index += 1

    }

我尝试了一些方法,例如受影响的重力(即使没有重力)和allowsRotation。如果我打印一个点的位置(SKSpriteNode 的子类),我得到 Optional((47.9458236694336, 47.9458236694336)),但如果我稍后打印同一个点的位置,我得到 Optional((47.86669921875, 79.892448425293))。我等待的时间越长,差异就越大。如果我打开showsPhysics,我会注意到这些点向下和向左移动。有没有办法完全不移动这些点?

【问题讨论】:

  • 这些点对碰撞很重要,并且需要对碰撞做出反应,还是您可以简单地将它们用作联系信息提供者?
  • 如果你的点根本不动。不使用精确检测,只在需要它的移动物体上使用它
  • @Confused:我可以处理联系信息。这实际上是我唯一需要的。我为此使用了 didBegin(_ contact: SKPhysicsContact)。还有其他方法吗?
  • @Knight0fDragon:感谢您指出我的精确检测。我会删除它。
  • 一定少了点什么,我们对这些点做了什么

标签: swift sprite-kit skphysicsbody


【解决方案1】:

我的问题似乎只存在于模拟器中运行应用程序时。即使使用最新的 Xcode 模拟器 (Xcode 8.1)。我使用哪个模拟器(iPhone 5、iPhone 6 等)并不重要。在真实设备上运行相同的应用程序,不会显示移位问题。 “点”保持在与创建时完全相同的位置。所以这似乎是一个模拟器错误。

【讨论】:

  • @Confused:我仍然对使用仅限联系人的解决方案感兴趣。
  • 好的,谢谢。我对你的陈述有点困惑(不是双关语):这些点对碰撞很重要,并且需要对碰撞做出反应,还是你可以简单地将它们用作联系信息提供者?
  • 不知道他的评论在说什么
  • 对不起,他的(困惑的)陈述,不是你的:)
  • 我知道你的意思。
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多