$ flutter pub add flame
$ flutter pub upgrade flame
import 'package:flutter/material.dart'; import 'package:flame/game.dart'; void main() async { runApp(new MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Generated App', theme: new ThemeData( primarySwatch: Colors.blue, primaryColor: const Color(0xFF2196f3), canvasColor: const Color(0xFFfafafa), ), home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key? key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My App'), ), body: GameWidget(game: SampleGame()) ); } } class SampleGame extends FlameGame { late final paint; @override Future<void> onLoad() async { await super.onLoad(); paint = Paint(); paint.color = Colors.blue; } @override void render(Canvas canvas) { super.render(canvas); final rect = Rect.fromLTWH(100, 100, 100, 100); canvas.drawOval(rect, paint); } }
キーで図形を操作する
class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My App'), ), body: GameWidget(game: SampleGame()) ); } } class SampleGame extends FlameGame with KeyboardEvents { late final paint; late Vector2 _loc; @override Future<void> onLoad() async { await super.onLoad(); paint = Paint(); paint.color = Colors.blue; _loc = Vector2(100, 100); } @override void render(Canvas canvas) { super.render(canvas); final rect = Rect.fromLTWH(_loc.x, _loc.y, 100, 100); canvas.drawOval(rect, paint); } @override KeyEventResult onKeyEvent( RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed, ) { final _dpos = Vector2(0, 0); if (event.character == 'j') { _dpos.x = -10; } if (event.character == 'l') { _dpos.x = 10; } if (event.character == 'i') { _dpos.y = -10.0; } if (event.character == 'k') { _dpos.y = 10; } _loc += _dpos; return KeyEventResult.handled; } }