java游戏开发--连连看-让程序运行更稳定、更高效
生活随笔
收集整理的這篇文章主要介紹了
java游戏开发--连连看-让程序运行更稳定、更高效
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
之六)優(yōu)化:讓程序運行更穩(wěn)定、更高效
改善游戲的合理性
到目前為止,我們的游戲基本上算是完成了,為了使程序更合理,我們還需要將整個程序從頭再理一遍,看看有沒有改進的地方。
首先,在變量的使用上,由于很多地方會使用相同的數(shù)據(jù),因此,將變量定義為 public static 可以減少不必要的重復(fù)定義,如顏色、使用的圖片等。
其次,由于 JAVA 的特性,我們可以對程序進行簡單的修改(如使類從 JApplet 繼承而不是從 JFrame 繼承等),將其改變?yōu)?Applet 程序,讓游戲在網(wǎng)頁中也可以運行。同時,也考慮到程序的發(fā)布,我們可以將最終結(jié)果生成 JAR 包。
第三、為了確保在游戲運行時所有需要的資源都已經(jīng)加載,因此,我們需要使用 MediaTracker 的 addImage(Image image, int id) 和 waitForID(int id) 方法來保證資源加載。
第四、為了避免每次使用資源時都要從硬盤中讀取,因此,我們盡可能對所有的資源都要進行緩沖處理,這是以空間換時間的做法。
第五、由于在最后發(fā)布程序的時候,我們需要將編譯結(jié)果打包,因此,對于程序中的圖片、聲音等也需要放在包中,這樣,對文件的訪問就不能使用 File 類了,必須使用 java.lang.ClassLoader.findResource(java.lang.String) 來訪問包中的資源。
節(jié)約內(nèi)存的使用
雖然 JAVA 提供的垃圾回收機制使我們可以不必考慮內(nèi)存分配 / 回收的問題,然而,考慮到運行游戲的客戶端多樣性,因此,我們還是有必要減少內(nèi)存開銷的。還記得在前面我們提到過 AnimateDelete 類中的 public AnimateDelete(JButton[] dots) 構(gòu)造函數(shù)嗎?這個看似無用的方法其實是非常有用的。
在前面,我們提及過,由于多個消除動畫可以同步進行,因此,如果在每次實例化類的時候都將界面上的 JButton 控件復(fù)制進來,這是一筆不小的內(nèi)存開支,因此,我們在 AnimateDelete 類中將接收到的 JButton 控件定義為 static ,這樣,所有的實例都可以共享同一個 JButton 控件,表面上看起來定義 static 變量使得這部分內(nèi)存的開銷無法除,但考慮到 AnimateDelete 類調(diào)用的頻率,因此,這樣反而是節(jié)約了內(nèi)存開支的。
同樣,如果大家看看我的源程序,會發(fā)現(xiàn)我有一些地方都將變量定義為了 static
改善游戲的合理性
到目前為止,我們的游戲基本上算是完成了,為了使程序更合理,我們還需要將整個程序從頭再理一遍,看看有沒有改進的地方。
首先,在變量的使用上,由于很多地方會使用相同的數(shù)據(jù),因此,將變量定義為 public static 可以減少不必要的重復(fù)定義,如顏色、使用的圖片等。
其次,由于 JAVA 的特性,我們可以對程序進行簡單的修改(如使類從 JApplet 繼承而不是從 JFrame 繼承等),將其改變?yōu)?Applet 程序,讓游戲在網(wǎng)頁中也可以運行。同時,也考慮到程序的發(fā)布,我們可以將最終結(jié)果生成 JAR 包。
第三、為了確保在游戲運行時所有需要的資源都已經(jīng)加載,因此,我們需要使用 MediaTracker 的 addImage(Image image, int id) 和 waitForID(int id) 方法來保證資源加載。
第四、為了避免每次使用資源時都要從硬盤中讀取,因此,我們盡可能對所有的資源都要進行緩沖處理,這是以空間換時間的做法。
第五、由于在最后發(fā)布程序的時候,我們需要將編譯結(jié)果打包,因此,對于程序中的圖片、聲音等也需要放在包中,這樣,對文件的訪問就不能使用 File 類了,必須使用 java.lang.ClassLoader.findResource(java.lang.String) 來訪問包中的資源。
節(jié)約內(nèi)存的使用
雖然 JAVA 提供的垃圾回收機制使我們可以不必考慮內(nèi)存分配 / 回收的問題,然而,考慮到運行游戲的客戶端多樣性,因此,我們還是有必要減少內(nèi)存開銷的。還記得在前面我們提到過 AnimateDelete 類中的 public AnimateDelete(JButton[] dots) 構(gòu)造函數(shù)嗎?這個看似無用的方法其實是非常有用的。
在前面,我們提及過,由于多個消除動畫可以同步進行,因此,如果在每次實例化類的時候都將界面上的 JButton 控件復(fù)制進來,這是一筆不小的內(nèi)存開支,因此,我們在 AnimateDelete 類中將接收到的 JButton 控件定義為 static ,這樣,所有的實例都可以共享同一個 JButton 控件,表面上看起來定義 static 變量使得這部分內(nèi)存的開銷無法除,但考慮到 AnimateDelete 類調(diào)用的頻率,因此,這樣反而是節(jié)約了內(nèi)存開支的。
同樣,如果大家看看我的源程序,會發(fā)現(xiàn)我有一些地方都將變量定義為了 static
轉(zhuǎn)載于:https://www.cnblogs.com/yangkai-cn/archive/2012/09/05/4017504.html
總結(jié)
以上是生活随笔為你收集整理的java游戏开发--连连看-让程序运行更稳定、更高效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小型播种机多少钱一台
- 下一篇: 【转载】:最佳注释