Flutter插件npdart的使用_npdart 是一个用于创建视觉小说的极简游戏引擎
Flutter插件npdart的使用_npdart 是一个用于创建视觉小说的极简游戏引擎
npdart
是一个用于创建视觉小说的极简游戏引擎。在使用之前,请务必查看 example
文件夹。
特性
- 全局和局部游戏状态管理
- 场景树
- 基本持久化(包括自动保存)
- 渲染背景和前景精灵
- 声音
- 支持富文本的文本框
示例
以下是一个完整的示例代码,展示了如何使用 npdart
插件来创建一个简单的视觉小说。
import 'dart:io';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:npdart/npdart.dart';
void main() async {
// 初始化Flutter绑定
WidgetsFlutterBinding.ensureInitialized();
// 初始化本地化
await EasyLocalization.ensureInitialized();
// 设置屏幕方向
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight
]);
// 隐藏系统UI
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
// 运行应用
runApp(EasyLocalization(
supportedLocales: const [Locale('ru')],
fallbackLocale: const Locale('ru'),
path: 'assets/translations',
child: const OneDay(),
));
}
// 定义主Widget
class OneDay extends StatelessWidget {
const OneDay({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
// 创建偏好设置实例
final prefs = Preferences(
translate: (s) => s.tr(), // 翻译函数
savePath: '/oneday/', // 保存路径
typingDelay: 35); // 打字机效果延迟
return MaterialApp(
localizationsDelegates: context.localizationDelegates,
supportedLocales: context.supportedLocales,
locale: context.locale,
theme: theme,
title: 'One Day',
home: FutureBuilder(
future: getSaveData(prefs), // 获取保存数据
builder: (context, snapshot) {
if (!snapshot.hasData) return Container(color: Colors.black);
return Novel(
initialState: snapshot.data!, // 初始状态
tree: Tree(scenes: scenes), // 场景树
preferences: prefs); // 偏好设置
},
),
);
}
}
// 获取保存数据的函数
Future<SaveData> getSaveData(Preferences preferences) async {
var saveData = await getDefaultInitialSaveData(preferences);
if (saveData.sceneId == 'menu') {
saveData = SaveData.fallback(); // 如果场景ID为'menu',则使用默认保存数据
} else if (saveData.sceneId != 'root') {
saveData = SaveData(
sceneId: 'menu', // 设置场景ID为'menu'
description: '', // 描述为空
createdAt: DateTime.now(), // 当前时间
state: saveData.state); // 保留原始状态
}
return saveData;
}
// 主题定义
final theme = ThemeData(
useMaterial3: true, // 使用Material 3设计
colorScheme: ColorScheme.fromSeed(
seedColor: Colors.yellow, brightness: Brightness.dark), // 颜色方案
fontFamily: 'Marmelad', // 字体
textTheme: NovelTextTheme(
choiceStyle: TextStyle(
color: Colors.yellow.shade100, // 选择样式颜色
fontSize: 24, // 字号
shadows: const [
Shadow(
blurRadius: 2,
offset: Offset(2, 2),
),
]), // 阴影
headerStyle: TextStyle(
color: Colors.white, // 标题样式颜色
fontSize: Platform.isAndroid || Platform.isIOS ? 16 : 20, // 字号
fontWeight: FontWeight.bold, // 粗体
shadows: const [
Shadow(
blurRadius: 2,
offset: Offset(2, 2),
),
]), // 阴影
inputStyle:
const TextStyle(color: Colors.white, fontSize: 16, shadows: [ // 输入样式
Shadow(
blurRadius: 2,
offset: Offset(2, 2),
),
]),
stringStyle: TextStyle(
color: Colors.yellow.shade100, // 字符串样式颜色
fontSize: Platform.isAndroid || Platform.isIOS ? 16 : null, // 字号
shadows: const [
Shadow(
blurRadius: 2,
offset: Offset(2, 2),
),
]))); // 阴影
更多关于Flutter插件npdart的使用_npdart 是一个用于创建视觉小说的极简游戏引擎的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复