SKSpriteNode ball does not collide with the border
My ball (SKSpriteNode) is supposed to bounce a wall that is around the screen, but it just went through it and disappeared from the screen.
GameScene.swift
let borderCategory: UInt32 = 1
let ball = SKShapeNode(circleOfRadius: 30)
let bCategoryName = "Ball"
let bCategory: UInt32 = 2
let paddle = SKShapeNode(rectOfSize: CGSize(width: 90, height: 35))
let pCategoryName = "Paddle"
let pCategory: UInt32 = 3
override func didMoveToView(view: SKView) {
/* Setup your scene here */
self.backgroundColor = SKColor.whiteColor()
self.physicsWorld.gravity = CGVectorMake(0, 0)
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
NSLog(String(self.frame.width) + ":" + String(self.frame.height), nil)
self.physicsBody = borderBody
self.physicsBody.friction = 0.0
self.physicsBody.categoryBitMask = borderCategory
self.physicsBody.restitution = 1.0
setupPaddle()
setupBall()
}
func setupPaddle() {
paddle.name = pCategoryName
paddle.position = CGPointMake(CGRectGetMidX(self.frame), paddle.frame.size.height * 0.6)
paddle.fillColor = SKColor.blackColor()
self.addChild(paddle)
paddle.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 90, height: 35))
paddle.physicsBody.restitution = 0.1
paddle.physicsBody.friction = 0.4
paddle.physicsBody.dynamic = false
paddle.physicsBody.categoryBitMask = pCategory
paddle.physicsBody.collisionBitMask = bCategory
}
func setupBall() {
ball.name = bCategoryName
ball.position = CGPointMake(self.frame.size.width/2, paddle.position.y+paddle.frame.height+10)
ball.fillColor = SKColor.blackColor()
self.addChild(ball)
ball.physicsBody = SKPhysicsBody(circleOfRadius: 30)
ball.physicsBody.friction = 0.0
ball.physicsBody.restitution = 1.0
ball.physicsBody.linearDamping = 0.0
ball.physicsBody.angularDamping = 0.0
ball.physicsBody.allowsRotation = false
ball.physicsBody.dynamic = true
ball.physicsBody.categoryBitMask = bCategory
ball.physicsBody.collisionBitMask = borderCategory
}
Output for NSLog(String(self.frame.width) + ":" + String(self.frame.height), nil)
1024.0:768.0
, works on iPhone 5S, IOS8.
How to solve this problem? I believe the problem is self.frame, but I have already changed the controller view from viewDidLoad
to viewWillLayoutSubview
.
EDIT 1: I noticed that the ball now bounces after setting the border restriction to 1.0. BUT, I realized that the ball is bouncing in an unknown region. It bounces off the screen and then comes back. It's weird that it can bounce as soon as it hits the top of the screen, but it won't hit the side of the screen.
EDIT 2: I figured out another problem, UIDevice.currentDevice().orientation.isPortrait
returns false, but still I run my game in portrait mode
EDIT 3: If I change the orientation to landscape, the ball might pop out of the screen from the top and bottom and then bounce back, the ball bounces off the side of the screen correctly. But now the paddle is under the screen.
source to share
No one has answered this question yet
See similar questions:
or similar: