zoukankan      html  css  js  c++  java
  • 漂亮的雪花飘落和堆积效果

    源码:https://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位置(为了雪花堆积均匀)

    }

    其他要点在代码中有注释了,源文件在上头有。

  • 相关阅读:
    Linux 中 java 访问 windows共享目录
    Java中Calender引用类型
    Hadoop MultipleOutputs 结果输出到多个文件夹 出现数据不全,部分文件为空
    转个扯淡的~
    nginx+uwsgi部署python web(web.py)
    关于已经安装python为何还要安装python-dev
    centos7安装mysql5.6
    centos7.0防火墙更换为firewalld
    并发模型(二)——Master-Worker模式
    并发模型(一)——Future模式
  • 原文地址:https://www.cnblogs.com/flash3d/p/2332236.html
Copyright © 2011-2022 走看看