当isDynamic为false时,SpriteKit会稍微移动

时间:2016-11-02 10:03:13

标签: swift sprite-kit skphysicsbody

我正在使用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

    }

我尝试了一些东西,比如affectedByGravity(即使没有重力),还有allowRotation。如果我打印一个点的位置(SKSpriteNode的子类),我得到可选((47.9458236694336,47.9458236694336)),但如果我稍后打印相同点的位置,我得到可选((47.86669921875,79.892448425293))。我等待的时间越长,差异越大。如果我打开showsPhysics,我会注意到这些点向下和向左。有没有办法不移动点?

1 个答案:

答案 0 :(得分:0)

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