From 01ac0095e8528ef1f9bb964750c17f808488d823 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Tue, 28 Jul 2015 12:49:36 -0700 Subject: [PATCH] Updates startled in game demo to use drawAtlas --- .../example/game/lib/game_demo_world.dart | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/packages/flutter/example/game/lib/game_demo_world.dart b/packages/flutter/example/game/lib/game_demo_world.dart index b34f2ff752b..f5bf2524ac0 100644 --- a/packages/flutter/example/game/lib/game_demo_world.dart +++ b/packages/flutter/example/game/lib/game_demo_world.dart @@ -562,49 +562,43 @@ class Laser extends Sprite { // Background starfield class StarField extends Node { + Image _image; int _numStars; List _starPositions; List _starScales; - List _opacity; - List _textures; + List _rects; + List _colors; + Paint _paint = new Paint() + ..setFilterQuality(sky.FilterQuality.low) + ..isAntiAlias = false + ..setTransferMode(sky.TransferMode.plus); StarField(SpriteSheet spriteSheet, this._numStars) { _starPositions = []; _starScales = []; - _opacity = []; - _textures = []; + _colors = []; + _rects = []; for (int i = 0; i < _numStars; i++) { _starPositions.add(new Point(_rand.nextDouble() * _gameSizeWidth, _rand.nextDouble() * _gameSizeHeight)); _starScales.add(_rand.nextDouble()); - _opacity.add(_rand.nextDouble() * 0.5 + 0.5); - _textures.add(spriteSheet["star_${_rand.nextInt(2)}.png"]); + _colors.add(new Color.fromARGB((255.0 * (_rand.nextDouble() * 0.5 + 0.5)).toInt(), 255, 255, 255)); + _rects.add(spriteSheet["star_${_rand.nextInt(2)}.png"].frame); } + + _image = spriteSheet.image; } void paint(PaintingCanvas canvas) { - // Setup paint object for opacity and transfer mode - Paint paint = new Paint(); - paint.setTransferMode(sky.TransferMode.plus); - - double baseScaleX = 64.0 / _textures[0].size.width; - double baseScaleY = 64.0 / _textures[0].size.height; - - // Draw each star + // Create a transform for each star + List transforms = []; for (int i = 0; i < _numStars; i++) { - Point pos = _starPositions[i]; - double scale = _starScales[i]; - paint.color = new Color.fromARGB((255.0*_opacity[i]).toInt(), 255, 255, 255); - - canvas.save(); - - canvas.translate(pos.x, pos.y); - canvas.scale(baseScaleX * scale, baseScaleY * scale); - - canvas.drawImageRect(_textures[i].image, _textures[i].frame, _textures[i].spriteSourceSize, paint); - - canvas.restore(); + sky.RSTransform transform = new sky.RSTransform(_starScales[i], 0.0, _starPositions[i].x, _starPositions[i].y); + transforms.add(transform); } + + // Draw the stars + canvas.drawAtlas(_image, transforms, _rects, _colors, sky.TransferMode.modulate, null, _paint); } void move(double dx, double dy) {