亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

J2me手機游戲開發中對觸摸屏輸入的處理

系統 1752 0

在手機游戲的開發中,要做多機型的適配,但是越來越多的機器開始支持觸摸屏操作。
那么我們也要很好的去實現其觸摸屏的輸入,以讓玩家有類似甚至超過鍵盤控制的舒適感。
下面是一個觸摸屏游戲按鈕管理思想,對游戲中人物的觸摸屏控制會在整理后放出。
該思路并不一定是最佳的,只是我是這么實現的。
-0-

屏幕上所有可以被點擊的區域(RECT)按鈕都是一個對象,他們有自己被點擊的todo()方法,還有一個觸點管理器,該管理器控制添加觸摸按鈕以及清理所有觸摸按鈕和每個按鈕是否被點擊的判定。

具體實現如下:

??1 import ?javax.microedition.lcdui.Graphics;
??2
??3 import ?vectors.CVector;
??4
??5 import ?base.CTools;
??6 import ?base.CType;
??7
??8 /**?*/ /**
??9 ?*?觸點區域
?10 ?*?
?11 ?*?@example?重寫todo方法<br>
?12 ?*?????????????pointAreaManager.addPionterArea(pointAreaManager.new
?13 ?*??????????PointArea(10,?10,?50,?50){?
?14 ?*??????????<br>public?void?todo(){?<br>
?15 ?*??????????//?寫要被點擊后要做的邏輯<br>
?16 ?*?
?17 ?*??????????//?------------------------------------------------------------<br>
?18 ?*???????????}<br>
?19 ?*??????????});
?20 ?*?
?21 ?*?
?22 ?*? @author ?Colonleado
?23 ?*?
?24 ? */

?25 public ? class ?PointAreaManager? {
?26
?27 ???? public ?CVector?a? = ? new ?CVector();
?28
?29 ???? public ? void ?addPionterArea(PointArea?area)? {
?30
?31 ????????a.addElement(area);
?32
?33 ????}

?34
?35 ???? public ? void ?update()? {
?36
?37 ???????? for ?( int ?i? = ? 0 ;?i? < ?a.size();? ++ i)? {
?38
?39 ????????????PointArea?b? = ?(PointArea)?a.elementAt(i);
?40
?41 ????????????b.update();
?42
?43 ????????}

?44
?45 ????}

?46 ????
?47 ???? public ? void ?debug(Graphics?g) {
?48 ???????? for ?( int ?i? = ? 0 ;?i? < ?a.size();? ++ i)? {
?49
?50 ????????????PointArea?b? = ?(PointArea)?a.elementAt(i);
?51
?52 ????????????b.debug(g);
?53
?54 ????????}

?55 ????}

?56
?57 ???? public ? void ?clear()? {
?58
?59 ????????a.removeAllElements();
?60
?61 ????}

?62
?63 ???? public ? abstract ? class ?PointArea? {
?64
?65 ???????? private ? int ?x,?y,?width,?height;
?66
?67 ???????? public ?PointArea( int ?_x,? int ?_y,? int ?_width,? int ?_height)? {
?68
?69 ????????????x? = ?_x;
?70
?71 ????????????y? = ?_y;
?72
?73 ????????????width? = ?_width;
?74
?75 ????????????height? = ?_height;
?76
?77 ????????}

?78
?79 ???????? private ? boolean ?isPointerClick()? {
?80
?81 ???????????? // ?是否發生了觸摸事件
?82 ???????????? if ?(CType.havePointerEvent)? {
?83 ????????????????
?84 ???????????????? // ?如果發生了觸摸事件?檢測下是否觸點在該區域矩形內
?85 ???????????????? if ?(CTools.isPointInRect(CType.getPointerX(),?
?86 ????????????????????????CType.getPointerY(),?x,?y,?width,?height))? {
?87
?88 ????????????????????CType.havePointerEvent? = ? false ;
?89
?90 ???????????????????? return ? true ;
?91
?92 ????????????????}

?93
?94 ????????????}

?95
?96 ???????????? return ? false ;
?97
?98 ????????}

?99
100 ???????? public ? void ?update()? {
101
102 ???????????? // ?如果被點擊了?那么執行自己的todo
103 ???????????? if ?(isPointerClick())? {
104
105 ????????????????todo();
106
107 ????????????}

108
109 ????????}

110 ????????
111 ???????? // ?抽象方法todo?供不同矩形按鈕去實現
112 ???????? protected ? abstract ? void ?todo();
113
114 ???????? public ? void ?debug(Graphics?g) {
115 ????????????g.setColor( 0x00ffff );
116 ????????????g.drawRect(x,?y,?width,?height);
117 ????????}

118 ????????
119 ????}

120
121 }



我們在主類(一般是我們的Canvas)中實例一個PointAreaManager的對象,以此來完成對觸摸屏輸入的所有管理。

?1 // ?實例一個觸點管理器
?2 ????????psm? = ? new ?PointAreaManager();
?3 // ?添加一個按鈕
?4 ????????psm.addPionterArea(psm. new ?PointArea( 0 ,?CType.ScreenHeight? - ? 30 ,
?5 ???????????????????????? 40 ,? 30 )? {
?6 ????????????
?7 ???????????????????? // ?實現todo方法
?8 ???????????????????? protected ? void ?todo()? {
?9 ????????????????????????
10 ???????????????????????? // ?如果被點擊了?就打開音樂
11 ????????????????????????pointerAskMusicOk();
12 ????????????????????????
13 ????????????????????}

14 ????????????????????
15 ????????????????}
);



這樣當進入一個新的界面時,我們只需要向管理器中添加我們需要的矩形區域按鈕們,他們各自實現了自己的todo。而在游戲的邏輯更新中會執行管理器的update,管理器會去檢查每一個按鈕是否被點擊,是就執行該按鈕的todo。這樣就做到了按鈕自己管理自己。

當切換界面的時候只需要清理掉管理器中的所有按鈕,再添加新按鈕們即可。

J2me手機游戲開發中對觸摸屏輸入的處理


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 老妇毛片 | 久草免费精品视频 | 亚洲一区二区三区福利在线 | 中文字幕日韩一区二区不卡 | 曰韩一级片 | 天天做天天爱天天爽天天综合 | 99在线观看国产 | 中文字幕精品一区二区三区视频 | 日本aaaa级毛片在线看 | 激情综合五月亚洲婷婷 | 一级aa免费视频毛片 | 日韩一区二区三区在线观看 | 精品欧美一区二区在线观看 | 成人在线91 | 久久精品在现线观看免费15 | 久久99精品久久久久久水蜜桃 | 青青热在线精品视频免费 | 久草午夜| 亚洲美日韩 | 国产成人亚洲精品91专区手机 | 日韩亚洲欧美在线观看 | 99九九视频| 免费一区 | 狠狠的操你 | 欧美亚洲中日韩中文字幕在线 | 热e国产 | 天天综合久久久网 | 欧美另类精品 | 狠狠色噜噜狠狠狠狠98 | 老子影院午夜伦手机在线看 | 一级毛片一级毛片一级级毛片 | 不卡伦理 | 另类av | 五月激情丁香婷婷综合第九 | 国产亚洲欧美精品久久久 | 亚洲码在线| 好吊妞免费视频 | 在线观看a视频 | 欧美日韩一区二区不卡三区 | 日韩h视频| 成人午夜在线观看 |