查看: 2197|回复: 0
打印 上一主题 下一主题

[as3基础应用]漂亮的雪花飘落和堆积效果

[复制链接]
.    

3797

主题

11

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
32328
精华
41

活跃会员 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2013-3-19 17:26:44 |只看该作者 |倒序浏览
动画地址:http://boycy.webs.com/snow.swf
源文件地址:http://boycy.webs.com/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.由于近大远小的规律,所以每个雪花下落一定是不一样快的(近快远慢。。看看飞机就知道了),他应该和缩放值成正比
                            _in***s[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 = _in***s[ln].iniy;//初始化y位置
                            ln.x = Math.random() * STAGEWIDTH;//随机获得x位置(为了雪花堆积均匀)
                     }
其他要点在代码中有注释了,源文件在上头有。 【来源:互联网】
更多精彩教程,尽在web3D纳金网http://www.narkii.com/college/ 动画地址:http://boycy.webs.com/snow.swf
源文件地址:http://boycy.webs.com/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.由于近大远小的规律,所以每个雪花下落一定是不一样快的(近快远慢。。看看飞机就知道了),他应该和缩放值成正比
                            _in***s[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 = _in***s[ln].iniy;//初始化y位置
                            ln.x = Math.random() * STAGEWIDTH;//随机获得x位置(为了雪花堆积均匀)
                     }
其他要点在代码中有注释了,源文件在上头有。 【来源:互联网】
更多精彩教程,尽在web3D纳金网http://www.narkii.com/college/
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-22 17:22 , Processed in 0.087147 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部