感谢您抽出宝贵的时间来审核我的问题!
TL; DR在颤抖中实现游戏循环的最佳方法是什么(可能会使用调度程序库)?
我正在努力在Flutter中实现功能正常的游戏循环(我想编写一个简单的游戏)。我不确定如何正确使用调度程序库以60 fps的速度每帧调用一次函数。我的代码可以正常工作,但是感觉很hacky,尤其是在绘画功能中我称为scheduleTick的部分。我这样做是因为正如我所说,我不知道如何正确使用调度程序库。我在网上找不到任何能真正解释该怎么做的资源。
如果您知道实现游戏循环的更好方法,也将不胜感激。希望您能提供帮助,因为我对我的丑陋/ hacky代码非常执着。
非常感谢您!
下面的代码是我的game.dart文件。在main.dart中,我仅使用Game类来创建视图。
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
class Game extends StatelessWidget {
final GamePainter gamePainter = GamePainter();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.white, Colors.green],
),
),
child: CustomPaint(
painter: gamePainter,
child: Center(),
),
),
);
}
}
class GamePainter extends CustomPainter {
bool start = true;
Duration previous = Duration.zero;
@override
void paint(Canvas canvas, Size size) {
if(start) {
scheduleTick();
start = false;
}
// draw components
}
@override
bool shouldRepaint(GamePainter oldDelegate) {
return true;
}
int frameCallbackID;
void scheduleTick() {
frameCallbackID = SchedulerBinding.instance.scheduleFrameCallback(tick);
}
void tick(Duration timestamp) {
scheduleTick();
update(timestamp);
}
void update(Duration now) {
// Update Components
}
}