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

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

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

    colonleado's

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

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

    具體實現如下:
      1import javax.microedition.lcdui.Graphics;
      2
      3import vectors.CVector;
      4
      5import base.CTools;
      6import 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 */

     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            // 是否發生了觸摸事件
     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                        4030{
     6            
     7                    // 實現todo方法
     8                    protected void todo() {
     9                        
    10                        // 如果被點擊了 就打開音樂
    11                        pointerAskMusicOk();
    12                        
    13                    }

    14                    
    15                }
    );


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

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

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

    主站蜘蛛池模板: 亚洲国产精品嫩草影院在线观看 | 成人午夜亚洲精品无码网站| 免费在线观看黄网站| 亚洲国产成人影院播放| 无码乱人伦一区二区亚洲| 亚洲高清美女一区二区三区| 精品无码专区亚洲| 和老外3p爽粗大免费视频| 久久w5ww成w人免费| 午夜色a大片在线观看免费| 亚洲天堂免费在线视频| 亚洲一级片在线播放| 日韩a毛片免费观看| 99re免费视频| 国产精品亚洲综合专区片高清久久久 | 亚洲成a人片在线不卡一二三区| 韩国免费A级毛片久久| 免费观看黄网站在线播放| 亚洲美女高清一区二区三区 | 国产曰批免费视频播放免费s| 男人的天堂亚洲一区二区三区| 亚洲尤码不卡AV麻豆| 色偷偷亚洲第一综合| 亚洲国产精品成人久久蜜臀| 羞羞视频免费网站在线看| 亚洲国产精品不卡在线电影| 国产99久久久国产精免费| 国产一级理论免费版| 亚洲国产精品免费观看| 午夜视频在线免费观看| 中文字幕精品亚洲无线码二区| 久久久久久AV无码免费网站| 亚洲一级黄色大片| 免费大黄网站在线观看| 久久大香伊焦在人线免费| 国产亚洲精久久久久久无码AV| 一级毛片aaaaaa免费看| 亚洲成av人在线观看网站| 亚洲AV无一区二区三区久久| 免费成人高清在线视频| 亚洲级αV无码毛片久久精品|