Swift允许用户选择播放器Sprite Node

时间:2017-03-02 20:22:58

标签: swift

我试图让用户选择他们喜欢的播放器类型/设计。

在我的gameScene中,我只有1个带有纹理的SKSpriteNode,但我希望用户可以选择3个不同的玩家。

我能想到的唯一方法是将3个玩家选项全部链接到他们自己的gameScene。当用户选择首选玩家时,它将转换到相关的gameScene?

3 gameScenes将是相同的,只是玩家SpriteNode的纹理会有所不同。

这看起来并不高效。但我是一个新手,只是尝试使用我迄今为止收集的知识。

有更有效的方法吗?

1 个答案:

答案 0 :(得分:2)

虽然我不完全确定如何解释你的问题,但这里有!

我建议您创建一些逻辑,以便在选择场景和游戏场景中插入头像。

extension SKSpriteNode {
    enum AvatarType {
        case blueMan
        case purpleWizard
        case greyDinosaur
    }

    class func avatar(withType type: AvatarType) -> SKSpriteNode {
        let spriteName: String
        switch type {
        case .blueMan:
            spriteName = "blueManSprite"
        // case .purpleWizard
        //   ...
        default:
            spriteName = "someSprite"
        }

        return SKSpriteNode(imageNamed: spriteName)
    }
}

在你的SKScene子类中(或者当然在任何地方;)),你可以像这样创建头像:

class ChooseAvatarScene : SKScene {
    let avatarBlueMan = SKSpriteNode.avatar(withType: .blueMan)
    // let avatarWizard = ...
    // let avatarDinosaur = ...

    func setup() {
        avatarBlueMan.position = CGPoint(x: 50, y: 50)
        // avatarWizard.position = ...
        // avatarDinosaur.position = ...

        addChild(avatarBlueMan)
        addChild(avatarWizard)
        addChild(avatarDinosaur)
    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        // check if any of the touches hit an avatar sprite
    }
}

当然,精灵节点需要放在正确的位置。之后,您需要实现触摸处理,以便在用户触摸节点时进行注册。

这种方法的好处是Avatar节点可以在不同的场景中重复使用 - 所以如果您想要更改向导的精灵,那么只有一个地方你必须改变它。 请注意,示例中的SKSpriteNode扩展名非常简单 - 如果您想要的不仅仅是一个精灵,我建议您继承子类化SKSpriteNode。