Toggle navigation
Sign Up
Log In
Explore
Works
Folders
Tools
Collections
Artists
Groups
Groups
Topics
Tasks
Tasks
Jobs
Teams
Jobs
Recommendation
More Effects...
ActionScript
// forked from fumix's forked from: 重力マウス(プチ軽量化:10万パーティクル) // forked from clockmaker's 重力マウス(プチ軽量化:10万パーティクル) // forked from coppieee's 重力マウス(さらに軽量化してみた) // forked from paq's forked from: 重力マウス(ちょっぴり軽量化してみた) // forked from fumix's 重力マウス(リンクリストにしてみた) // forked from undo's 重力マウス // リンクリストにしてみたけどそんなに速くない?? //_bmd.fillRect()を_bmd.setPixel()に変更。 //sin(),cos(),atan2(),sqrt()を排除。 // Add final class / mouseEnalbled = false by clockmaker // Nicolasさんのdo while→whileを適用 package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.geom.ColorTransform; import flash.geom.Point; import flash.geom.Rectangle; [SWF(frameRate='60', width='660', height='660', backgroundColor=0x000000)] import flash.utils.Dictionary; public class ParticleTest1 extends Sprite { private var _bmp:Bitmap; private var _bmd:BitmapData; private var _bmdRect:Rectangle; private var _colorTransform:ColorTransform = new ColorTransform(0.8, 0.7, 0.96, 1.0); private var _first:Node; private var _maxNum:int = 250000; private var _cnt:int = 0; public function ParticleTest1() { if(stage) init(null); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(evt:Event):void { removeEventListener(Event.ADDED_TO_STAGE, init); this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.quality = "low"; this.stage.frameRate = 120; this.mouseEnabled = false; this.mouseChildren = false; var old:Node; _bmd = new BitmapData(660, 660, false, 0x000000); _bmp = new Bitmap(_bmd); addChild(_bmp); this._bmdRect = _bmd.rect; for (var i:int = 0; i < this._maxNum; i++) { var n:Node = new Node(); n.pos_x = Math.random() * 660 >> 0; n.pos_y = Math.random() * 660 >> 0; //リンクリスト if (_first == null) { old = _first = n; } else { old.next = n; old = n; } } addEventListener(Event.ENTER_FRAME, onEnter); } private function onEnter(evt:Event):void { // 3フレームに1回だけ計算。実質20fps。詐欺(笑) if(_cnt ++ % 3 > 0) return; var gravPoint_x:Number = mouseX; var gravPoint_y:Number = mouseY; var n:Node = _first; this._bmd.lock(); while(n) { var diff_x:Number = gravPoint_x - n.pos_x; var diff_y:Number = gravPoint_y - n.pos_y; var acc:Number = 200 / (diff_x * diff_x + diff_y * diff_y); var acc_x:Number = acc * diff_x; var acc_y:Number = acc * diff_y; n.v_x += acc * diff_x; n.v_y += acc * diff_y; n.pos_x += n.v_x; n.pos_y += n.v_y; n.v_x *= 0.98; n.v_y *= 0.98; this._bmd.setPixel(n.pos_x >> 0, n.pos_y >> 0, 0xFFFFFF); n = n.next; } this._bmd.colorTransform(this._bmdRect, this._colorTransform); this._bmd.unlock(); } } } final class Node { public var v_x:Number = 0; public var v_y:Number = 0; public var pos_x:Number = 0; public var pos_y:Number = 0; public var next:Node; }
Join Effecthub.com
Working with Global Gaming Artists and Developers!
Login
Sign Up
Or Login with Your Email Address:
Email
Password
Remember
Or Sign Up with Your Email Address:
Your Email
This field must contain a valid email
Set Password
Password should be at least 1 character
Stay informed via email