<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

    主站蜘蛛池模板: 亚洲avav天堂av在线不卡| 水蜜桃视频在线观看免费播放高清| 国产亚洲老熟女视频| 西西大胆无码视频免费| a级毛片在线视频免费观看| 亚洲精品无AMM毛片| 亚洲精品高清国产麻豆专区| 国产亚洲人成网站在线观看| 午夜dj在线观看免费视频| 99在线观看精品免费99| 中文字幕免费在线视频| 污网站在线观看免费| 亚洲熟女乱色一区二区三区 | 亚洲一区二区三区首页| 亚洲国产成人精品女人久久久| 最近免费中文字幕4| 亚洲一级毛片免费观看| 午夜精品射精入后重之免费观看 | 国内永久免费crm系统z在线| 色一情一乱一伦一视频免费看| 亚洲色www永久网站| 亚洲av永久无码精品三区在线4| 久久久久亚洲av无码专区导航| 国产成人综合亚洲AV第一页| 亚洲国产成人精品91久久久| 免费在线看片网站| 国产免费卡一卡三卡乱码| 永久免费av无码网站大全| www.黄色免费网站| 无码人妻一区二区三区免费| 成人免费激情视频| 国产黄色免费网站| 国拍在线精品视频免费观看| 久久久久久精品免费免费自慰| 最刺激黄a大片免费网站| 性无码免费一区二区三区在线| 中文字幕无码免费久久| 日本高清免费观看| 免费国产黄网站在线观看 | 亚洲级αV无码毛片久久精品| 伊人婷婷综合缴情亚洲五月|