<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    colonleado's

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

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

    具體實現(xiàn)如下:
      1import javax.microedition.lcdui.Graphics;
      2
      3import vectors.CVector;
      4
      5import base.CTools;
      6import base.CType;
      7
      8/**
      9 * 觸點區(qū)域
     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 */

     25public 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ā)生了觸摸事件 檢測下是否觸點在該區(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            // 如果被點擊了 那么執(zhí)行自己的todo
    103            if (isPointerClick()) {
    104
    105                todo();
    106
    107            }

    108
    109        }

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


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

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

    14                    
    15                }
    );


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

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

    posted on 2010-07-25 21:22 colonleado 閱讀(1621) 評論(0)  編輯  收藏 所屬分類: J2me

    主站蜘蛛池模板: 二个人看的www免费视频| 亚洲xxxx18| 美女羞羞喷液视频免费| 好吊妞998视频免费观看在线| 亚洲国产午夜电影在线入口| 久久国产色AV免费看| 亚洲卡一卡2卡三卡4卡无卡三| 9i9精品国产免费久久| 国产精品va无码免费麻豆| 亚洲精品第五页中文字幕| 麻豆成人久久精品二区三区免费| 狠狠亚洲婷婷综合色香五月排名| 美女免费精品高清毛片在线视| 女人张开腿等男人桶免费视频| 亚洲一区二区三区在线| 国产在线观看麻豆91精品免费| 亚洲精品福利视频| 小草在线看片免费人成视久网| 亚洲免费观看视频| 中出五十路免费视频| 国产亚洲av人片在线观看| 四虎影视久久久免费| 亚洲国产精品日韩| 亚洲色大成WWW亚洲女子| 亚洲一区在线免费观看| 久久精品成人免费观看| 亚洲国产精品一区二区久久hs| 成av免费大片黄在线观看| 国产aⅴ无码专区亚洲av| 久久爰www免费人成| 亚洲综合图片小说区热久久| 91在线手机精品免费观看| 亚洲视频一区网站| 毛片a级毛片免费播放100| 亚洲爆乳精品无码一区二区| 免费h成人黄漫画嘿咻破解版| 免费一区二区三区在线视频| 亚洲欧洲国产精品香蕉网| 免费A级毛片无码视频| 久久久久亚洲AV无码网站| 99久热只有精品视频免费观看17|