`

[转]粒子 瀑布

阅读更多
package 
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.TimerEvent;
        import flash.filters.ConvolutionFilter;
        import flash.geom.Point;
        import flash.geom.Rectangle;
        import flash.utils.Timer;
        import flash.display.BitmapDataChannel;
        import flash.system.System;
        
        /**
         * ...
         * @author chens
         */
        [SWF(width=550,height=400,backgroundColor = 0xff0000)]
        public class Main extends Sprite 
        {
                private var bitmap:Bitmap;
                private var bmpData:BitmapData;
                private var filter:ConvolutionFilter = new ConvolutionFilter(3, 3, [1, 1, 1, 1, 30, 1, 1, 1, 1], 38);
                
                private var arrPoint:Array=new Array;//点的数量
                private var arrVx:Array = new Array;//点在X方向的速度
                private var arrVy:Array = new Array;//点在Y方向的速度
                private var arrColor:Array = new Array;//每个点的颜色
                
                public function Main():void 
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
                
                private function init(e:Event = null):void 
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                        initImg();
                        initFunction();
                        
                }
                private function initImg():void {
                        bmpData = new BitmapData(550, 400, false, 0x178445);
                        bitmap = new Bitmap(bmpData);
                        addChild(bitmap);
                }
                private function initFunction():void {
                        var timer:Timer = new Timer(20);
                        timer.addEventListener(TimerEvent.TIMER, addPoint);
                        timer.start();
                        this.addEventListener(Event.ENTER_FRAME, onFrame);
                }
                private function addPoint(evt:TimerEvent):void {
                        
                        var point:Point = new Point;
                        var Vx:Number;
                        var Vy:Number;
                        var color:uint;
                        if (int(Math.random()*2)==0) {
                                color = 0xffffff;
                        }else {
                                color = 0x00aaaa;
                        }
                        
                        point.x = Math.random() * 100 + 100;
                        point.y = 100;
                        
                        var speed:Number = Math.random() * 0.9 +0.1;
                        var angle:Number = Math.PI / 6;
                        arrPoint.push(point);
                        
                        Vx = Math.cos(angle) * speed;
                        Vy = Math.sin(angle) * speed;
                        arrVx.push(Vx);
                        arrVy.push(Vy);
                        arrColor.push(color);
                        
                }
                private function onFrame(evt:Event):void {
                        
                        for (var i:int = 0; i < arrPoint.length;i++) {                                
                                if (arrPoint[i].y >= 300) {
                                        var f:Number = Math.random() / 50;
                                        var speed:Number = Math.random() * 0.9 +0.1;
                                        var angle:Number = Math.PI / 6;
                                        var Vx:Number = Math.cos(angle) * speed;
                                        var Vy:Number = -Math.sin(angle) * speed;
                                        
                                        Vx += f;
                                        arrPoint[i].x += Vx;
                                        arrPoint[i].y += Vy;
                                        if (arrPoint[i].x > 350) {
                                                arrPoint.splice(i, 1);
                                                arrColor.splice(i, 1);
                                                arrVx.splice(i, 1);
                                                arrVy.splice(i,1);
                                        }
                                }else {
                                        
                                        arrPoint[i].x += arrVx[i];
                                        var g:Number = Math.random() / 50;
                                        arrVy[i] += g;
                                        arrPoint[i].y += arrVy[i];
                                        setColor(arrPoint[i].x, arrPoint[i].y, arrColor[i]);
                                        
                                }
                        }
                        bmpData.applyFilter(bmpData, new Rectangle(0, 0, 550, 400), new Point(0, 0), filter);
                        
                }
                private function setColor(x:Number,y:Number,c:uint):void {
                        
                        bmpData.setPixel32(x,y,c);
                        
                }
        }
        
}
分享到:
评论

相关推荐

    oepngl 粒子系统 瀑布水流效果实现

    用opengl 粒子系统实现瀑布水流效果,是初学粒子系统很好的学习参考

    水花、瀑布等特效,unity自带粒子系统做的

    粒子系统允许开发者模拟各种自然现象,如火焰、烟雾、爆炸,当然也包括水花、水流和瀑布等水体特效。本教程将深入探讨如何利用Unity3D的粒子系统来制作这些特效。 一、Unity3D粒子系统基础 Unity3D的粒子系统...

    OpenGL粒子系统之瀑布

    OpenGL粒子系统之瀑布是计算机图形学领域中一个高级且引人入胜的话题。在这个项目中,开发者通过OpenGL库实现了一个动态、逼真的瀑布效果,同时加入了配乐,使得整体体验更为沉浸。OpenGL作为一款跨语言、跨平台的...

    UE4自然景观瀑布水雾粒子特效素材

    《UE4自然景观瀑布水雾粒子特效素材》 在游戏开发和虚拟现实领域,Unreal Engine 4(简称UE4)是一款广泛使用的强大引擎,它以其高质量的图形渲染和丰富的功能集而闻名。本素材包专门针对UE4设计,包含了自然景观中...

    现实瀑布水粒子系统Unity素材资源

    一个用代码编写的动态瀑布例子系统,资源占用空间小,运动速度快,整体效果不错,是手游可选物件之一

    openGL粒子系统瀑布

    用纯OpenGL做的一个粒子系统,很好的瀑布

    测试水粒子瀑布展示作品

    在IT行业中,尤其是在游戏开发和视觉效果领域,"测试水粒子瀑布展示作品"是一个与三维(3D)渲染和物理模拟相关的项目。这个标题表明它是一个使用Unity 3D(U3D)引擎创建的互动体验,专注于水粒子效果的展示,可能...

    Android小程序--模拟焰火粒子和瀑布粒子

    在Android平台上,开发小程序以模拟真实世界的物理现象如焰火和瀑布粒子效果,是一种常见的增强用户体验的技术。这篇文章将深入探讨如何实现这样的效果,主要关注点是粒子系统的原理和实现细节。 粒子系统是一种...

    喷水粒子特效Unity可用

    在Unity游戏引擎中,粒子系统是一种强大的工具,用于创建各种视觉效果,如火焰、烟雾、喷水等。"喷水粒子特效Unity可用"这个标题表明我们正在讨论一个专为Unity设计的喷水粒子特效资源,它可以让开发者轻松地在他们...

    OpenGL实现模拟瀑布的粒子系统

    这是一个在VC6上实现的一个粒子系统,该系统用粒子模拟瀑布水流,系统产生很多粒子,粒子自由下落,打在地面的平面上又溅起再下落。每个粒子都有初速度和运动方向,粒子是用OpenGL的小球模拟的,粒子运动是用OpenGL...

    基于粒子系统的瀑布模型

    基于粒子系统的瀑布模型的设计与实现,本文基于Visual C++编程环境及OpenGL标准图形库设计了一个瀑布场景的演示系统,实现了瀑布的动态绘制,其运动和外观效果真实,在普通的PC机上获得了实时的绘制速度。

    基于粒子系统的瀑布模拟与实现

    【基于粒子系统的瀑布模拟与实现】的毕业设计主要探讨了如何使用粒子系统来模拟和创建逼真的瀑布效果。粒子系统是一种在计算机图形学中用于模拟复杂动态现象的技术,尤其适用于模拟像水流这样的自然现象。在该设计中...

    Cesium粒子特效喷泉特效代码及模型.zip

    在本文中,我们将深入探讨如何使用Cesium库创建粒子特效,特别是喷泉特效。Cesium是一个强大的开源JavaScript库,专为在Web上呈现3D地理空间数据而设计,它利用WebGL技术提供高性能的3D图形渲染。我们将讨论Cesium中...

    opengl 瀑布 waterfall

    在这个特定的项目中,"opengl 瀑布 waterfall" 是一个使用OpenGL实现的粒子系统,用于模拟逼真的瀑布效果。下面我们将深入探讨这个项目涉及的技术点。 首先,OpenGL粒子系统是创建动态图形效果的一种方法,比如火焰...

    unity瀑布粒子效果WaterFall

    WaterFall瀑布效果粒子,里面有两种水的瀑布粒子效果,可以进行查看修改。

    pb.rar_OPENGL粒子系统_瀑布

    粒子系统瀑布 计算机图形学 opengl

    Unity粒子瀑布效果,水从高处落下效果

    此资源为水从高处落下的效果,可以用于液体倾倒,瀑布等场景 水分为水流,雾气,涟漪,溅射四种效果,每种效果可以单独拆分 此效果使用粒子效果制作 包内有项目源码,相关资源,演示场景 压缩包内文件为unitypackage...

    Delphi 粒子生成系统实例 可生成瀑布、星空、喷泉、射线等样式的粒子动态图,个别还挺逼真

    本篇将详细讲解Delphi实现的粒子生成系统实例,它能创建出逼真的瀑布、星空、喷泉和射线等动态图像。 首先,粒子系统的核心概念是通过大量简单的元素——粒子,来构建出复杂且动态的视觉效果。在Delphi中,我们可以...

    雨雪、烟雾、瀑布等特效

    至于"瀑布"特效,除了使用粒子系统模拟水流的流动和溅起的水花,可能还需要利用流体动力学插件或者地形工具,让水流看起来更加自然,并处理好水与周围环境的交互,如水声、溅起的水雾等。 这个名为"雨雪、烟雾等...

Global site tag (gtag.js) - Google Analytics