饒榮慶 -- 您今天UCWEB了嗎?--http://www.ucweb.com

          3G 手機開發網

             :: 首頁 :: 聯系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          雙緩沖技術的應用很廣泛,設計游戲的時候更是需要它,

          ???? 在midp1.0中,api中并沒有game這個包,看到網上很多人在討論設計游戲的時候會出現圖片斷裂,屏幕閃爍等問題。

          ???? 我經過這幾天的學習整理下自己的學習心得,用來拋磚,希望對此有研究高手們相互討論。讓我也學習學習。

          ????

          ???? 雙緩沖的原理可以這樣形象的理解:把電腦屏幕看作一塊黑板。首先我們在內存環境中建立一個“虛擬“的黑板,然后在這塊黑板上繪制復雜的圖形,等圖形全部繪制完畢的時候,再一次性的把內存中繪制好的圖形“拷貝”到另一塊黑板(屏幕)上。采取這種方法可以提高繪圖速度,極大的改善繪圖效果。

          ??? 對于手機來說。具體的過程就是通過extends Canvas。然后獲取bufferImage。再然后就getGraphics。最后就是在這個graphics中繪制圖片等,再最后就是把這個繪制好的bufferImage繪制的屏幕上。

          ???? 說歸說。具體還是要看代碼的。里面的代碼參照了一些開源的代碼。

          java 代碼
          1. package?org.wuhua.game;??
          2. ??
          3. import?javax.microedition.lcdui.Canvas;??
          4. import?javax.microedition.lcdui.Graphics;??
          5. import?javax.microedition.lcdui.Image;??
          6. ??


          7. ?

          8. ??
          9. /**?
          10. ?*?類名:GameCanvas.java?

            ?編寫日期:?2006-11-29?

            ?程序功能描述:
            ?

          11. ?*?實現雙緩沖的Game畫布。實現原理是創建一個BufferImage。然后繪制,最后顯示出來。就這么簡單。

            ?Demo:?

            ?Bug:
            ?

          12. ?*?

            ?

          13. ?*??
          14. ?*?程序變更日期?:

            ?變更作者?:

            ?變更說明?:

            ?

          15. ?*??
          16. ?*?@author?wuhua?

            ?
            ?

          17. ?*/??
          18. public?abstract?class?GameCanvas?extends?Canvas?{??
          19. ??
          20. ????/**?
          21. ?????*?繪制緩沖的圖片。用戶繪制資源的時候都是操作這個圖片來進行的?
          22. ?????*/??
          23. ????private?Image?bufferImage;??
          24. ??
          25. ????private?int?height;??
          26. ??
          27. ????private?int?width;??
          28. ??
          29. ????private?int?clipX,?clipY,?clipWidth,?clipHeight;??
          30. ??
          31. ????private?boolean?setClip;??
          32. ??
          33. ????protected?GameCanvas()?{??
          34. ??
          35. ????????super();??
          36. ??
          37. ????????width?=?getWidth();??
          38. ????????height?=?getHeight();??
          39. ??
          40. ????????this.bufferImage?=?Image.createImage(width,?height);??
          41. ??
          42. ????}??
          43. ??
          44. ????protected?void?paint(Graphics?g)?{??
          45. ????????//如果要求繪制指定區域的話就需要這樣了??
          46. ????????if?(this.setClip)?{??
          47. ????????????g.clipRect(this.clipX,?this.clipY,?this.clipWidth,?this.clipHeight);??
          48. ????????????this.setClip?=?false;??
          49. ????????}??
          50. ????????g.drawImage(this.bufferImage,?0,?0,?Graphics.TOP?|?Graphics.LEFT);??
          51. ??
          52. ????}??
          53. ??
          54. ????public?void?flushGraphics(int?x,?int?y,?int?width,?int?height)?{??
          55. ????????this.setClip?=?true;??
          56. ????????this.clipX?=?x;??
          57. ????????this.clipY?=?y;??
          58. ????????this.clipWidth?=?width;??
          59. ????????this.clipHeight?=?height;??
          60. ??
          61. ????????repaint();??
          62. ????????serviceRepaints();??
          63. ????}??
          64. ??
          65. ????public?void?flushGraphics()?{??
          66. ????????repaint();??
          67. ????????serviceRepaints();??
          68. ????}??
          69. ??
          70. ????/**?
          71. ?????*?設計者主要是通過調用這個方法獲取圖片。然后就可以繪制了?
          72. ?????*?@return?
          73. ?????*/??
          74. ????protected?Graphics?getGraphics()?{??
          75. ????????return?this.bufferImage.getGraphics();??
          76. ????}??
          77. ??
          78. ????/**?
          79. ?????*?這個方法主要是處理Nokia平臺,用戶調用setFullScreenMode(boolean?enable)?時重新按照新的w?&?h創建緩沖圖片?
          80. ?????*/??
          81. ????protected?final?void?sizeChanged(int?w,?int?h)?{??
          82. ????????if?(h?>?height)?{??
          83. ????????????this.bufferImage?=?Image.createImage(w,?h);??
          84. ????????}??
          85. ????}??
          86. }?



          爬蟲工作室 -- 專業的手機軟件開發工作室
          3G視線 -- 專注手機軟件開發
          posted on 2007-03-21 17:45 3G工作室 閱讀(1238) 評論(0)  編輯  收藏 所屬分類: j2me
          主站蜘蛛池模板: 道真| 建宁县| 郁南县| 墨玉县| 林州市| 桐梓县| 临泽县| 米泉市| 昌吉市| 芷江| 莫力| 西贡区| 江口县| 沙洋县| 武邑县| 夹江县| 江源县| 华阴市| 天长市| 酒泉市| 北安市| 玛沁县| 嵊州市| 天柱县| 肃北| 青岛市| 简阳市| 尼勒克县| 金川县| 静海县| 延寿县| 开封县| 金沙县| 双柏县| 周至县| 江津市| 万年县| 苏尼特左旗| 龙南县| 土默特左旗| 高邑县|