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

          3G 手機(jī)開(kāi)發(fā)網(wǎng)

             :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            99 Posts :: 1 Stories :: 219 Comments :: 0 Trackbacks
          雙緩沖技術(shù)的應(yīng)用很廣泛,設(shè)計(jì)游戲的時(shí)候更是需要它,

          ???? 在midp1.0中,api中并沒(méi)有g(shù)ame這個(gè)包,看到網(wǎng)上很多人在討論設(shè)計(jì)游戲的時(shí)候會(huì)出現(xiàn)圖片斷裂,屏幕閃爍等問(wèn)題。

          ???? 我經(jīng)過(guò)這幾天的學(xué)習(xí)整理下自己的學(xué)習(xí)心得,用來(lái)拋磚,希望對(duì)此有研究高手們相互討論。讓我也學(xué)習(xí)學(xué)習(xí)。

          ????

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

          ??? 對(duì)于手機(jī)來(lái)說(shuō)。具體的過(guò)程就是通過(guò)extends Canvas。然后獲取bufferImage。再然后就getGraphics。最后就是在這個(gè)graphics中繪制圖片等,再最后就是把這個(gè)繪制好的bufferImage繪制的屏幕上。

          ???? 說(shuō)歸說(shuō)。具體還是要看代碼的。里面的代碼參照了一些開(kāi)源的代碼。

          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. ?*?類(lèi)名:GameCanvas.java?

            ?編寫(xiě)日期:?2006-11-29?

            ?程序功能描述:
            ?

          11. ?*?實(shí)現(xiàn)雙緩沖的Game畫(huà)布。實(shí)現(xiàn)原理是創(chuàng)建一個(gè)BufferImage。然后繪制,最后顯示出來(lái)。就這么簡(jiǎn)單。

            ?Demo:?

            ?Bug:
            ?

          12. ?*?

            ?

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

            ?變更作者?:

            ?變更說(shuō)明?:

            ?

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

            ?
            ?

          17. ?*/??
          18. public?abstract?class?GameCanvas?extends?Canvas?{??
          19. ??
          20. ????/**?
          21. ?????*?繪制緩沖的圖片。用戶繪制資源的時(shí)候都是操作這個(gè)圖片來(lái)進(jìn)行的?
          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. ????????//如果要求繪制指定區(qū)域的話就需要這樣了??
          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. ?????*?設(shè)計(jì)者主要是通過(guò)調(diào)用這個(gè)方法獲取圖片。然后就可以繪制了?
          72. ?????*?@return?
          73. ?????*/??
          74. ????protected?Graphics?getGraphics()?{??
          75. ????????return?this.bufferImage.getGraphics();??
          76. ????}??
          77. ??
          78. ????/**?
          79. ?????*?這個(gè)方法主要是處理Nokia平臺(tái),用戶調(diào)用setFullScreenMode(boolean?enable)?時(shí)重新按照新的w?&?h創(chuàng)建緩沖圖片?
          80. ?????*/??
          81. ????protected?final?void?sizeChanged(int?w,?int?h)?{??
          82. ????????if?(h?>?height)?{??
          83. ????????????this.bufferImage?=?Image.createImage(w,?h);??
          84. ????????}??
          85. ????}??
          86. }?



          爬蟲(chóng)工作室 -- 專(zhuān)業(yè)的手機(jī)軟件開(kāi)發(fā)工作室
          3G視線 -- 專(zhuān)注手機(jī)軟件開(kāi)發(fā)
          posted on 2007-03-21 17:45 3G工作室 閱讀(1238) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): j2me
          主站蜘蛛池模板: 河间市| 同德县| 喜德县| 穆棱市| 乐业县| 喀什市| 濮阳市| 邯郸县| 苏尼特左旗| 吴忠市| 清镇市| 巩义市| 清远市| 东明县| 英吉沙县| 布拖县| 建昌县| 革吉县| 苍山县| 遵化市| 富平县| 永济市| 汝城县| 吴桥县| 石城县| 巩留县| 舟山市| 拉萨市| 曲沃县| 徐州市| 襄城县| 锦屏县| 湄潭县| 泽普县| 泾阳县| 咸阳市| 淅川县| 呼玛县| 娄烦县| 华亭县| 济南市|