Index: sky/examples/game/lib/sprite.dart |
diff --git a/sky/examples/game/lib/sprite.dart b/sky/examples/game/lib/sprite.dart |
index a58168f18ee5977a8d771b62238251828a534ab0..ae5b9ee1fbf092337d45a93944e0173496ddf206 100644 |
--- a/sky/examples/game/lib/sprite.dart |
+++ b/sky/examples/game/lib/sprite.dart |
@@ -3,13 +3,13 @@ part of sprites; |
/// A Sprite is a [Node] that renders a bitmap image to the screen. |
class Sprite extends NodeWithSize { |
- /// The image that the sprite will render to screen. |
+ /// The texture that the sprite will render to screen. |
/// |
- /// If the image is null, the sprite will be rendered as a red square |
+ /// If the texture is null, the sprite will be rendered as a red square |
/// marking the bounds of the sprite. |
/// |
- /// mySprite.image = myImage; |
- Image image; |
+ /// mySprite.texture = myTexture; |
+ Texture texture; |
/// If true, constrains the proportions of the image by scaling it down, if its proportions doesn't match the [size]. |
/// |
@@ -29,14 +29,28 @@ class Sprite extends NodeWithSize { |
/// mySprite.transferMode = TransferMode.plusMode; |
TransferMode transferMode; |
+ /// Creates a new sprite from the provided [texture]. |
+ /// |
+ /// var mySprite = new Sprite(myTexture) |
+ Sprite([this.texture]) { |
+ if (texture != null) { |
+ size = texture.size; |
+ pivot = texture.pivot; |
+ } else { |
+ pivot = new Point(0.5, 0.5); |
+ } |
+ } |
+ |
/// Creates a new sprite from the provided [image]. |
/// |
- /// var mySprite = new Sprite(myImage); |
- Sprite([Image this.image]) { |
+ /// var mySprite = new Sprite.fromImage(myImage); |
+ Sprite.fromImage(Image image) { |
+ assert(image != null); |
+ |
+ texture = new Texture(image); |
+ size = texture.size; |
+ |
pivot = new Point(0.5, 0.5); |
- if (image != null) { |
- size = new Size(image.width.toDouble(), image.height.toDouble()); |
- } |
} |
/// The opacity of the sprite in the range 0.0 to 1.0. |
@@ -56,19 +70,22 @@ class Sprite extends NodeWithSize { |
// Account for pivot point |
applyTransformForPivot(canvas); |
- if (image != null && image.width > 0 && image.height > 0) { |
+ if (texture != null) { |
+ double w = texture.size.width; |
+ double h = texture.size.height; |
+ |
+ if (w <= 0 || h <= 0) return; |
- double scaleX = size.width/image.width; |
- double scaleY = size.height/image.height; |
+ double scaleX = size.width / w; |
+ double scaleY = size.height / h; |
if (constrainProportions) { |
// Constrain proportions, using the smallest scale and by centering the image |
if (scaleX < scaleY) { |
- canvas.translate(0.0, (size.height - scaleX * image.height)/2.0); |
+ canvas.translate(0.0, (size.height - scaleX * h) / 2.0); |
scaleY = scaleX; |
- } |
- else { |
- canvas.translate((size.width - scaleY * image.width)/2.0, 0.0); |
+ } else { |
+ canvas.translate((size.width - scaleY * w) / 2.0, 0.0); |
scaleX = scaleY; |
} |
} |
@@ -85,9 +102,9 @@ class Sprite extends NodeWithSize { |
paint.setTransferMode(transferMode); |
} |
- canvas.drawImage(image, 0.0, 0.0, paint); |
- } |
- else { |
+ // Do actual drawing of the sprite |
+ canvas.drawImageRect(texture.image, texture.frame, texture.spriteSourceSize, paint); |
+ } else { |
// Paint a red square for missing texture |
canvas.drawRect(new Rect.fromLTRB(0.0, 0.0, size.width, size.height), |
new Paint()..color = const Color.fromARGB(255, 255, 0, 0)); |