在 XCODE 7(swift 2)-CGPOINTMAKE 中构建我的第一款游戏?

Building my first game in XCODE 7(swift 2)-CGPOINTMAKE?

我想做一个类似于斯诺克的游戏,一开始我已经遇到了一些问题。我想先建四面墙(那将是屏幕的大小-self.frame),我做的第一面是这样的:

let ground = SKNode()
ground.position = CGPointMake ( 0, 0)
ground.physicsBody = SKPhysicsBody( rectangleOfSize:CGSizeMake(self.frame.size.width * 3, 1))
ground.physicsBody!.dynamic = false
self.addChild(ground)

但是,我不知道如何操纵 CGPointMake 的值来制作 left/right/up 墙。我一开始以为(0,0)点是左下角,但好像不是这样的。有人可以帮我解决这个问题,或者只是解释一下这是如何工作的吗? (因为在 https://developer.apple.com/library/prerelease/ios/documentation/GraphicsImaging/Reference/CGGeometry/index.html#//apple_ref/c/func/CGPointMake 他们没有解释太多 =/)

尝试添加四面厚度为 20 的墙:

        // Create walls
    let leftWall = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 20, height: self.frame.height))
    leftWall.fillColor = UIColor.whiteColor()
    let physicsBodyLW = SKPhysicsBody(rectangleOfSize: CGSize(width: 20, height: self.frame.size.height), center: CGPoint(x:10, y:self.frame.height/2))
    physicsBodyLW.affectedByGravity = false
    physicsBodyLW.dynamic = false
    leftWall.physicsBody = physicsBodyLW
    self.addChild(leftWall)

    let rightWall = SKShapeNode(rect: CGRect(x: self.frame.width - 20, y: 0, width: 20, height: self.frame.height))
    rightWall.fillColor = UIColor.whiteColor()
    let physicsBodyRW = SKPhysicsBody(rectangleOfSize: CGSize(width: 20, height: self.frame.size.height), center: CGPoint(x:10, y:self.frame.height/2))
    physicsBodyRW.affectedByGravity = false
    physicsBodyRW.dynamic = false
    rightWall.physicsBody = physicsBodyRW
    self.addChild(rightWall)

    let topWall = SKShapeNode(rect: CGRect(x: 0, y: self.frame.height-20, width: self.frame.width, height: 20))
    topWall.fillColor = UIColor.whiteColor()
    let physicsBodyTW = SKPhysicsBody(rectangleOfSize: CGSize(width: self.frame.size.width, height: 20), center: CGPoint(x:self.frame.width/2, y:10))
    physicsBodyTW.affectedByGravity = false
    physicsBodyTW.dynamic = false
    topWall.physicsBody = physicsBodyTW
    self.addChild(topWall)

    let bottomWall = SKShapeNode(rect: CGRect(x: 0, y: 0, width: self.frame.width, height: 20))
    print(bottomWall.frame)
    bottomWall.fillColor = UIColor.whiteColor()
    let physicsBodyBW = SKPhysicsBody(rectangleOfSize: CGSize(width: self.frame.size.width, height: 20), center: CGPoint(x:self.frame.width/2, y:10))
    physicsBodyBW.affectedByGravity = false
    physicsBodyBW.dynamic = false
    bottomWall.physicsBody = physicsBodyBW
    self.addChild(bottomWall)

以下是如何限制球离开屏幕的基本示例:

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

    let BallCategory    : UInt32 = 0x1 << 1
    let WallCategory    : UInt32 = 0x1 << 2

    let ball = SKShapeNode(circleOfRadius: 40)

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */

      physicsWorld.contactDelegate = self



       setupWalls()

       setupBall()


    }

    func setupWalls(){


        physicsBody = SKPhysicsBody(edgeLoopFromRect: frame)
        physicsBody?.categoryBitMask = WallCategory
        physicsBody?.contactTestBitMask = BallCategory
        physicsBody?.collisionBitMask = BallCategory



    }

    func setupBall(){

        ball.physicsBody = SKPhysicsBody(circleOfRadius: 40)
        ball.fillColor = SKColor.whiteColor()
        ball.name = "ball"
        ball.physicsBody?.categoryBitMask = BallCategory
        ball.physicsBody?.contactTestBitMask = WallCategory
        ball.physicsBody?.collisionBitMask = WallCategory
        ball.physicsBody?.dynamic = true //In order to detect contact between two bodies, at least on body has to be dynamic
        ball.physicsBody?.affectedByGravity = false
        ball.physicsBody?.restitution = 0.5


        ball.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame)) // placing to ball in the middle of the screen

        addChild(ball)
    }



    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {


       ball.physicsBody?.applyImpulse(CGVector(dx: 200, dy: 200))

    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */


    }
}