精灵不受物理影响
Sprite not being affected by physics
我想要一个 SKSpriteNode
一直在屏幕上移动并永远在边缘弹跳。所以我设置了边缘的物理特性:
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
physicsWorld.gravity = CGVectorMake(0, 0)
然后是精灵的物理特性:
ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
ball.size = CGSizeMake(30, 30)
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width/2)
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.restitution = 1.0
ball.physicsBody?.linearDamping = 0.0
ball.physicsBody?.friction = 0.0
ball.physicsBody?.applyImpulse(CGVectorMake(10, -10))
self.addChild(ball)
问题是 sprite 并没有受到物理的影响,而是停留在屏幕的中央。我做错了什么?
您需要先将球添加到您的场景中,然后再对其应用脉冲。
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
physicsWorld.gravity = CGVectorMake(0, 0)
let ball = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(30, 30))
ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width/2)
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.restitution = 1.0
ball.physicsBody?.linearDamping = 0.0
ball.physicsBody?.friction = 0.0
self.addChild(ball)
ball.physicsBody?.applyImpulse(CGVectorMake(10, -10))
}
}
我想要一个 SKSpriteNode
一直在屏幕上移动并永远在边缘弹跳。所以我设置了边缘的物理特性:
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
physicsWorld.gravity = CGVectorMake(0, 0)
然后是精灵的物理特性:
ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
ball.size = CGSizeMake(30, 30)
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width/2)
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.restitution = 1.0
ball.physicsBody?.linearDamping = 0.0
ball.physicsBody?.friction = 0.0
ball.physicsBody?.applyImpulse(CGVectorMake(10, -10))
self.addChild(ball)
问题是 sprite 并没有受到物理的影响,而是停留在屏幕的中央。我做错了什么?
您需要先将球添加到您的场景中,然后再对其应用脉冲。
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
borderBody.friction = 0
self.physicsBody = borderBody
physicsWorld.gravity = CGVectorMake(0, 0)
let ball = SKSpriteNode(color: SKColor.redColor(), size: CGSizeMake(30, 30))
ball.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width/2)
ball.physicsBody?.allowsRotation = false
ball.physicsBody?.restitution = 1.0
ball.physicsBody?.linearDamping = 0.0
ball.physicsBody?.friction = 0.0
self.addChild(ball)
ball.physicsBody?.applyImpulse(CGVectorMake(10, -10))
}
}