Adding SpriteSheet.fromImage

This commit is contained in:
Erick Zanardo
2020-06-16 19:24:41 -03:00
parent 41129c5494
commit 642a2d7ecd
5 changed files with 90 additions and 36 deletions

View File

@ -5,6 +5,7 @@
- Fix PositionComponentEffect drifting
- Add possibility to combine effects
- Update to newest box2d_flame which fixes torque bug
- Adding SpriteSheet.fromImage
## 0.22.0
- Fixing BaseGame tap detectors issues

View File

@ -68,3 +68,6 @@
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
lib/generated_plugin_registrant.dart
web/

View File

@ -1,54 +1,82 @@
import 'package:flutter/material.dart';
import 'package:flame/components/animation_component.dart';
import 'package:flame/components/component.dart';
import 'package:flame/flame.dart';
import 'package:flame/game.dart';
import 'package:flame/spritesheet.dart';
import 'package:flutter/material.dart';
import 'package:dashbook/dashbook.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final Size size = await Flame.util.initialDimensions();
final game = MyGame(size);
runApp(game.widget);
final spriteSheet = SpriteSheet(
imageName: 'spritesheet.png',
textureWidth: 16,
textureHeight: 18,
columns: 11,
rows: 2,
);
final spriteSheetFromImage = SpriteSheet.fromImage(
image: await Flame.images.load('spritesheet.png'),
textureWidth: 16,
textureHeight: 18,
columns: 11,
rows: 2,
);
final dashbook = Dashbook();
dashbook
.storiesOf('SpriteSheet')
.add('defaut', (_) => GameWrapper(MyGame(spriteSheet)))
.add('fromImage', (_) => GameWrapper(MyGame(spriteSheetFromImage)));
runApp(dashbook);
}
class GameWrapper extends StatelessWidget {
final Game game;
GameWrapper(this.game);
@override
Widget build(_) {
return Container(
width: 400,
height: 400,
child: game.widget,
);
}
}
class MyGame extends BaseGame {
MyGame(Size screenSize) {
size = screenSize;
final spritesheet = SpriteSheet(
imageName: 'spritesheet.png',
textureWidth: 16,
textureHeight: 18,
columns: 11,
rows: 2,
);
MyGame(SpriteSheet spriteSheet) {
final vampireAnimation =
spritesheet.createAnimation(0, stepTime: 0.1, to: 7);
final ghostAnimation = spritesheet.createAnimation(1, stepTime: 0.1, to: 7);
spriteSheet.createAnimation(0, stepTime: 0.1, to: 7);
final ghostAnimation = spriteSheet.createAnimation(1, stepTime: 0.1, to: 7);
final vampireComponent = AnimationComponent(80, 90, vampireAnimation);
vampireComponent.x = 150;
vampireComponent.y = 100;
final vampireComponent = AnimationComponent(80, 90, vampireAnimation)
..x = 150
..y = 100;
final ghostComponent = AnimationComponent(80, 90, ghostAnimation);
ghostComponent.x = 150;
ghostComponent.y = 220;
final ghostComponent = AnimationComponent(80, 90, ghostAnimation)
..x = 150
..y = 220;
add(vampireComponent);
add(ghostComponent);
// Some plain sprites
final vampireSpriteComponent =
SpriteComponent.fromSprite(80, 90, spritesheet.getSprite(0, 0));
vampireSpriteComponent.x = 50;
vampireSpriteComponent.y = 100;
SpriteComponent.fromSprite(80, 90, spriteSheet.getSprite(0, 0))
..x = 50
..y = 100;
final ghostSpriteComponent =
SpriteComponent.fromSprite(80, 90, spritesheet.getSprite(1, 0));
ghostSpriteComponent.x = 50;
ghostSpriteComponent.y = 220;
SpriteComponent.fromSprite(80, 90, spriteSheet.getSprite(1, 0))
..x = 50
..y = 220;
add(vampireSpriteComponent);
add(ghostSpriteComponent);

View File

@ -9,6 +9,7 @@ environment:
dependencies:
flutter:
sdk: flutter
dashbook: 0.0.6
flame:
path: ../../../

View File

@ -1,9 +1,11 @@
import 'package:meta/meta.dart';
import 'sprite.dart';
import 'animation.dart';
import 'dart:ui';
/// Utility class to help extract animations and sprites from a spritesheet image
class SpriteSheet {
String imageName;
int textureWidth;
int textureHeight;
int columns;
@ -11,12 +13,13 @@ class SpriteSheet {
List<List<Sprite>> _sprites;
SpriteSheet(
{this.imageName,
this.textureWidth,
this.textureHeight,
this.columns,
this.rows}) {
SpriteSheet({
@required String imageName,
@required this.textureWidth,
@required this.textureHeight,
@required this.columns,
@required this.rows,
}) {
_sprites = List.generate(
rows,
(y) => List.generate(
@ -28,6 +31,24 @@ class SpriteSheet {
height: textureHeight.toDouble())));
}
SpriteSheet.fromImage({
@required Image image,
@required this.textureWidth,
@required this.textureHeight,
@required this.columns,
@required this.rows,
}) {
_sprites = List.generate(
rows,
(y) => List.generate(
columns,
(x) => Sprite.fromImage(image,
x: (x * textureWidth).toDouble(),
y: (y * textureHeight).toDouble(),
width: textureWidth.toDouble(),
height: textureHeight.toDouble())));
}
Sprite getSprite(int row, int column) {
final Sprite s = _sprites[row][column];