mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Merge pull request #521 from vlidholt/master
Adds new Layer class to sprites
This commit is contained in:
commit
0a02ea4542
@ -650,7 +650,7 @@ class Hud extends NodeWithSize {
|
|||||||
_dirtyScore = true;
|
_dirtyScore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Hud(this.spriteSheetUI) {
|
Hud(this.spriteSheetUI) : super(Size.zero) {
|
||||||
pivot = Point.origin;
|
pivot = Point.origin;
|
||||||
|
|
||||||
sprtBgScore = new Sprite(spriteSheetUI["scoreboard.png"]);
|
sprtBgScore = new Sprite(spriteSheetUI["scoreboard.png"]);
|
||||||
|
19
examples/game/lib/layer.dart
Normal file
19
examples/game/lib/layer.dart
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
part of sprites;
|
||||||
|
|
||||||
|
class Layer extends Node with SpritePaint {
|
||||||
|
Paint _cachedPaint = new Paint()
|
||||||
|
..setFilterQuality(FilterQuality.low)
|
||||||
|
..isAntiAlias = false;
|
||||||
|
|
||||||
|
void _prePaint(PaintingCanvas canvas, Matrix4 matrix) {
|
||||||
|
super._prePaint(canvas, matrix);
|
||||||
|
|
||||||
|
_updatePaint(_cachedPaint);
|
||||||
|
canvas.saveLayer(null, _cachedPaint);
|
||||||
|
}
|
||||||
|
|
||||||
|
void _postPaint(PaintingCanvas canvas, Matrix4 totalMatrix) {
|
||||||
|
canvas.restore();
|
||||||
|
super._postPaint(canvas, totalMatrix);
|
||||||
|
}
|
||||||
|
}
|
@ -21,9 +21,9 @@ class NodeWithSize extends Node {
|
|||||||
/// The default [size] is zero and the default [pivot] point is the origin. Subclasses may change the default values.
|
/// The default [size] is zero and the default [pivot] point is the origin. Subclasses may change the default values.
|
||||||
///
|
///
|
||||||
/// var myNodeWithSize = new NodeWithSize(new Size(1024.0, 1024.0));
|
/// var myNodeWithSize = new NodeWithSize(new Size(1024.0, 1024.0));
|
||||||
NodeWithSize([Size this.size, Point this.pivot]) {
|
NodeWithSize(Size this.size) {
|
||||||
if (size == null) size = Size.zero;
|
if (size == null) size = Size.zero;
|
||||||
if (pivot == null) pivot = Point.origin;
|
pivot = Point.origin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Call this method in your [paint] method if you want the origin of your drawing to be the top left corner of the
|
/// Call this method in your [paint] method if you want the origin of your drawing to be the top left corner of the
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
part of sprites;
|
part of sprites;
|
||||||
|
|
||||||
/// A Sprite is a [Node] that renders a bitmap image to the screen.
|
/// A Sprite is a [Node] that renders a bitmap image to the screen.
|
||||||
class Sprite extends NodeWithSize {
|
class Sprite extends NodeWithSize with SpritePaint {
|
||||||
|
|
||||||
/// The texture that the sprite will render to screen.
|
/// The texture that the sprite will render to screen.
|
||||||
///
|
///
|
||||||
@ -15,19 +15,6 @@ class Sprite extends NodeWithSize {
|
|||||||
///
|
///
|
||||||
/// mySprite.constrainProportions = true;
|
/// mySprite.constrainProportions = true;
|
||||||
bool constrainProportions = false;
|
bool constrainProportions = false;
|
||||||
double _opacity = 1.0;
|
|
||||||
|
|
||||||
/// The color to draw on top of the sprite, null if no color overlay is used.
|
|
||||||
///
|
|
||||||
/// // Color the sprite red
|
|
||||||
/// mySprite.colorOverlay = new Color(0x77ff0000);
|
|
||||||
Color colorOverlay;
|
|
||||||
|
|
||||||
/// The transfer mode used when drawing the sprite to screen.
|
|
||||||
///
|
|
||||||
/// // Add the colors of the sprite with the colors of the background
|
|
||||||
/// mySprite.transferMode = TransferMode.plusMode;
|
|
||||||
TransferMode transferMode;
|
|
||||||
|
|
||||||
Paint _cachedPaint = new Paint()
|
Paint _cachedPaint = new Paint()
|
||||||
..setFilterQuality(FilterQuality.low)
|
..setFilterQuality(FilterQuality.low)
|
||||||
@ -36,7 +23,7 @@ class Sprite extends NodeWithSize {
|
|||||||
/// Creates a new sprite from the provided [texture].
|
/// Creates a new sprite from the provided [texture].
|
||||||
///
|
///
|
||||||
/// var mySprite = new Sprite(myTexture)
|
/// var mySprite = new Sprite(myTexture)
|
||||||
Sprite([this.texture]) {
|
Sprite([this.texture]) : super(Size.zero) {
|
||||||
if (texture != null) {
|
if (texture != null) {
|
||||||
size = texture.size;
|
size = texture.size;
|
||||||
pivot = texture.pivot;
|
pivot = texture.pivot;
|
||||||
@ -48,7 +35,7 @@ class Sprite extends NodeWithSize {
|
|||||||
/// Creates a new sprite from the provided [image].
|
/// Creates a new sprite from the provided [image].
|
||||||
///
|
///
|
||||||
/// var mySprite = new Sprite.fromImage(myImage);
|
/// var mySprite = new Sprite.fromImage(myImage);
|
||||||
Sprite.fromImage(Image image) {
|
Sprite.fromImage(Image image) : super(Size.zero) {
|
||||||
assert(image != null);
|
assert(image != null);
|
||||||
|
|
||||||
texture = new Texture(image);
|
texture = new Texture(image);
|
||||||
@ -57,17 +44,6 @@ class Sprite extends NodeWithSize {
|
|||||||
pivot = new Point(0.5, 0.5);
|
pivot = new Point(0.5, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The opacity of the sprite in the range 0.0 to 1.0.
|
|
||||||
///
|
|
||||||
/// mySprite.opacity = 0.5;
|
|
||||||
double get opacity => _opacity;
|
|
||||||
|
|
||||||
void set opacity(double opacity) {
|
|
||||||
assert(opacity != null);
|
|
||||||
assert(opacity >= 0.0 && opacity <= 1.0);
|
|
||||||
_opacity = opacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
void paint(PaintingCanvas canvas) {
|
void paint(PaintingCanvas canvas) {
|
||||||
// Account for pivot point
|
// Account for pivot point
|
||||||
applyTransformForPivot(canvas);
|
applyTransformForPivot(canvas);
|
||||||
@ -95,13 +71,7 @@ class Sprite extends NodeWithSize {
|
|||||||
canvas.scale(scaleX, scaleY);
|
canvas.scale(scaleX, scaleY);
|
||||||
|
|
||||||
// Setup paint object for opacity and transfer mode
|
// Setup paint object for opacity and transfer mode
|
||||||
_cachedPaint.color = new Color.fromARGB((255.0*_opacity).toInt(), 255, 255, 255);
|
_updatePaint(_cachedPaint);
|
||||||
if (colorOverlay != null) {
|
|
||||||
_cachedPaint.setColorFilter(new ColorFilter.mode(colorOverlay, TransferMode.srcATop));
|
|
||||||
}
|
|
||||||
if (transferMode != null) {
|
|
||||||
_cachedPaint.setTransferMode(transferMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do actual drawing of the sprite
|
// Do actual drawing of the sprite
|
||||||
texture.drawTexture(canvas, Point.origin, _cachedPaint);
|
texture.drawTexture(canvas, Point.origin, _cachedPaint);
|
||||||
@ -112,3 +82,42 @@ class Sprite extends NodeWithSize {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class SpritePaint {
|
||||||
|
double _opacity = 1.0;
|
||||||
|
|
||||||
|
/// The opacity of the sprite in the range 0.0 to 1.0.
|
||||||
|
///
|
||||||
|
/// mySprite.opacity = 0.5;
|
||||||
|
double get opacity => _opacity;
|
||||||
|
|
||||||
|
void set opacity(double opacity) {
|
||||||
|
assert(opacity != null);
|
||||||
|
assert(opacity >= 0.0 && opacity <= 1.0);
|
||||||
|
_opacity = opacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The color to draw on top of the sprite, null if no color overlay is used.
|
||||||
|
///
|
||||||
|
/// // Color the sprite red
|
||||||
|
/// mySprite.colorOverlay = new Color(0x77ff0000);
|
||||||
|
Color colorOverlay;
|
||||||
|
|
||||||
|
/// The transfer mode used when drawing the sprite to screen.
|
||||||
|
///
|
||||||
|
/// // Add the colors of the sprite with the colors of the background
|
||||||
|
/// mySprite.transferMode = TransferMode.plusMode;
|
||||||
|
TransferMode transferMode;
|
||||||
|
|
||||||
|
void _updatePaint(Paint paint) {
|
||||||
|
paint.color = new Color.fromARGB((255.0*_opacity).toInt(), 255, 255, 255);
|
||||||
|
|
||||||
|
if (colorOverlay != null) {
|
||||||
|
_cachedPaint.setColorFilter(new ColorFilter.mode(colorOverlay, TransferMode.srcATop));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (transferMode != null) {
|
||||||
|
_cachedPaint.setTransferMode(transferMode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -21,6 +21,7 @@ import 'package:vector_math/vector_math.dart';
|
|||||||
part 'action.dart';
|
part 'action.dart';
|
||||||
part 'color_secuence.dart';
|
part 'color_secuence.dart';
|
||||||
part 'image_map.dart';
|
part 'image_map.dart';
|
||||||
|
part 'layer.dart';
|
||||||
part 'node.dart';
|
part 'node.dart';
|
||||||
part 'node3d.dart';
|
part 'node3d.dart';
|
||||||
part 'node_with_size.dart';
|
part 'node_with_size.dart';
|
||||||
|
Loading…
Reference in New Issue
Block a user