天天看點

android 下雪動畫

最近在模拟一個android遊戲,其中看到一個下雪的效果。到網上搜了很久發現大部分用的都是搜尋引擎用的粒子效果模拟的。

自己沒用過android的遊戲引擎,于是就決定自己寫一個吧。

下雪的效果,無非就是讓螢幕上的“雪花”的圖檔不停的被重繪。

這裡下雪的動作,需要用一個線程控制。

/* 

 * 負責做界面更新工作 ,實作下雪 

 */  

private RefreshHandler mRedrawHandler = new RefreshHandler();  

class RefreshHandler extends Handler {  

    @Override  

    public void handleMessage(Message msg) {  

        //snow.addRandomSnow();  

        snow.invalidate();  

        sleep(100);  

    }  

    public void sleep(long delayMillis) {  

        this.removeMessages(0);  

        sendMessageDelayed(obtainMessage(0), delayMillis);  

};  

線程啟動的時候,初始化雪花圖檔,把圖檔加載到記憶體之中。

然後讓線程每隔一段時間重繪一次,重繪的時候增加y軸的距離,達到下雪的效果。

@Override  

public void onDraw(Canvas canvas) {  

    super.onDraw(canvas);  

    for (int x = 0; x < 10; x += 1) {  

        if (snows[x].y >= view_height) {  

            snows[x].y = 0;  

            addRandomSnow();  

        }  

        // 雪花下落的速度  

        snows[x].y += 5;  

        //雪花飄動的效果  

        if (RNG.nextBoolean()) {  

            // 随機産生一個數字,讓雪花有水準移動的效果  

            int rng = RNG.nextInt(3);  

            snows[x].x += 2 - rng;  

        canvas.drawBitmap(bitmap_snows[x / 6], ((float) snows[x].x),  

                ((float) snows[x].y), mPaint);  

}  

雪花的初始位置是y軸的頂點,我這裡設定了10朵雪花。開始的時候,随機産生10個x軸方向的數字,作為雪花再x軸的起始位置。

當雪花“飄”出了螢幕之後,y坐标重新置0,x坐标也重新産生。其中為了達到雪花靈動的效果,随機産生一個x軸的飄動效果。

當然,做的效果不是太好,可以優化一下:比如,多增加雪花圖檔,達到下雪時雪花有近有遠的效果。

歡迎有興趣的朋友補充……

繼續閱讀