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 - Fix PositionComponentEffect drifting
- Add possibility to combine effects - Add possibility to combine effects
- Update to newest box2d_flame which fixes torque bug - Update to newest box2d_flame which fixes torque bug
- Adding SpriteSheet.fromImage
## 0.22.0 ## 0.22.0
- Fixing BaseGame tap detectors issues - Fixing BaseGame tap detectors issues

View File

@ -68,3 +68,6 @@
!**/ios/**/default.pbxuser !**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3 !**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages !/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/animation_component.dart';
import 'package:flame/components/component.dart'; import 'package:flame/components/component.dart';
import 'package:flame/flame.dart'; import 'package:flame/flame.dart';
import 'package:flame/game.dart'; import 'package:flame/game.dart';
import 'package:flame/spritesheet.dart'; import 'package:flame/spritesheet.dart';
import 'package:flutter/material.dart'; import 'package:dashbook/dashbook.dart';
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
final Size size = await Flame.util.initialDimensions();
final game = MyGame(size); final spriteSheet = SpriteSheet(
runApp(game.widget); 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 { class MyGame extends BaseGame {
MyGame(Size screenSize) { MyGame(SpriteSheet spriteSheet) {
size = screenSize;
final spritesheet = SpriteSheet(
imageName: 'spritesheet.png',
textureWidth: 16,
textureHeight: 18,
columns: 11,
rows: 2,
);
final vampireAnimation = final vampireAnimation =
spritesheet.createAnimation(0, stepTime: 0.1, to: 7); spriteSheet.createAnimation(0, stepTime: 0.1, to: 7);
final ghostAnimation = spritesheet.createAnimation(1, stepTime: 0.1, to: 7); final ghostAnimation = spriteSheet.createAnimation(1, stepTime: 0.1, to: 7);
final vampireComponent = AnimationComponent(80, 90, vampireAnimation); final vampireComponent = AnimationComponent(80, 90, vampireAnimation)
vampireComponent.x = 150; ..x = 150
vampireComponent.y = 100; ..y = 100;
final ghostComponent = AnimationComponent(80, 90, ghostAnimation); final ghostComponent = AnimationComponent(80, 90, ghostAnimation)
ghostComponent.x = 150; ..x = 150
ghostComponent.y = 220; ..y = 220;
add(vampireComponent); add(vampireComponent);
add(ghostComponent); add(ghostComponent);
// Some plain sprites // Some plain sprites
final vampireSpriteComponent = final vampireSpriteComponent =
SpriteComponent.fromSprite(80, 90, spritesheet.getSprite(0, 0)); SpriteComponent.fromSprite(80, 90, spriteSheet.getSprite(0, 0))
vampireSpriteComponent.x = 50; ..x = 50
vampireSpriteComponent.y = 100; ..y = 100;
final ghostSpriteComponent = final ghostSpriteComponent =
SpriteComponent.fromSprite(80, 90, spritesheet.getSprite(1, 0)); SpriteComponent.fromSprite(80, 90, spriteSheet.getSprite(1, 0))
ghostSpriteComponent.x = 50; ..x = 50
ghostSpriteComponent.y = 220; ..y = 220;
add(vampireSpriteComponent); add(vampireSpriteComponent);
add(ghostSpriteComponent); add(ghostSpriteComponent);

View File

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

View File

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