Sprite-kit Main Character Picker

不想你离开。 提交于 2019-12-12 03:11:37

问题


I am using swift 2 and sprite-kit. I was wondering how I would make a choose character scene for my player to choose a character to play in the game, I have the scene set up, but I don't know how to integrate multiple characters, that can be chosen as the one to play? Any references or sample code would be appreciated.

in GameScene() i have

    //plane = SKSpriteNode(imageNamed: "plane")
    plane.size = CGSize(width: 80, height: 80)
    plane.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 4)
    plane.physicsBody = SKPhysicsBody(circleOfRadius: plane.frame.height / 2)
    //plane.physicsBody = SKPhysicsBody(texture: plane.texture!, size: plane.size)
    plane.physicsBody?.affectedByGravity = true
    plane.physicsBody?.dynamic = true
    plane.zPosition = 2
    self.addChild(plane)'

in settings() i have

    func mainScene(){

    mainSceenButton = SKSpriteNode(imageNamed: "mainMenu")
    mainSceenButton.size = CGSizeMake(200, 100)
    mainSceenButton.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 + self.frame.height / 3)
    self.addChild(mainSceenButton)

    plane = SKSpriteNode(imageNamed: "plane")
    plane.size = CGSizeMake(50, 50)
    plane.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 + 100 )
    self.addChild(plane)

    plane1 = SKSpriteNode(imageNamed: "plane1")
    plane1.size = CGSizeMake(50, 50)
    plane1.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 )
    self.addChild(plane1)

    plane2 = SKSpriteNode(imageNamed: "plane2")
    plane2.size = CGSizeMake(50, 50)
    plane2.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 - 100 )
    self.addChild(plane2)

}



override func didMoveToView(view: SKView) {
    mainScene()
}

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

    let mainMenuScene = StartScene(fileNamed: "StartScene")

    for touch in touches{
        let location = touch.locationInNode(self)
        if mainSceenButton.containsPoint(location){
            self.scene?.view?.presentScene(mainMenuScene!, transition: SKTransition.fadeWithDuration(1.0))
        }
        if plane1.containsPoint(location){
            GameScene().plane = SKSpriteNode(imageNamed: "plane1")
        } else {
            GameScene().plane = SKSpriteNode(imageNamed: "plane")
        }
    }
}'

回答1:


Really too broad of a question, but here's how I have seen this done in the past (and done myself)

  1. Create a subclass of SKSpriteNode to make your custom player class.
  2. When initializing change the texture of the node depending on what they select.



回答2:


You could try using NSUserDefaults to save the users selection in Settings touchesBegan.

let defaults = NSUserDefaults.standardUserDefaults()

if plane.containsPoint(location) {
    defaults.setObject("plane", forKey: "userPlane")
} else if plane1.containsPoint(location) {
    defaults.setObject("plane1", forKey: "userPlane")
} else if plane2.containsPoint(location) {
    defaults.setObject("plane2", forKey: "userPlane")
}

Then in GameScene, retrieve the selection when creating the plane.

let defaults = NSUserDefaults.standardUserDefaults()
if let userPlane = defaults.stringForKey("userPlane") {
    plane = SKSpriteNode(imageNamed: userPlane)
}

In your code you are trying to set the plane on a new instance of GameScene, but that selection will be lost as soon as you exit the settings scene.



来源:https://stackoverflow.com/questions/39231990/sprite-kit-main-character-picker

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!