mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-04 13:08:09 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'dart:async';
 | 
						|
 | 
						|
import 'package:flame/flame.dart';
 | 
						|
import 'package:flame/sprite_animation.dart';
 | 
						|
import 'package:flame/sprite.dart';
 | 
						|
import 'package:flame/spritesheet.dart';
 | 
						|
import 'package:flame/vector2f.dart';
 | 
						|
import 'package:flame/widgets/animation_widget.dart';
 | 
						|
import 'package:flame/widgets/sprite_widget.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
Sprite _sprite;
 | 
						|
SpriteAnimation _animation;
 | 
						|
 | 
						|
void main() async {
 | 
						|
  WidgetsFlutterBinding.ensureInitialized();
 | 
						|
  _sprite = await Sprite.loadSprite('minotaur.png', width: 96, height: 96);
 | 
						|
 | 
						|
  await Flame.images.load('minotaur.png');
 | 
						|
  final _animationSpriteSheet = SpriteSheet(
 | 
						|
    imageName: 'minotaur.png',
 | 
						|
    columns: 19,
 | 
						|
    rows: 1,
 | 
						|
    textureWidth: 96,
 | 
						|
    textureHeight: 96,
 | 
						|
  );
 | 
						|
  _animation = _animationSpriteSheet.createAnimation(
 | 
						|
    0,
 | 
						|
    stepTime: 0.2,
 | 
						|
    to: 19,
 | 
						|
  );
 | 
						|
 | 
						|
  runApp(MyApp());
 | 
						|
}
 | 
						|
 | 
						|
class MyApp extends StatelessWidget {
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return MaterialApp(
 | 
						|
      title: 'Animation as a Widget Demo',
 | 
						|
      theme: ThemeData(primarySwatch: Colors.blue),
 | 
						|
      home: MyHomePage(),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class MyHomePage extends StatefulWidget {
 | 
						|
  @override
 | 
						|
  _MyHomePageState createState() => _MyHomePageState();
 | 
						|
}
 | 
						|
 | 
						|
class _MyHomePageState extends State<MyHomePage> {
 | 
						|
  Vector2F _position = Vector2F(256.0, 256.0);
 | 
						|
 | 
						|
  @override
 | 
						|
  void initState() {
 | 
						|
    super.initState();
 | 
						|
    changePosition();
 | 
						|
  }
 | 
						|
 | 
						|
  void changePosition() async {
 | 
						|
    await Future.delayed(const Duration(seconds: 1));
 | 
						|
    setState(() {
 | 
						|
      _position = Vector2F(10 + _position.x, 10 + _position.y);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  void _clickFab(GlobalKey<ScaffoldState> key) {
 | 
						|
    key.currentState.showSnackBar(
 | 
						|
      const SnackBar(
 | 
						|
        content: const Text('You clicked the FAB!'),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    final key = GlobalKey<ScaffoldState>();
 | 
						|
    return Scaffold(
 | 
						|
      key: key,
 | 
						|
      appBar: AppBar(
 | 
						|
        title: const Text('Animation as a Widget Demo'),
 | 
						|
      ),
 | 
						|
      body: Center(
 | 
						|
        child: Column(
 | 
						|
          mainAxisAlignment: MainAxisAlignment.center,
 | 
						|
          children: <Widget>[
 | 
						|
            const Text('Hi there! This is a regular Flutter app,'),
 | 
						|
            const Text('with a complex widget tree and also'),
 | 
						|
            const Text('some pretty sprite sheet animations :)'),
 | 
						|
            Container(
 | 
						|
              width: 200,
 | 
						|
              height: 200,
 | 
						|
              child: SpriteAnimationWidget(animation: _animation),
 | 
						|
            ),
 | 
						|
            const Text('Neat, hum?'),
 | 
						|
            const Text(
 | 
						|
                'By the way, you can also use static sprites as widgets:'),
 | 
						|
            Container(
 | 
						|
              width: 200,
 | 
						|
              height: 200,
 | 
						|
              child: SpriteWidget(sprite: _sprite),
 | 
						|
            ),
 | 
						|
            const Text('Sprites from Elthen\'s amazing work on itch.io:'),
 | 
						|
            const Text('https://elthen.itch.io/2d-pixel-art-minotaur-sprites'),
 | 
						|
          ],
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
      floatingActionButton: FloatingActionButton(
 | 
						|
        onPressed: () => _clickFab(key),
 | 
						|
        child: const Icon(Icons.add),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |