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
中有一个输入错误。此函数使用泛型。你可以在这里阅读更多关于他们的信息