/nickro/effects/DropFlower.as

http://my-project-nickro.googlecode.com/ · ActionScript · 117 lines · 99 code · 13 blank · 5 comment · 2 complexity · 3a21a2e124a45477f6ab0134d4eec54b MD5 · raw file

  1. /**
  2. * Copyright mousepancyo ( http://wonderfl.net/user/mousepancyo )
  3. * MIT License ( http://www.opensource.org/licenses/mit-license.php )
  4. * Downloaded from: http://wonderfl.net/c/mHNT
  5. */
  6. package org.nickro.effects
  7. {
  8. import flash.display.*;
  9. import flash.events.Event;
  10. import flash.filters.BlurFilter;
  11. import flash.geom.ColorTransform;
  12. import flash.geom.Matrix;
  13. import flash.geom.Point;
  14. import flash.net.URLRequest;
  15. import flash.utils.Dictionary;
  16. import flash.system.Security;
  17. import flash.system.LoaderContext;
  18. [SWF(width = "465", height = "465", backgroundColor = "0", frameRate = "60")]
  19. public class DropFlower extends Sprite
  20. {
  21. private const NUM_SAKURA:int = 250;
  22. private const IMG_URL:String = "http://www.digifie.jp/assets/images/sakura.png";
  23. private var _loader:Loader;
  24. private var _canvas:BitmapData;
  25. private var _ctf:ColorTransform;
  26. private var _dict:Dictionary = new Dictionary(true);
  27. private var _sakura:BitmapData;
  28. private var _sakuraList:Vector.<Sprite> = Vector.<Sprite>([]);
  29. public function DropFlower()
  30. {
  31. Wonderfl.capture_delay(20);
  32. Security.loadPolicyFile("http://www.digifie.jp/crossdomain.xml");
  33. loadImage(IMG_URL);
  34. }
  35. private function loadImage(url:String):void
  36. {
  37. var context:LoaderContext = new LoaderContext;
  38. context.checkPolicyFile = true;
  39. _loader = new Loader();
  40. _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
  41. _loader.load(new URLRequest(url), context);
  42. }
  43. private function onLoaded(e:Event):void
  44. {
  45. _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaded);
  46. _sakura = new BitmapData(_loader.width, _loader.height, true, 0);
  47. _sakura.draw(_loader);
  48. setup();
  49. addEventListener(Event.ENTER_FRAME, update);
  50. }
  51. private function setup():void
  52. {
  53. _canvas = new BitmapData(465, 465, false, 0);
  54. addChild(new Bitmap(_canvas));
  55. _ctf = new ColorTransform(.75, .75, .75);
  56. addSakura();
  57. }
  58. private function addSakura():void
  59. {
  60. var n:int = NUM_SAKURA;
  61. while(n--){
  62. var sak:Sprite = new Sprite();
  63. var bmd:BitmapData = _sakura.clone();
  64. var bm:Bitmap = new Bitmap(bmd);
  65. sak.addChild(bm);
  66. bm.x = -bm.width * .5;
  67. bm.y = -bm.height * .5;
  68. sak.scaleX = sak.scaleY = Math.random() * 1.2 + .3;
  69. sak.x = Math.random() * 300 - 200;
  70. sak.y = Math.random() * -500 - 100;
  71. sak.filters = [new BlurFilter(4, 4)];
  72. sak.blendMode = "add";
  73. _dict[sak] = {vx:3 - sak.scaleX, vy:Math.random() * sak.scaleY + 1, inix:sak.x, iniy:sak.y};
  74. addChild(sak);
  75. _sakuraList.push(sak);
  76. }
  77. }
  78. private function fall(sak:Sprite):void
  79. {
  80. sak.rotationX += Math.random() * 10;
  81. sak.rotationY += Math.random() * 10;
  82. var vx:Number = _dict[sak].vx;
  83. var vy:Number = _dict[sak].vy;
  84. vx = vx + (180 - (sak.rotationY % 360)) * .003;
  85. vy = vy - (180 - (sak.rotationX % 180)) * .008;
  86. sak.x += vx;
  87. sak.y += vy;
  88. if(sak.x > 500) sak.x = _dict[sak].inix;
  89. if(sak.y > 500) sak.y = _dict[sak].iniy;
  90. }
  91. private function update(e:Event):void
  92. {
  93. var n:int = NUM_SAKURA;
  94. while(n--){
  95. fall(_sakuraList[n]);
  96. }
  97. _canvas.lock();
  98. _canvas.draw(stage);
  99. _canvas.applyFilter(_canvas, _canvas.rect, new Point(), new BlurFilter(16, 16));
  100. _canvas.colorTransform(_canvas.rect, _ctf);
  101. _canvas.unlock();
  102. }
  103. }
  104. }