mirror of
https://github.com/flame-engine/flame.git
synced 2025-11-03 04:18:25 +08:00
Adding SpriteSheet.fromImage
This commit is contained in:
@ -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
|
||||
|
||||
3
doc/examples/spritesheet/.gitignore
vendored
3
doc/examples/spritesheet/.gitignore
vendored
@ -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/
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -9,6 +9,7 @@ environment:
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
dashbook: 0.0.6
|
||||
flame:
|
||||
path: ../../../
|
||||
|
||||
|
||||
@ -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];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user