我一直在创建我自己非常简单的基于Breakout的测试游戏,同时学习SpriteKit(使用Ray Wenderlich等教授的iOS游戏)来看看我是否可以应用我学到的概念.我决定通过使用.sks文件来创建精灵节点并用物理主体替换我的手动边界检查和碰撞来简化我的代码.
然而,只要它以陡峭的角度与它们碰撞,我的球就会保持平行于墙壁/其他矩形(例如,只是向上和向下滑动).这是相关的代码 - 我已将物理主体属性移动到代码中以使它们更加可见:
import SpriteKit
struct PhysicsCategory {
static let None: UInt32 = 0 // 0
static let Edge: UInt32 = 0b1 // 1
static let Paddle: UInt32 = 0b10 // 2
static let Ball: UInt32 = 0b100 // 4
}
var paddle: SKSpriteNode!
var ball: SKSpriteNode!
class GameScene: SKScene, SKPhysicsContactDelegate {
override func didMoveToView(view: SKView) {
physicsWorld.gravity = CGVector.zeroVector
let edge = SKNode()
edge.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame)
edge.physicsBody!.usesPreciseCollisionDetection = true
edge.physicsBody!.categoryBitMask = PhysicsCategory.Edge
edge.physicsBody!.friction = 0
edge.physicsBody!.restitution …Run Code Online (Sandbox Code Playgroud)