2017-09-01 64 views
0
class GameScene: SKScene, SKPhysicsContactDelegate { 

let balls = [ 
    SKSpriteNode(imageNamed: "blueball.png"), 
    SKSpriteNode(imageNamed: "greenball.png"), 
    SKSpriteNode(imageNamed: "realredball.png") 
] 


let redRectangle = SKSpriteNode(imageNamed: "redrectangle.png") 
let blueRectangle = SKSpriteNode(imageNamed: "bluerectangle.png") 
let greenRectangle = SKSpriteNode(imageNamed: "greenrectangle.png") 

override func didMove(to view: SKView) { 
    spawnBalls() 
    rectangles() 
    physicsWorld.contactDelegate = self 

} 
override func touchesBegan(_ touches: Set<UITouch>, with event:  UIEvent?) { 
     for ball in balls{ 
      ball.physicsBody = SKPhysicsBody() 
      ball.physicsBody?.affectedByGravity = true 
      } 
    } 

func spawnBalls() { 

    let ball = balls[Int(arc4random_uniform(UInt32(balls.count)))] 
    ball.physicsBody = SKPhysicsBody() 
    ball.physicsBody?.affectedByGravity = false 
    ball.position = CGPoint(x: 0, y: 250) 
    ball.size = CGSize(width: 70, height: 70) 
    ball.physicsBody?.categoryBitMask = 0 
    ball.physicsBody?.collisionBitMask = 1 
    self.addChild(ball) 
} 

func rectangles() { 
    redRectangle.position = CGPoint(x: -316.5, y: -657) 
    redRectangle.size = CGSize(width: 400, height: 20) 
    redRectangle.physicsBody = SKPhysicsBody() 
    redRectangle.physicsBody?.categoryBitMask = 1 
    redRectangle.physicsBody?.collisionBitMask = 0 
    blueRectangle.size = CGSize(width: 400, height: 20) 
    blueRectangle.position = CGPoint(x: -100, y: -657) 
    blueRectangle.physicsBody = SKPhysicsBody() 
    greenRectangle.position = CGPoint(x: 0, y: -657) 
    greenRectangle.size = CGSize(width: 400, height: 20) 
    greenRectangle.physicsBody = SKPhysicsBody() 
    self.addChild(redRectangle) 
    self.addChild(blueRectangle) 
    self.addChild(greenRectangle) 
} 

} 

我想让球落下并与矩形节点建立联系,虽然它看起来像球正在穿过它们。我使用了碰撞和类别位掩码。我想知道是否有人可以帮助解决这个问题,谢谢。我的节点没有发生碰撞

+0

球应该只与红色矩形碰撞,是吗? –

+0

是的,我想出了谢谢。 – user8548753

+0

如果有人遇到同样的问题,您可以发布解决方案吗?您可以发布自己的问题的答案。 –

回答

0

您正确初始化了球,但是通过在touchesBegan(_:)内部创建一个新球体来删除它们的物理体。请从touchesBegan(_:)功能中删除此行:

ball.physicsBody = SKPhysicsBody() 
+0

谢谢,但我删除了线,球仍然通过红色的矩形节点 – user8548753