这只是我当前配置的示例代码,我现在有大约 750 个级别,最多是 1000 个。
class GameLevel {
final int number;
final String question;
final int answer;
final String? image;
final int difficulty;
final String hint;
final String solution;
const GameLevel({
required this.number,
required this.question,
required this.answer,
this.image,
required this.difficulty,
required this.hint,
required this.solution,
});
}
const List<GameLevel> gameLevels = [
GameLevel(
number: 1,
question: 'whats 1 + 2',
answer: 3,
difficulty: 4,
hint: '+2',
solution: '3',
),
GameLevel(
number: 2,
question: 'whats 3 + 7',
answer: 10,
difficulty: 4,
hint: 'x3',
solution: '3 + 7 = 10',
),
将所有级别存储在levels.dart 文件中是否足够好,或者我是否需要使用数据库。我发现的最佳选择是 sqflite。我已经构建了 apk,所有级别都保存在这个 dart 文件中,并且游戏运行良好。我想知道在较旧的设备上或在达到 750 级时是否会变慢。这些关卡只能在游戏中和离线状态下进行硬编码。这也是我的第一个 flutter 项目。欢迎任何建议。
您的应用程序无需使用数据库来存储硬编码数据。如果你有一个清单,那就可以很好地达到目的。在现代设备上循环 1000 个项目并不是一个巨大的成本,但原则上我强烈建议您确保您的代码有效。
如果您想将游戏关卡存储在列表中,那么您应该始终跟踪当前项目索引以及当前
GameLevel
对象,这样您就不需要按位置搜索它。
但是,我想知道为什么您决定使用 List 而不是
GameLevel
对象数组。如果您有一个数组而不是列表,那么 GameLevel
对象的引用将存储在快速可追踪的内存部分中,而不是分配的列表项分散在内存中并且必须执行循环才能找到 n' th 元素(在幕后,你不是自己做这件事)。
您需要考虑的进一步问题是您是否需要更新您的此列表,以及每当游戏级别发生变化时是否要发布新的 apk。在您的 apk 外部拥有一个存储空间,您可以更新而无需每次发布新版本,这不是更有意义吗?
这并不一定意味着您有一个数据库,您也可以使用应用程序在初始化时加载的文件实现相同的功能。
然而,使用数据库非常优雅,尽管不是必需的。因为如果您有数据库,那么您可以编写更改脚本,而不必每次都覆盖文件,并且维护游戏级别数据变得更加容易。但是,您可以将所有这些改进推迟到更高版本,迟早您会感觉到缺少正确的数据处理,并且能够自己决定您想要哪些改进以及改进程度。