我试图让用户选择他们喜欢的播放器类型/设计。
在我的gameScene中,我只有1个带有纹理的SKSpriteNode,但我希望用户可以选择3个不同的玩家。
我能想到的唯一方法是将3个玩家选项全部链接到他们自己的gameScene。当用户选择首选玩家时,它将转换到相关的gameScene?
3 gameScenes将是相同的,只是玩家SpriteNode的纹理会有所不同。
这看起来并不高效。但我是一个新手,只是尝试使用我迄今为止收集的知识。
有更有效的方法吗?
答案 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。