发新话题
打印

[分享] 纯代码的火的效果

不错

TOP

不错!
小站不断更新中……
www.hopboy.com
www.adobebar.cn

TOP

TOP

顶楼主啊  这贴应该被置顶 绝对 要置顶
顺便问下楼主 对付框架网页的SWF按扭饿代码怎么弄啊 啊 我是新手 不能发贴增是郁闷的来......
我知道这个代码  但是会重新开个新页on(press)
{getURL("","");
}
急求啊 360度空翻720倒空翻小拇指倒立原地转个不停加从6楼跳下来头先着地.....趴求.....

我菜鸟.

TOP

厉害

学习啦

TOP

用代码写还不如直接用3D做个,用代码写的话,大的项目很少的

TOP

ding adinga 这是个好贴.......

TOP

以前看过一个,不过这个效果很好,很接近3D渲染的火焰了

TOP

太好了

TOP

好厉害,偶像啊,我最讨厌代码了,不过貌似代码真的很管用,我要是也会写就好了,没有用楼主的代码,但是崇拜一下

TOP

好仰慕~可以收藏吧~

TOP

喜欢

像作者学习。。。

TOP

厉害

TOP

我也来安慰一下楼主

TOP

我对楼主的仰慕犹如滔滔江水连绵不绝,又有如黄河泛滥一发不可收拾。

TOP

效果挺好,但用处不大,太耗CPU了。

TOP

强::,顶一下
向大家学习!!!

TOP

太强了 。。收藏咯 。。
蛮好的东西。

TOP

效果非常不错,就是太耗资源了,要是有人能优化的好些的话,以后可以用来做游戏的特效!
世界好大,却没有我站脚的地方

TOP

经典 支持一下

TOP

楼主~~好崇拜你 !!顶一个~

TOP

不错啊?真的很好!!

TOP

支持下

TOP

感谢

感谢楼主花心血发上来这么好的帖子~~~强力顶!!!

TOP

效果很逼真啊

TOP

我无法正常Import Matrix这个类,请问应该怎么办啊?

我是在FLASH CS3下想用你的效果,Flash选的是AS2脚本支持,Import flash.geom.*;后制作影片剪辑的实例无效果,用trace检查发现是matrix变量为定义。加上手动定义var matrix:Matrix;后显示无法加载类或接口'flash.geom.Matrix'。
转到Flash MX 8.0后也是如此。
请问应该怎么办啊?

在Import的时候可以在list中看到Matrix,但是就是无法正常加载。

TOP

在Flash MX 2004下(以及FlashCS3的AS2文件中)矩阵的编写需要改变:
matrix = {matrixType:"box", x:-McR/2, y:0, w:McR, h:McR, r:0};

此外,在这种模式下,用了上述Matrix以后显示会有问题:用正方形填充的时候在边缘部分会出现黑灰色。因而此时最好不用正方形填充而用曲线填充:
moveTo(-McR/2,McR/2);
curveTo(-McR/2,McR,0,McR);
curveTo(McR/2,McR,McR/2,McR/2);
curveTo(McR/2,0,0,0);
curveTo(-McR/2,0,-McR/2,McR/2);

同时,在上述模式下,代码中的blendMode无效,因而无法做出高亮的火焰效果。
至少我这里不行。

如果改用自己画的MC的话,在flames的申明中把CreaMovie改为自己的MC的名字。blendMode一样不可用。

TOP

移植到AS3

很喜欢火焰的效果,所以把LZ的代码移植到了AS3下。
四个文件:一个是显示用的Fla,三个是AS,放到FireWorks子文件夹下。
Fire.Fla就一帧,内容为Code:
import FireWorks.Fire;
var F:Fire=new Fire(0,150);
addChild(F);
F.visible=true;
F.x=stage.stageWidth/2;
F.y=stage.stageHeight/2;

FlameBall.as:
package FireWorks{
        import flash.display.Sprite;
        import flash.geom.Matrix;

        public class FlameBall extends Sprite {
                private var Radius:Number=20;
                private var Alpha:Number=40;
                public function FlameBall():void {
                        var matrix:Matrix=new Matrix();
                        var colors:Array=[0xFFFF00,0xFFFF00];
                        var alphas:Array=[Alpha,0];
                        var ratios:Array=[0,0xFF];
                        matrix.createGradientBox(Radius*2,Radius*2,0,-Radius,-Radius);
                        this.graphics.beginGradientFill("radial",colors,alphas,ratios,matrix);
                        this.graphics.moveTo(0,0);
                        this.graphics.drawCircle(0,0,Radius);
                        this.graphics.endFill();
                }
        }
}

