程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 雪花飄落和堆積效果的實現

雪花飄落和堆積效果的實現

編輯:關於.NET

源碼: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位置(為了雪花堆積均勻)
    
}

其他要點在代碼中有注釋了,源文件在上頭有。

本欄目

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved