黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

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

系統(tǒng) 1906 0

在手機(jī)游戲的開(kāi)發(fā)中,要做多機(jī)型的適配,但是越來(lái)越多的機(jī)器開(kāi)始支持觸摸屏操作。
那么我們也要很好的去實(shí)現(xiàn)其觸摸屏的輸入,以讓玩家有類(lèi)似甚至超過(guò)鍵盤(pá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?重寫(xiě)todo方法<br>
?12 ?*?????????????pointAreaManager.addPionterArea(pointAreaManager.new
?13 ?*??????????PointArea(10,?10,?50,?50){?
?14 ?*??????????<br>public?void?todo(){?<br>
?15 ?*??????????//?寫(xiě)要被點(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ā)生了觸摸事件?檢測(cè)下是否觸點(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è)谥黝?lèi)(一般是我們的Canvas)中實(shí)例一個(gè)PointAreaManager的對(duì)象,以此來(lái)完成對(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)擊了?就打開(kāi)音樂(lè)
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ī)游戲開(kāi)發(fā)中對(duì)觸摸屏輸入的處理


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

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

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論