日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

J2me手機(jī)游戲開發(fā)中對(duì)觸摸屏輸入的處理

系統(tǒng) 1777 0

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

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

具體實(shí)現(xiàn)如下:

??1 import ?javax.microedition.lcdui.Graphics;
??2
??3 import ?vectors.CVector;
??4
??5 import ?base.CTools;
??6 import ?base.CType;
??7
??8 /**?*/ /**
??9 ?*?觸點(diǎn)區(qū)域
?10 ?*?
?11 ?*?@example?重寫todo方法<br>
?12 ?*?????????????pointAreaManager.addPionterArea(pointAreaManager.new
?13 ?*??????????PointArea(10,?10,?50,?50){?
?14 ?*??????????<br>public?void?todo(){?<br>
?15 ?*??????????//?寫要被點(diǎn)擊后要做的邏輯<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 ???????????? // ?是否發(fā)生了觸摸事件
?82 ???????????? if ?(CType.havePointerEvent)? {
?83 ????????????????
?84 ???????????????? // ?如果發(fā)生了觸摸事件?檢測下是否觸點(diǎn)在該區(qū)域矩形內(nèi)
?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 ???????????? // ?如果被點(diǎn)擊了?那么執(zhí)行自己的todo
103 ???????????? if ?(isPointerClick())? {
104
105 ????????????????todo();
106
107 ????????????}

108
109 ????????}

110 ????????
111 ???????? // ?抽象方法todo?供不同矩形按鈕去實(shí)現(xiàn)
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 }



我們?cè)谥黝悾ㄒ话闶俏覀兊腃anvas)中實(shí)例一個(gè)PointAreaManager的對(duì)象,以此來完成對(duì)觸摸屏輸入的所有管理。

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

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



這樣當(dāng)進(jìn)入一個(gè)新的界面時(shí),我們只需要向管理器中添加我們需要的矩形區(qū)域按鈕們,他們各自實(shí)現(xiàn)了自己的todo。而在游戲的邏輯更新中會(huì)執(zhí)行管理器的update,管理器會(huì)去檢查每一個(gè)按鈕是否被點(diǎn)擊,是就執(zhí)行該按鈕的todo。這樣就做到了按鈕自己管理自己。

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

J2me手機(jī)游戲開發(fā)中對(duì)觸摸屏輸入的處理


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 临江市| 山东| 麻栗坡县| 上栗县| 离岛区| 龙岩市| 安康市| 湖南省| 乌拉特后旗| 那曲县| 沂水县| 朝阳市| 华亭县| 临清市| 来安县| 韩城市| 木兰县| 徐闻县| 轮台县| 鄂托克前旗| 美姑县| 吐鲁番市| 灯塔市| 沂南县| 晋江市| 新密市| 双流县| 达州市| 通城县| 阳春市| 肥乡县| 米脂县| 威远县| 普洱| 蒙自县| 长岛县| 苗栗市| 正安县| 淄博市| 额敏县| 郎溪县|