Показать сообщение отдельно
Старый 19.12.2005, 17:22
Andromed вне форума Посмотреть профиль Отправить личное сообщение для Andromed Найти все сообщения от Andromed
  № 22  
Ответить с цитированием
Andromed

Регистрация: Aug 2005
Сообщений: 83
еще один пример пиксельный огонь отличие от лого в том что цвет пикселей берется из програмно созданного градиента
средствами getPixel32

пример тут
http://www.vipsauna.com/test/pixel_fire.html
исходник тут
http://www.vipsauna.com/test/pixel_fire.fla

Код:
 
Stage.scaleMode = 'noScale';
this.createEmptyMovieClip("gradient", 2);
import flash.geom.*;
var fillType:String = "linear";
var colors:Array = [0xFF2222, 0xDFAA31, 0xB9594F, 0xAEAEAE, 0x000000];
var alphas:Array = [100, 80, 70, 50, 90];
var ratios:Array = [0, 30, 50, 70, 0xFF];
var matrix:Matrix = new Matrix();
matrix.createGradientBox(300, 1, 0, 0, 0);
var spreadMethod:String = "pad";
gradient.beginGradientFill(fillType, colors, alphas, ratios, matrix, spreadMethod);
gradient.moveTo(0, 0);
gradient.lineTo(300, 0);
gradient.lineTo(300, 5);
gradient.lineTo(0, 5);
gradient.lineTo(0, 0);
gradient.endFill();
var gradientCanvas = new flash.display.BitmapData(300, 5, false, 0xFFCC0000);
gradientCanvas.draw(gradient);
/////////////////////////////////////////////////////////////////
this.createEmptyMovieClip("fire", 1);
var fireConvas = new flash.display.BitmapData(300, 300, true, 0);
fire.attachBitmap(fireConvas, 1);
var fade = new flash.geom.ColorTransform();
fade.alphaMultiplier = 0.8;
var fireDiametr = 40;
var fireFading = 10;
var grav = -0.2;
var maxparticles = 220;
var particleNum = 4;
var particleglowcolor = 0xFFCC00;
var particles = new Array();
var glow = new flash.filters.GlowFilter(particleglowcolor, 5, 15, 15);
var floor = 280;
fire.filters = [glow];
fire.blendMode = "add";
onEnterFrame = function () {
	for (var i = particleNum; i>=0; i--) {
		particles.unshift(createParticle(Stage.width/2+40*(Math.random()-0.5), floor, 0, random(1)+1));
	}
	if (particles.length>maxparticles) {
		particles.length = maxparticles;
	}
	for (i in particles) {
		currparticle = particles[i];
		var particlecolor = 0xFFFF6633;
		var particlecolorAlpha = 0x50FF6633;
		var pixelW = (floor-currparticle.y)/0.7;
		if (pixelW>300) {
			pixelW = 300;
		}
		particlecolor = gradientCanvas.getPixel32(pixelW, 0);
		fireConvas.setPixel32(currparticle.x, currparticle.y, particlecolor);
		fireConvas.setPixel32(currparticle.x+1, currparticle.y, particlecolor);
		fireConvas.setPixel32(currparticle.x-1, currparticle.y, particlecolor);
		fireConvas.setPixel32(currparticle.x, currparticle.y-1, particlecolor);
		fireConvas.setPixel32(currparticle.x, currparticle.y+1, particlecolor);
		moveParticle(currparticle);
	}
	fireConvas.colorTransform(fireConvas.rectangle, fade);
};
function createParticle(x, y, angle, power) {
	var prt = {};
	prt.x = x;
	prt.y = y;
	angle = -angle-Math.PI+Math.PI*Math.random()*2;
	power = -power/2+power+0.5*power*Math.random();
	prt.vx = Math.cos(angle)*power;
	prt.vy = -Math.sin(angle)*power;
	return prt;
}
function moveParticle(particle) {
	particle.x += particle.vx;
	particle.y += particle.vy;
	var fl = fireDiametr-(floor-particle.y)/fireFading;
	var right = Stage.width/2+fl;
	var left = Stage.width/2-fl;
	if (particle.x>right) {
		particle.x = right;
		particle.vx *= -Math.random()*5;
	}
	if (particle.x<left) {
		particle.x = left;
		particle.vx *= -Math.random()*5;
	}
	particle.vy += grav;
}
)