Flame.as:
package FireWorks{
        import flash.display.Sprite;
        import flash.geom.Matrix;
        import flash.geom.ColorTransform;
        import flash.utils.*;

        public class Flame extends Sprite {
                public static  var Velocity:Number=100;//火焰上升速度
                public static  var VelocityRange:Number=50;//火焰上升速度浮动
                public static  var Scale:Number=1;//火焰初始最大比率
                public static  var Alpha:Number=0.5;//火焰初始透明度
                public static  var ShiftVelocity:Number=0.6;
                public static  var SizeMin:Number=2;
                public static  var SizeRange:Number=10;
                public static  var ScaleMin:Number=0.05;

                private var flameball:FlameBall;
                private var g:int=255;//当前绿色分量
                private var a:Number=Alpha;//当前透明度
                private var Shift:Number;//描述的火焰扩散范围,即初始横向偏移量
                private var Direct:int=(Math.random()>0.5)?1:-1;//1表示右,-1表示左
                private var Size:Number;//描述了不同范围火焰的增长速度
                private var Control:Number=ShiftVelocity;//控制方向转向和缩放速度的变量;
                private var ColorChange:int;//颜色变化速度
                private var StartPosition:Number;

                public function Flame(X:Number=0):void {
                        var scale:Number=(Scale-ScaleMin)*Math.random();
                        Shift=scale*SizeRange;
                        Size=SizeRange*(Scale-ScaleMin)-Shift+SizeMin;
                        scale+=ScaleMin;
                        ColorChange=(12-Size);
                        StartPosition=X;

                        flameball=new FlameBall();
                        this.addChild(flameball);
                        flameball.x=StartPosition;
                        flameball.y=0;
                        flameball.visible=true;
                        flameball.scaleX=scale;
                        flameball.scaleY=scale;
                        flameball.blendMode="add";
                        flameball.transform.colorTransform=new ColorTransform(0,0,0,a,255,g,0,0);
                }
                public function Start():void {
                        with (flameball) {
                                x+=Shift*Direct*Control;
                                y-=(Velocity+VelocityRange*Math.random())/100;
                                scaleX+=Size*Control/100;
                                scaleY=scaleX;
                                a+=0.25*Control;
                                g-=ColorChange;
                                if(g<0)g=0;
                                transform.colorTransform=new ColorTransform(0,0,0,a,255,g,0,0);
                        }
                        if (a>1) {
                                a=1;
                                Control=-0.04;
                        }
                        if (a<0) {
                                this.removeChild(flameball);
                        } else {
                                setTimeout(Start,15);
                        }
                }
        }
}

Fire.as:
package FireWorks{
        import flash.display.Sprite;
        import flash.utils.*;

        public class Fire extends Sprite {
                public static var Fires:Number=100;
                public var flame:Array=new Array(Fires);
               
                private var Num:Number;
                public function Fire(X:Number=0,Y:Number=0):void {
                        Num=0;
                        Start(X,Y);
                }
                private function Start(X:Number=0,Y:Number=0):void{
                        flame[Num]=new Flame(0);
                        flame[Num].x=X;
                        flame[Num].y=Y;
                        this.addChild(flame[Num]);
                        flame[Num].Start();
                        Num++;
                        if(Num>Fires)Num=1;
                        setTimeout(Start,18,X,Y);
                }
        }
}



有一个很大的缺点就是火很小。参数调到后来都没信心了。
另一个大问题就是火不能多,一多CPU就挂掉。

TOP

请好心人帮忙解决flv播放器进度条问题

我不知道怎么上传文件,请好心人加我QQ  3549615   或msn    easyloft@msn.com
谢谢~~

TOP

LZ的代码终于研究透了。
在FlashCS3下用AS2无法直接使用Matrix类(不知道为什么,感到很奇怪),同时如果选的是AS2的话默认的是FlashPlayer7的,手动改到FlashPlayer8以后BlendMode就能用了。
Flash MX 2004中也是Matrix问题,不过BlendMode就不知道改哪里了。

TOP

发新话题