Sprite-kit 主要角色选择器

Posted

技术标签:

【中文标题】Sprite-kit 主要角色选择器【英文标题】:Sprite-kit Main Character Picker 【发布时间】:2016-08-30 15:47:11 【问题描述】:

我正在使用 swift 2 和 sprite-kit。我想知道如何制作一个选择角色场景让我的玩家选择一个角色在游戏中玩,我已经设置了场景,但我不知道如何整合多个角色,可以选择一个玩?任何参考或示例代码将不胜感激。

在 GameScene() 中我有

    //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)'

在 settings() 我有

    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")
        
    
'

【问题讨论】:

您自己尝试过什么吗?这个网站并不是为了让我们仅仅为您编写示例代码或提出意见建议。 我更新了我的问题@ZGski 【参考方案1】:

这个问题确实太宽泛了,但这是我过去看到的(和我自己做过的)的方式

    创建一个 SKSpriteNode 的子类来制作您的自定义播放器类。 初始化时,根据节点选择的内容更改节点的纹理。

【讨论】:

好的,所以我更新了我的帖子,我试图在一个视图中做的是点击一个平面,然后让该平面成为另一个视图中的图像,但它不起作用 @ShaneReichenfeld 看起来您可能需要更多地了解 OOP 和 Swift...您不应该通过执行 GameScene().plane 来初始化新场景...我实际上非常对你在做什么感到困惑。您应该发布整个班级。我看不出你在哪里展示场景或任何东西。 @Kendel OP 需要知道,当创建新的 GameScene 时,所有字段都将初始化为空/默认值。 OP 似乎认为GameScene().plane = SKSpriteNode(imageNamed: "plane1") 将飞机永久设置在 GameScene 上。【参考方案2】:

您可以尝试使用 NSUserDefaults 在 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")

然后在 GameScene 中,在创建平面时检索选择。

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

在您的代码中,您尝试在 GameScene 的新实例上设置飞机,但是一旦您退出设置场景,该选择就会丢失。

【讨论】:

以上是关于Sprite-kit 主要角色选择器的主要内容,如果未能解决你的问题,请参考以下文章

CSS属性选择器角色* =用户[重复]

javascript 从选择器中删除指定的角色

jQuery的选择器—基本选择器

jQuery选择器

ID选择器和类选择器的合理使用

CSS选择器总结