所以我目前使用一个名为GameFile的静态类,它包含游戏实例,当前地图,玩家位置,玩家名称,玩家钱等。基本上所有的全局信息。我想知道是否有替代方案?静态类的替代品
这是我目前如何在静态类设置的游戏实例(作为一个例子):
GameFile.gameInstance = new ChromeGame();
,然后当我需要使用信息我打电话
GameFile.gameInstance.addScreen(SplashScreen).
所以我目前使用一个名为GameFile的静态类,它包含游戏实例,当前地图,玩家位置,玩家名称,玩家钱等。基本上所有的全局信息。我想知道是否有替代方案?静态类的替代品
这是我目前如何在静态类设置的游戏实例(作为一个例子):
GameFile.gameInstance = new ChromeGame();
,然后当我需要使用信息我打电话
GameFile.gameInstance.addScreen(SplashScreen).
这是我将如何为手机游戏做到这一点。你可以完全掌握OOP的概念并拥有所有的设置者/获取者,但是在低类型的移动设备中,这种“OOP”代价高昂。
public class GameData {
public static Model activePlayerModel;
public static GameMap currentMap;
public static void load() {
// read necessary data from external sources. e.g. a file
}
public static void updateMap() {
// update currentMap
}
public static Model getActiveModel() {
// get current model/set default/or read from file and return
}
public static GameMap getCurrentMap() {
// e.g. Create a map or read map from a file, etc
// return the map
}
}
现在我可以直接访问GameData的成员。
public class GameScreen extends Screen {
Model playerModel;
public GameScreen (Game game) {
GameData.load();
playerModel = Settings.activePlayerModel;
}
}
好吧,好吧。只有你可以决定什么最适合你的需求。如果这段代码只是被编写过,并且只能由您维护,并且从未成为可导出API的一部分,那么当然。否则,在许多地方,您所展示的代码是针对Joshua Bloch在Effective Java中提供的建议运行的(公共领域将您与实现联系起来;使用最小的可见性来进行封装等)。我不确定我是否能够购买程序编写代码的论文总是比写得很好的面向对象代码少得多。 – scottb
@scottb是的,阅读并欣赏那本书。但是在我的回答中提到的游戏开发尤其是移动设备时,它在很多情况下都很昂贵。你可以在官方的Android站点查看一下:http://developer.android.com/training/articles/perf-tips.html –
我还没有阅读过这个文档,但是发现它几乎是不可思议的,每秒像素数,计算机对手AI,或计算愤怒的小鸟的物理学,偶尔的解除引用或堆栈上的额外参数都很重要。 – user949300
当然:不要使用静态;改为使用实例传递事物。 –
有一种可以使用的每线程静态,但是,按线程,它的使用有限。否则,正如路易斯所说。 –
将你的游戏作为一个具有状态的对象而不是一堆全局数据来开发,将会使你的游戏更容易扩展你的项目。并发游戏?如果一个游戏是一个对象,没有问题......实例化一个新游戏并将其提供给一个线程。 – scottb