Ios Swift/Spritekit创建多个实例

Ios Swift/Spritekit创建多个实例,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,目前正在开发一款游戏,我一直在研究如何最好地生成同一个怪物的多个实例。在本例中,我的Ogre类属于Monster类型,我使用Monster类中的spawn函数创建新实例。唯一的问题是我在spawn方法中硬编码了Ogre类,如下所示: func spawn(scene: SKScene, number: Int) { for _ in 1...number { let ogre = Ogre() scene.addChild(ogre) } } 显

目前正在开发一款游戏,我一直在研究如何最好地生成同一个
怪物的多个实例。在本例中,我的
Ogre
类属于
Monster
类型,我使用
Monster
类中的
spawn
函数创建新实例。唯一的问题是我在spawn方法中硬编码了
Ogre
类,如下所示:

func spawn(scene: SKScene, number: Int) {
    for _ in 1...number {
        let ogre = Ogre()
        scene.addChild(ogre)
    }
}
显然,这不适用于繁殖不同类型的敌人,我想做的是调用类似于
怪物的繁殖。繁殖(场景:self,type:SomeMonster,number:5)
,并使繁殖功能更像:

func spawn(scene: SKScene, number: Int) {
    for _ in 1...number {
        let monster = node
        scene.addChild(monster)
    }
}
那么,我如何才能将不同的怪物传递到该函数中,以产生它们的倍数呢?是否可以将对象作为函数的参数传递,例如
spawn(monster:Ogre)
,或者可以覆盖
monster
类型的每个类中的spawn函数,然后以某种方式创建该类的新实例


实际上,我认为我的主要问题是我不知道如何创建一个新的类实例,而不知道它是什么,也不知道它是硬编码的。欢迎提出任何意见和建议

您可以在
Monster
类中执行类似操作

func spawn<T: Monster>(scene: SKScene, number: Int, monsterClass: T.Type) {
    for _ in 1...number {
        let monster = monsterClass.init()
        scene.addChild(monster)
    }
}
func生成(场景:SKScene,编号:Int,怪物类:T.Type){
对于uu1…编号{
让monster=monsterClass.init()
场景:addChild(怪物)
}
}

你可以在你的
怪物类中做类似的事情

func spawn<T: Monster>(scene: SKScene, number: Int, monsterClass: T.Type) {
    for _ in 1...number {
        let monster = monsterClass.init()
        scene.addChild(monster)
    }
}
func生成(场景:SKScene,编号:Int,怪物类:T.Type){
对于uu1…编号{
让monster=monsterClass.init()
场景:addChild(怪物)
}
}

所以本质上你想实例化不同类型的怪物,而不知道你实际实例化的是哪种类型?或者您想
addChild
在不知道要添加哪些类型的情况下添加不同的类型吗。。我想?spawn函数不知道它添加了什么特定类型的怪物,只要它是
怪物
。但在我的场景中(目前),我计划通过调用
Monster.spawn(场景:self,类型:SomeMonster,编号:5)
Monster.spawn(场景:self,类型:AnotherMonster,编号:5)
。这有意义吗?要添加生成不同种类的怪物,可以在
怪物中传递
枚举
。spawn(..)
函数,使用
switch
语句,实例化对象,最后将其添加到场景中。(当然,你应该把这个函数从
怪物类中移出)嗯,这样做在理论上是有意义的。。。不过我一直在避免对怪物这样做,因为可能有很多不同的类型。所以我希望找到一种比总是添加新枚举类型更好的方法。你为什么说我应该把
spawn
函数移出
Monster
类?实际上我想我误解了
Monster
是你的父类,
Ogre
troll
将是它的子类,你想在父类中创建这些对象,对吧?所以本质上你想实例化不同类型的怪物,而不知道你实际实例化的是哪种类型?或者您想
addChild
在不知道要添加哪些类型的情况下添加不同的类型吗。。我想?spawn函数不知道它添加了什么特定类型的怪物,只要它是
怪物
。但在我的场景中(目前),我计划通过调用
Monster.spawn(场景:self,类型:SomeMonster,编号:5)
Monster.spawn(场景:self,类型:AnotherMonster,编号:5)
。这有意义吗?要添加生成不同种类的怪物,可以在
怪物中传递
枚举
。spawn(..)
函数,使用
switch
语句,实例化对象,最后将其添加到场景中。(当然,你应该把这个函数从
怪物类中移出)嗯,这样做在理论上是有意义的。。。不过我一直在避免对怪物这样做,因为可能有很多不同的类型。所以我希望找到一种比总是添加新枚举类型更好的方法。你为什么说我应该把
spawn
函数移出
Monster
类?实际上我想我误解了
Monster
是你的父类,
Ogre
troll
将是它的子类,你想在父类中创建这些对象,对吗?也许他想要静态函数?非常有趣!这看起来像是我想要的解决方案,但是,我得到的错误是,
“type”不是“T”的成员类型。
。有什么想法吗?我从未见过这个部分,所以我不太确定它在做什么。某种类型的铸造?我已经更新了代码。
T.Type
中有一个输入错误。此函数使用泛型。你可以在这里读到更多关于它们的信息,也许他想要静态函数?非常有趣!这看起来像是我想要的解决方案,但是,我得到的错误是,
“type”不是“T”的成员类型。
。有什么想法吗?我从未见过这个部分,所以我不太确定它在做什么。某种类型的铸造?我已经更新了代码。
T.Type
中有一个输入错误。此函数使用泛型。你可以在这里阅读更多关于他们的信息