Ich habe ein paar kleine Paddel nebeneinander angeordnet mit einer Größe von ungefähr 50x10, die sich ständig von links nach rechts und von rechts nach links bewegen, die auch zufällig von Zeit zu Zeit aufhören würden, sich zu bewegen und stationär zu werden. Es gibt einen Ball, der zu ihnen hin abfällt, und wenn er auf ein Paddel trifft, wenn es sich nicht bewegt und stationär ist, wird der Ball von ihm abprallen und direkt wieder hochgehen. Wenn sich die Paddles jedoch bewegen und der Ball während dieser Zeit auf eines der Paddles trifft, schlägt der Ball nicht direkt auf den Schläger, sondern auf das Paddel und bewegt sich entweder nach rechts oder links (je nachdem, in welche Richtung die Paddles stehen) Bewegen), während Sie wieder aufstehen. Ich versuche, den Ball wieder hochzufahren, selbst wenn er auf das Paddel trifft, während es sich bewegt (so ziemlich ein ewig hüpfender Ball gegen die Paddel).Wie kann man verhindern, dass eine Kraft auf SKSprtieNode angewendet wird?
Ich habe einige verschiedene Möglichkeiten ausprobiert, um dieses Problem zu lösen, aber ich denke, ich vermisse etwas Wichtiges, das es so verhält. Hier ist der Code:
class GameScene: SKScene, SKPhysicsContactDelegate {
let greenPaddle = SKSpriteNode(imageNamed: "Green")
var ball = SKSpriteNode()
let ballCategory: UInt32 = 1 << 0
let greenPaddleCategory: UInt32 = 1 << 1
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
greenPaddle.position = CGPoint(x: 0, y: frame.size.height/-6.5)
greenPaddle.physicsBody = SKPhysicsBody(rectangleOfSize: greenPaddle.size)
greenPaddle.physicsBody!.affectedByGravity = false
greenPaddle.physicsBody!.dynamic = false
greenPaddle.physicsBody!.categoryBitMask = greenPaddleCategory
greenPaddle.physicsBody!.contactTestBitMask = ballCategory
ball = SKSpriteNode(imageNamed: "Red")
ball.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2)
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.height/2)
ball.physicsBody!.friction = 0
ball.physicsBody!.restitution = 1
ball.physicsBody!.linearDamping = 0
ball.physicsBody!.allowsRotation = false
ball.physicsBody!.categoryBitMask = ballCategory
ball.physicsBody!.contactTestBitMask = greenPaddleCategory
addChild(circle)
}
func didBeginContact(contact: SKPhysicsContact) {
let bodyA = (contact.bodyA.categoryBitMask <= contact.bodyB.categoryBitMask) ? contact.bodyA : contact.bodyB
let bodyB = (contact.bodyA.categoryBitMask <= contact.bodyB.categoryBitMask) ? contact.bodyB : contact.bodyA
if (bodyA.categoryBitMask) == ballCategory && (bodyB.categoryBitMask) == greenPaddleCategory {
greenPaddle.physicsBody!.friction = 0
greenPaddle.physicsBody!.restitution = 0
}
}
Ich habe, dass es in, vergessen, es hier zu erwähnen. Ich versuche, den Ball in einer geraden Linie (nach unten und oben) von den Paddeln abprallen zu lassen. Wenn sich das Paddel beispielsweise von links nach rechts bewegt und der Ball während der Bewegung auf das Paddel trifft, bewegt sich der Ball nach oben, während er sich nach rechts und nicht gerade nach oben bewegt, wenn dies sinnvoll ist – Sharukh