背景:我正在制作一个游戏,其中两个物体(坦克)相互争斗。 在主菜单屏幕上,您可以选择两个将要相互战斗的坦克(在10个不同坦克的列表中)。 用于移动和触发单个/特定坦克的算法来自可从菜单中选择的每个玩家的单独的.swift(辅助)类。 (没有用户交互 - 战斗的所有代码都在这些类中)
在各个玩家类中,只定义了两个函数:player1TankMove()和player2TankMove()。
class Player1: gameSceneDelegate {
func player1TankMove() {
// some code that defines the movement and shooting of the Tank
}
func player2TankMove() {
// some code that defines the movement and shooting of the Tank
}
}
这些类中有十个(Player1,Player2,Player3 ......),每个类的player1TankMove()方法彼此完全不同。
正如您所看到的,我正在使用GameScene中的委托来连接TankMove()函数,以便它们可以在该类中使用:
protocol gameSceneDelegate {
func player1TankMove()
func player2TankMove()
}
class GameScene: SKScene, SKPhysicsContactDelegate { ... //entire GameScene code
我的问题是,当我从MainMenuViewController转换到GameScene类时,如何设置正确的类?
我会使用懒惰的实例化吗?如果是这样,如果我不知道我将访问哪个类/ swift文件(Player1.swift,Player2.swift等),我将如何声明它'懒惰'?
有更好的方法吗?
目前我可以访问正确的player1TankMove()函数并且坦克正常工作:
var tank1 = Player1()
tank1.player1TankMove() // used inside the update() function
但是,因为tank1需要是未知的特定类的实例,所以我不确定如何确定要声明的类型。我需要使用一种类型吗?泛型?看起来这是一个相当普遍的问题,我知道如何处理其他语言,但我不知道如何在Swift中编写代码。