Swift 3.0中的可玩游戏区

时间:2016-09-25 18:49:27

标签: swift macos sprite-kit

我正在为mac创建一个mario克隆来帮助我学习快速编程。我遇到的一个问题是设置一个可玩的游戏区域。到目前为止,我按下的两个背景("背景"和#34;等级")将在按下左或右键时移动,但两侧的灰色区域将变为可见。我希望能够移动背景,但设置一个停止移动的区域。

import SpriteKit

class GameScene: SKScene {

    let player = SKSpriteNode(imageNamed: "mario")

    let background = SKSpriteNode(imageNamed: "background")

    let level = SKSpriteNode(imageNamed: "level")

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

        //self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)

        level.size = self.size
        level.position = CGPoint(x: self.size.width/2, y: self.size.height/2)
        level.zPosition = 1
        self.addChild(level)

        background.size = self.size
        background.position = CGPoint(x: level.size.width + 511, y: self.size.height/2)
        background.zPosition = 0
        self.addChild(background)

        player.setScale(0.23)
        player.position = CGPoint(x: self.size.width/8, y: 120)
        player.zPosition = 2
        self.addChild(player)

    }

    override func keyDown(with theEvent: NSEvent) {
        let keyCode = theEvent.keyCode

        //Moving Right
        if keyCode == 124 {
            level.run(SKAction.sequence([SKAction.moveBy(x: -20, y: 0, duration: 0.2)]))

            background.run(SKAction.sequence([SKAction.moveBy(x: -20, y: 0, duration: 0.2)]))

            player.xScale = 0.23
        }

        //Moving Left
        if keyCode == 123 {
            background.run(SKAction.sequence([SKAction.moveBy(x: 20, y: 0, duration: 0.2)]))

            level.run(SKAction.sequence([SKAction.moveBy(x: 20, y: 0, duration: 0.2)]))

            player.xScale = -0.23        
        }

        //Jump
        if keyCode == 126{            
             player.run(SKAction.sequence([SKAction.moveTo(y: 250, duration: 0.15),SKAction.moveTo(y: 120, duration: 0.2)]))
        }
    }    
}

1 个答案:

答案 0 :(得分:0)

我确信有一个更好,更聪明的解决方案,但是我可以补充说:

let LEFTBOUND: Int = //Insert the left limit here.
let RIGHTBOUND: Int = //Insert the right limit here.

func keyDown()内,在移动的右/左if语句中,嵌套这些:

if level.position.x < RIGHTBOUND:
    //Move level so long as it is less than the RIGHTBOUND value.
    //TODO: set the level.position to RIGHTBOUND so it doesn't keep updating with new values while keyDown is true.

if level.position.x > LEFTBOUND:
    //Move level so long as it is greater than the LEFTBOUND value.
    //TODO: set the level.position to LEFTBOUND so it doesn't keep updating with new values while the keyDown is true.

//Repeat theses steps for background.position.x

你还应该限制玩家的移动,这样玩家就无法恢复到不可恢复的水平。