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