雪花飘落和堆积效果的实现2015-12-07源码:http://files.cnblogs.com/flash3d/snow.rar这个是落落班长布置的作业:我想看雪花飘落!!这次的效果,技术上没什么新意,效果漂亮与否主要看是否抓住了雪花在空中的感觉。效果在展现雪花在空中的感觉主要从以下几个方面:1.雪花是飘落不是冰雹砸落,所以雪花在空中一定会有变化,在风的带动下,雪花会在空中无规律的起舞(这个词好娘。。)所以,在展现效果上,雪花需要得到一个纵向和横向的随机旋转力ln.rotationX += Math.random() * 10;ln.rotationY += Math.random() * 10;2.雪花存在空间中,而不是平面上,由于近大远小,所以在屏幕上的雪花不能一样大。我们在初始化的时候,就给雪花一个随机缩放。ln.scaleX = ln.scaleY = Math.random() * 0.3 + 0.1;3.由于近大远小的规律,所以每个雪花下落一定是不一样快的(近快远慢。。看看飞机就知道了),他应该和缩放值成正比_indexes[ln] = { vy:Math.random() * ln.scaleY * 8 + 4, iniy:ln.y };4.雪花落地要慢慢堆积,到达地面会使地面升高,所以要加上雪花堆积效果。这里的到地面的碰撞检测分为两个步骤,第一步是粗检测,雪花超过指定范围,才进行像素级检测,提高了碰撞检测的效率,也保证了堆积的雪的效果。
//如果雪花到达堆积检测高度,则检测堆积if (ln.y >= _plie[int(ln.x)]){//如果检测发现没有碰撞而且没有越界,就退出,否则就堆积if (!_plieImg.hitTest(new Point(0, 0), 0, new Point(ln.x, ln.y)) && ln.y < STAGEHEIGHT - DENSITY) return;_shut.addChild(ln);//添加到容器,然后拍照_plieImg.draw(_shut);addChild(ln);//拍照完了重新添加回当前显示对象_plie[int(ln.x)] = ln.y - DENSITY < _plie[int(ln.x)]?ln.y - DENSITY:_plie[int(ln.x)];//堆积检测高度增加ln.y = _indexes[ln].iniy;//初始化y位置ln.x = Math.random() * STAGEWIDTH;//随机获得x位置(为了雪花堆积均匀)}
其他要点在代码中有注释了,源文件在上头有。