`
寻找芒格
  • 浏览: 1921 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

Bitmap粒子特效

阅读更多

      Bitmap粒子效果弄得好可以有非常意外的效果,我曾经在一个外国博客上看到运用于3D的Bitmap粒子特效,可以说是让整个画面都活了起来。

      乍看起来这是非常消耗计算机资源的事情,其实的确挺耗资源的。可是这个耗资源的点与我以前认为的完全不同,在这必须声明一个事实:Bitmap粒子特效中每个粒子并不是一个单独的对象,整个过程中只有一个BitmapData对象在被改变,而那些粒子只是BitmapData里面的单个像素,怎么做到这一切呢?一切都归功于BitmapData类中的几个像素操作函数,例如getPixels()和setPixels()等等.....。

      这里有几个问题需要注意的。

      之一是对每个像素点操作是一个极大的工作量,一个200*200的图片就有40000个像素,就是说每个循环里需要操作40000次,这里有一个技巧:巧妙的设置背景色,例如一张黑色居多的图片我们应该选择黑色作为图片背景,这样我们可以省去黑色像素点的操作。

      再来是如何控制像素点的运动,我们要凭空控制像素是很难的,我们需要一些记录,所以一般人的做法都是自己建立一个保存像素点信息的类,在主文件里定义一个该类的数组用于保存需要操作的点,这样就会有章可循。

      其三,要是每操作一个像素点就刷新一次显示,那么相像一下对200*200的图片所有像素点操作一次需要刷新40000次显示,这可不是一件好玩的事情。幸好我们在API里面可以找到BitmapData2个有用的函数lock()和unlock()。怎么用呢?这么说吧,当我使用了lock()函数后,我队该BitmapData像素进行任何操作都不会显示出来,而unlock悄悄相反,强制刷新显示的意思,所以前辈们告诉我们在每次循环开始前调用lock,每次循环结束后调用unlock。这的确是个正确的做法,只是有个问题,当在电脑配置较低,图片较大的时候,每次刷新都会显得略卡。所以我的建议是不必每次循环结束后才调用unlock,对于40000像素的图片我们可以操作10000个像素后unlock一次,当然这个值是由我们自己设置。

//之前内容省略
var bmpData:BitmapData = XXXXXXXX;   //获取图片BitmapData
_getPixels();                //获取bmpData像素数据到自定义像素控制类里面

//设置显示用bmpData的宽、高和颜色。
//请注意该bmpData一定要比获取的图片大,否则像素无操作性
var newBmpData = new BitmapData(width, height, color);
var bmp:Bitmap = new Bitmap(newBmpData);
addChild(bmp);

//添加每帧刷新显示事件
addEventListener(Event.ENTER_FRAME, _upadte);

//中间内容再次省略

private function _getPixels():void
{
      //遍历加载的BMP图片的每个像素,把需要操作的像素信息保存到一个数组中
      //需要注意的是像素信息,而不是像素
      //自定义类与像素点所包含数据需相似,可自行添加其他数据(如方向、速度)
}

private function _update(e:Event):void
{
      newBmpData.lock();

      //遍历像素信息数组,根据信息对newBmpData的像素进行操作
      //在适当的时候调用newBmpData.unlock()函数
}
 
 
分享到:
评论

相关推荐

    android粒子特效

    在Android应用开发中,粒子特效是一种常见的视觉设计手法,它能为用户界面增添生动和趣味性,提升用户体验。本文将围绕“android粒子特效”这一主题,深入探讨粒子系统的原理、实现方式以及如何在Android项目中应用...

    Flash8制作烟花粒子特效.pdf

    《Flash8制作烟花粒子特效》 在Flash 8中创建烟花粒子特效是一项有趣且具有挑战性的任务,它涉及到动画、图形处理以及音频处理等多个技术领域。以下是对这一主题的详细阐述: 首先,为了确保舞台不随窗口大小变化...

    Android中View的炸裂特效实现方法详解

    总之,实现Android View的炸裂特效需要对动画、Bitmap处理、自定义View以及粒子系统有深入理解。ExplosionField是一个很好的学习资源,展示了如何通过优雅的代码实现复杂的视觉效果。开发者可以根据需求调整和定制这...

    android 粒子效果,1.6

    每个粒子都是一个图形对象(如Rect、Path或Bitmap),通过重写onDraw()方法,在每一帧更新粒子的位置、颜色等属性,然后调用canvas.drawXXX()方法进行绘制。 2. 使用开源库 虽然原生API可以实现基本的粒子效果,但...

    android常用图片特效处理.zip

    7. **自定义View**:在某些情况下,可能需要自定义View来实现特定的图片特效,例如粒子系统、水波纹效果等。这需要对Canvas和Paint有深入理解,以及掌握draw()方法的使用。 8. **BitmapOptions**:在处理大图时,...

    android常用图片特效处理.rar

    9. **GPU图像处理**: 使用OpenGL ES进行高性能的图像处理,可以实现更复杂的特效,比如粒子系统、实时滤镜等。通过SurfaceTexture和GLSurfaceView可以将GPU渲染的结果展示在屏幕上。 10. **图片缓存策略**: 为了...

    android-烟花特效.rar

    4. **粒子系统**:烟花特效本质上是一种粒子系统,每个烟花可以视为一个粒子。粒子系统通过生成大量具有相似行为但不同属性的粒子(如位置、速度、生命周期等)来模拟复杂的动态效果。开发者需要编写代码来生成这些...

    as3.0做特效

    这可以通过创建一个动态的Bitmap对象,实时捕获和放大鼠标下的图像区域来实现。AS3.0的强大的图形处理能力使得创建此类交互式效果变得可能。 6. **图象变化 特殊**: 这可能是涉及图像变形、扭曲或者平滑过渡到另一...

    Android 常用图片特效处理源码.rar

    3. **OpenGL ES**:对于更复杂的图像处理,如3D变换、粒子效果、实时滤镜等,开发者通常会利用OpenGL ES。这是一个强大的图形处理接口,能实现高性能的图像渲染。源码中可能包含使用OpenGL ES进行图像特效处理的代码...

    AS3 让一张图片变成火焰特效的代码

    总的来说,实现AS3火焰特效涉及图像处理、粒子系统、颜色变换等多个方面。通过理解这些概念并结合实际代码,我们可以创建出一个令人印象深刻的动态火焰效果。记得在Flash环境中测试和优化代码,以确保在不同设备上都...

    Android--开发--常用图片特效处理.rar

    通过继承`View`或`ViewGroup`,可以完全自定义图片的绘制过程,实现独特的特效,如粒子系统、3D翻转等。 9. **第三方库支持**: 社区中有很多优秀的第三方库帮助开发者处理图片特效,如`Android-Image-Cropper`...

    Android雪花飘落特效

    在这个特效中,我们将使用`drawRect()`或`drawBitmap()`来绘制雪花。 1. **创建雪花对象**:每片雪花都是一个独立的对象,通常我们可以创建一个`Snow Flake`类来表示。这个类包含雪花的位置、大小、旋转角度等属性...

    android 雪花特效源码

    2. **绘图API**:在`onDraw()`方法中,开发者会用到Android的绘图API,如`drawRect()`, `drawCircle()`, `drawBitmap()`等,来绘制不同的图形。例如,雪花可能是一个简单的矩形或椭圆,星星可能是五角星形状,而玫瑰...

    Leonids-master.zip

    使用`setParticleBitmap(Bitmap bitmap)`方法设置粒子的图像。 6. **与视图结合:** 粒子系统通常与`View`关联,以便在特定的位置或区域内显示效果。可以将粒子系统添加到布局中,或者直接附加到某个`View`。 在...

    安卓Android源码——游戏场景特效源码.zip

    它可能包含了OpenGL ES(一种在Android上进行2D/3D图形渲染的API)的使用,或者使用Canvas和Bitmap进行位图操作来实现特效。 4. **游戏场景特效**:游戏场景特效包括但不限于粒子系统、光影效果、动画过渡、物理...

    Android应用源码之游戏场景特效源码.zip

    例如,使用canvas.drawBitmap()可以绘制动态的精灵图,实现角色移动、攻击等效果。 3. **动画框架**:Android提供了多种动画框架,如Property Animation、Tween Animation和ValueAnimator等。在游戏特效中,我们...

    Android项目之——页面特效集合(附源码).7z

    Canvas、Paint、Bitmap等类提供了强大的绘图功能,开发者可以利用它们来实现各种图形和动画效果,比如粒子系统、水波纹效果等。 7. **动画库**: Android社区提供了许多开源动画库,如NineOldAndroids(支持...

    【Visual C++】游戏编程笔记四:透明动画实现

    通过理解并实践这些步骤,开发者可以创建出具有透明动画效果的游戏角色、粒子特效或其他动态元素,提高游戏的视觉表现力。透明动画技术不仅可以应用于游戏开发,也广泛应用于GUI界面设计和其他图形用户交互的应用中...

    Realflow4菜单中英文对照表v0.01

    - Circle、Square、Sphere、Linear、Triangle、Spline、Cylinder、Bitmap、Object Emitter:这些不同的发射器形状可以创建不同类型的粒子流。 - RW_Splash、RW_Particles、Fibers:特定的粒子效果,如飞溅、纤维等...

Global site tag (gtag.js) - Google Analytics