尽管设置了碰撞位掩码,SpriteKit物理实体仍然相互移动

时间:2017-08-05 05:32:35

标签: sprite-kit skspritenode skphysicsbody skscene skphysicsworld

我正在制作一款使用Doodle Jump跳跃的游戏,如果你向前移动,你可以通过平台,但如果你向下移动则不会,除非有一个始终存在的地面平台。你无法进​​入这个地面平台。但是,如果玩家移动速度足够快,则玩家会像图片中那样穿过地面平台:

enter image description here

更令人困惑的是,这只发生了大约1/5的跳跃,只发生在地面平台上,这与更高的平台相同。另一件不寻常的事情是,如果玩家低于地面,即使图像完全低于地面,它仍然可以正确地检测击中敌人,就好像它在地面上一样,这让我认为物理身体和图像不知何故不是# 39; t synchronized。

我正在使用静态SKPhysicsBody代表这些平台&地面和动态SKPhysicsBody来代表玩家。我有平台platform.physicsBody?.collisionBitMask = PhysicsCategory.Player和播放器player.physicsBody?.collisionBitMask = PhysicsCategory.Platforms。我也有physicsBody?.usesPreciseCollisionDetection = true。两者都使用矩形来实现他们的物理实体,平台的厚度为2。

我已经尝试了一切,似乎没有什么能解决这个问题。我甚至尝试着检查这是didSimulatePhysics()

override func didSimulatePhysics() {
        if self.player.position.y <= 1/7 * size.height {

            player.position.y = 1/7*size.height //+ CGFloat(yScaler) * size.height
            if let body = player.physicsBody {
                if body.velocity.dy < 0 {
                    self.player.physicsBody?.velocity.dy = 0
                }
            }
        }
    }

didSimulatePhysics()正确检测到这种情况发生的时间,但是当我尝试调整player.position.y时,它根本没有更新它并且仍然被困在地下!

关于这里发生了什么的任何想法?我智慧结束了。先感谢您!

0 个答案:

没有答案