我正在尝试允许用户选择他们的首选玩家类型/设计。
在我的GameScene中,我只有1个带有纹理的SKSpritenode,但是我希望用户可以选择在3个不同的玩家之间进行选择。
我能想到的唯一方法是让3个玩家选项全部链接到他们自己的GamesScene。
3个游戏感是相同的,只有玩家喷射的纹理会有所不同。
这似乎根本不是很有效。但是我是一个新手,只是想使用到目前为止收集到的知识。
是否有更有效的方法可以做到这一点?
,尽管我不确定如何解释您的问题,但是!
我建议您创建一些逻辑,以允许您在选择场景以及游戏场景中插入头像。
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
}
}
当然,需要将精灵节点放在正确的位置。之后,您需要实现触摸处理,因此在用户触摸节点时注册。
这种方法的好处是,阿凡达节点可以在不同的场景中重复使用 - 因此,如果您想更改巫师的精灵,只有一个地方只需更改它即可。请注意,该示例中的SKSpriteNode扩展名非常简单 - 如果您想要的是单个精灵以外的任何东西,我建议您改用子类SKSpriteNode。