Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-09-2006, 09:26   #1 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
[stuff] particle storm

tach alleman,

und wieder was zum spielen, testen, verwursten und über das
ein- oder andere feedback würde ich mich wie immer freuen.

derzeit zeichne ich "nur" 500 particle gleichzeitig, kommen aber
trotzdem schon ein paar schöne effekte bei rum.

beide varianten reagieren zusätzlich auf die mausposition -
viel spaß bei spielen:


ansehen

variante:
ansehen


Code:

/////////////////////////////////////////////////////
//  pure force particles
//	author : frank reitberger
//	site : http://www.dasprinzip.com
//  copyright 2006
/////////////////////////////////////////////////////


// --------------------------------------------------------------------------------------------------


stop();


// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// import flash filter classes
///////////////////////////////////


import flash.display.BitmapData;
import flash.filters.*;
import flash.geom.*;



// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// setup particles global vars
///////////////////////////////////


var numParticles:Number = 500;
var grav:Number = 0;
var drawLines:Boolean = false;

_quality = "LOW";



this._lockroot = true;



// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// configure canvas
///////////////////////////////////


function initStage() {
	
	_root.efxStage = new BitmapData(Stage.width, Stage.height, true, 0x00FFFFFF);
	
	_root.createEmptyMovieClip("efxClip", _root.getNextHighestDepth());
	_root["efxClip"].attachBitmap(_root.efxStage, _root.getNextHighestDepth());
	
	_root["efxClip"]._x = _root["efxClip"]._y = -1;
	
	for( var i:Number=0; i < numParticles; i++) {
		var sprite:MovieClip = _root.createEmptyMovieClip("dot" + i,_root.getNextHighestDepth());
		sprite._x = random(Stage.width);
		sprite._y = random(Stage.height);
		sprite.vx = Math.random() * 1;
		sprite.vy = Math.random() * 1;
		sprite.angle = 0;
		sprite.k = .08;
	}
	
	_root["txt"].swapDepths(_root.getNextHighestDepth());
	
	paint();
}

// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// paint pure force particles
///////////////////////////////////


function paint() {
	
	
	_root.onEnterFrame = function() {
		
		_root.efxStage.colorTransform(_root.efxStage.rectangle, new flash.geom.ColorTransform(0, 1, 1, 1, 1, -1, -1, -5));
        _root.efxStage.applyFilter(_root.efxStage,_root.efxStage.rectangle, new Point(0,0), new BlurFilter(1,1,1));
		
		var i:Number = 0;
		
		while (i < numParticles) {
		
			var sprite:MovieClip = _root["dot" + i];
			sprite.lineStyle(1, 0xffffff, 100);
            sprite.moveTo(sprite._x, sprite._y);
            sprite.lineTo(sprite._x + 1, sprite._y + 1);
			
			dx = _xmouse - sprite._x;
			dy = _ymouse - sprite._y;
			dist = Math.sqrt(dx*dx + dy*dy);
			sprite.angle += .05;
			
			if(dist < 100) {
				
				tx = _xmouse - dx / dist * (Math.cos(sprite.angle) * 50 + 50);
				ty = _ymouse - dy / dist * (Math.sin(sprite.angle) * 50 + 50);
				sprite.vx += (tx - sprite._x) * sprite.k;
				sprite.vy += (ty - sprite._y) * sprite.k;
			
			} else {
				
				force = 6000 / (dist * dist);
				sprite.vx += force * dx / dist;
				sprite.vy += force * dy / dist;	
			
			}
			
   			sprite.vx += Math.random() * 1;
   			sprite.vy += Math.random() * -1.5;
  			sprite.vx *= .95;
   			sprite.vy *= .95;
			sprite.vy += grav;
	
		    sprite._x = sprite._x + sprite.vx;
    		sprite._y = sprite._y + sprite.vy;
			
            _root.efxStage.draw(sprite);
            sprite.clear();					
			
			if(sprite._x > Stage.width) {
     			sprite._x = 0;
      			sprite.vx *= -1;
    		}
			
			if(sprite._x < 0) {
				sprite._x = Stage.width;
				sprite.vx *= -1;
			}
			
			if(sprite._y > Stage.height) {
				sprite._y = 0;
				sprite.vy *= -1;
			}
			
			if(sprite._y < 0) {
				sprite._y = Stage.height;
				sprite.vy *= -1;
			}						
			
			
			i++;
			
		}
		
	}
}



// --------------------------------------------------------------------------------------------------

///////////////////////////////////
// init
///////////////////////////////////


initStage();


pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Alt 27-09-2006, 14:45   #2 (permalink)
habs vergessen
 
Benutzerbild von pwdVergesser
 
Registriert seit: Feb 2006
Beiträge: 990
Ergänzung:

cool wäre natürlich mal eine variante mit bis 1000 particeln...
aber ob dieser ansatz in as2 zu realisieren ist...


pwd
__________________
Blog/Lab Xing
pwdVergesser ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele