我正在尝试制作一个游戏,在该游戏中您倾斜手机并尝试将球保持在边界内。我似乎无法弄清楚如何使球不越过边界。我有使球运动的倾向,但它只是穿越了我的所有边界,我似乎无法弄清楚当球与边界接触时如何使球停下来。这是我的代码:
override func didMove(to view: SKView) {
let border = SKPhysicsBody(edgeLoopFrom: self.frame)
self.physicsBody = border
boundary = (self.childNode(withName: "boundry") as! SKSpriteNode) //the boundary is spelled wrong
airplane = SKSpriteNode(imageNamed: "ball image")
airplane.physicsBody = SKPhysicsBody(circleOfRadius: 10)
airplane.position = CGPoint(x: -211.163, y: 367.3)
airplane.size = CGSize(width: 50, height: 50)
airplane.physicsBody?.isDynamic = true
airplane.physicsBody?.affectedByGravity = false
airplane.physicsBody?.allowsRotation = true
airplane.physicsBody?.pinned = false
self.addChild(airplane)
if motionManager.isAccelerometerAvailable {
// 2
motionManager.accelerometerUpdateInterval = 0.01
motionManager.startAccelerometerUpdates(to: .main) {
(data, error) in
guard let data = data, error == nil else {
return
}
// 3
let currentX = self.airplane.position.x
self.destX = currentX + CGFloat(data.acceleration.x * 500)
let currentY = self.airplane.position.y
self.destY = currentY + CGFloat(data.acceleration.y * 500)
}
}
}
override func update(_ currentTime: TimeInterval) {
let action = SKAction.moveTo(x: destX, duration: 1)
let action2 = SKAction.moveTo(y: destY, duration: 1)
airplane.run(action)
airplane.run(action2)
}
答案 0 :(得分:1)
在SpriteKit中,除非您给它们提供一组匹配的collisionBitMask
,否则它们不会发生冲突。即border.collisionBitMask
和airplane.collisionBitMask
需要至少有一个非零位相同。尝试将两者都设置为1。
答案 1 :(得分:0)
另一件事是,您可能需要向飞机添加距离限制,以使飞机在速度过高时无法从边界逃脱。