How to use the SpriteKit method body(at : CGPoint)?

半城伤御伤魂 提交于 2020-01-23 13:04:14

问题


I have game that during the game your finger moves around and should avoid hitting some obstacles. I know how to use collision but I recently heard that there is a funtion called the body(at : point). I should say that I have masked my obstacles. Because of that I can't use the contains(point) function. I really want to use the body(at : point) function otherwise I know how to work with collisions.

Some of my code:

play_button = self.childNode(withName: "play_button") as! SKSpriteNode
for t in touches{
    let fingerlocation = t.location(in: self)
    if physicsworld.body(at : fingerlocation)
    {
        let so = level6(fileNamed:"level6")
        so?.scaleMode = .aspectFill
        self.view?.presentScene(so!, transition: 
        SKTransition.crossFade(withDuration: 1))
    }
}

but it does not work.


回答1:


physicsworld.body returns an SKPhysicsBody if found, so you just need to check if it exists

if let _ = physicsworld.body(at : fingerlocation)

If your goal is to make a button, then I would not do this approach.

I would recommend just subclassing SKSpriteNode and enabling the isUserInteractionEnable`

class Button : SKSpriteNode
{

   override init()
   {
     super.init()
     isUserInteractionEnabled = true
   }
   //then in your touchesBegan/touchesEnded code (wherever you placed it)
   ....
   let so = level6(fileNamed:"level6")
        so?.scaleMode = .aspectFill
        scene.view?.presentScene(so!, transition: 
        SKTransition.crossFade(withDuration: 1))
   ....
}



回答2:


I've had a similar problem, "if let body = physicsWorld.body(at: touchLocation){...}" was responding wherever I've touched the screen.

I figured out, that by default the SKScene object created its own SKPhysicsBody which was set on top of all other SKPhysicsBodies. I solved this problem by making a new SKPhysicsBody for the scene, which didn't interfere anymore. Hope this code will help you.

inside of didMove:

let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody


来源:https://stackoverflow.com/questions/45200968/how-to-use-the-spritekit-method-bodyat-cgpoint

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!