Спасибо, что нашли время для рассмотрения моего вопроса!
TL; DR Каков наилучший способ реализации игрового цикла во флаттере (можно использовать библиотеку планировщика)?
Я борюсь с реализацией работающего игрового цикла во Flutter (я хочу написать простую игру). Я не уверен, как правильно использовать библиотеку планировщика, чтобы функция вызывалась один раз за кадр со скоростью 60 кадров в секунду. Мой код работает, но он выглядит очень хакерским, особенно в той части, где я вызываю scheduleTick в функции рисования. Я сделал это, потому что, как я сказал, я не знаю, как правильно использовать библиотеку планировщика. Я не смог найти в Интернете никаких ресурсов, которые бы действительно объясняли, что делать.
Также я был бы признателен, если бы вы знали, как лучше реализовать игровой цикл. Я надеюсь, что вы можете помочь, поскольку я в значительной степени застрял с моим уродливым / хакерским кодом.
Большое вам спасибо!
Ниже приведен код моего файла 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
}
}