亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? j2me游戲開發中的地圖設計與繪制.txt

?? J2ME游戲開發中的地圖設計與繪制
?? TXT
字號:
在開發很多類型的游戲中,地圖系統都需要良好的設計,直觀的說,我們需要的地圖系統僅僅是一個2D數組,然后用最快的方式將數組影射到屏幕上。 
      游戲中的地圖通常不是由程序員用鍵盤輸入到程序里然后再在程序中修改然后再修改的狂亂過程,而是一般先由程序員做一個地圖編輯器,在這個地圖編輯器中用鼠標點點點,再保存的過程,或者是從網絡上下載的一些成熟編輯器比如:mappy這樣的工具生成地圖,再用腳本語言為mappy寫一個應該保存成什么樣格式的程序。通常地圖分為45度角,側視角和俯視角等等,45度角的也有很多種,這種視角相對俯視角和側視叫較復雜,我們主要討論俯視角,其實側視叫和俯視角主要的區別是圖片的表現風格不一樣,比如雷電這樣的空戰就是俯視角,mario這樣的游戲就是側視角,可以用相同的地圖編輯器做出來。綜上,你要知道游戲地圖不是程序員用程序寫出來的,你喜歡寫也可以,修改起來較麻煩,也不能像資源一樣動態管理而是一次性讀入到內存里,比較不爽。

      在這個文章里面,我們假設我們的2D數組是通過,資源讀取出來的,內容如下:

public static byte[][] B_MAZE_2D_ARRAY = {
        {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0}
        , {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}
        , {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

    };

  這個地圖中一共0,1兩種byte數,0代表一種圖塊,1代表一種圖塊,也可以是動畫圖塊,你繪制的時候區別一下就可以了。因為我們程序里面想把這整個圖形繪制出來的話有N多種方案,我給出兩個比較合理的方案,當然第二種是比較優化的.我們假設你的主角一直在屏幕中央,當你主角移動的時候,地圖相應的變化,就是說主角為參照物,地圖動.我們知道地圖的大小要超過屏幕的,我們需要設定一個坐標系統,我的方法是,以左上角為0,0也就是和我們常用的Canvas的坐標系統是相同的,我們的圖塊大小為:ELEMENT_WIDTH, ELEMENT_HEIGHT,所以我們整個地圖的面積(絕對面積)是 ELEMENT_WIDTH * 橫坐標的塊數 * ELEMENT_HEIGHT*縱坐標的塊數。因此,我們把這么大的題圖畫在屏幕上時,需要把需要畫的坐標面積(也就是屏幕面積)從這個地圖中拿出來,其他地方被切除,這就比較的高效了。

  方法一:循環整個2維數組,不需要的地方不繪制只繪需要的部分:

     int kI = 0;// 表示
     int kJ = 0;
//nEleStartedX, nEleStartedY表示從2D Array哪個位置開始繪制地圖
     for (int i = nEleStartedY; i < B_MAZE_2D_ARRAY.length; i++) {
       kJ = 0;
//是否需要繪制
       boolean isDrawed = false;
       for (int j = nEleStartedX; j < B_MAZE_2D_ARRAY[i].length; j++) {
//繪制需要的面積,N_MAZE_ELEMENT_WIDTH,N_MAZE_ELEMENT_HEIGHT表示圖塊寬高
         int bX = nMapStartedX + j * N_MAZE_ELEMENT_WIDTH;
         int bY = nMapStartedY + i * N_MAZE_ELEMENT_HEIGHT;
//SCREEN_WIDTH,SCREEN_HEIGHT屏幕大小
         if (bX <= SCREEN_WIDTH
             &&
             bY <= SCREEN_HEIGHT
             &&
             bX >= -N_MAZE_ELEMENT_WIDTH
             &&
             bY >= -N_MAZE_ELEMENT_HEIGHT
             ) {
           g.drawImage(mapImages[B_MAZE_2D_ARRAY[i][j]], bX,
                       bY,
                       Graphics.TOP | Graphics.LEFT);//繪制圖塊
           isDrawed = true;
           kJ++;
// N_MAX_MAZE_ITEM_X , N_MAX_MAZE_ITEM_Y屏幕面積內圖塊的最大值
           if (kJ > N_MAX_MAZE_ITEM_X + 2) {
             break;
           }

         }
       }
       if (isDrawed) {
         kI++;
       }
       if (kI > N_MAX_MAZE_ITEM_Y + 2) {
         break;
       }

     }

  方法二:事先找到需要繪制的橫坐標縱坐標的圖塊編號(2DArray的數組下標),循環屏幕面積大小的數組:

    //  需要繪制的2DArray左上角位置,nMapStartedX,nMapStartedY在地圖絕對面積上的坐標
    int nArrayI = ( -N_MAZE_ELEMENT_HEIGHT - nMapStartedY) /
        N_MAZE_ELEMENT_HEIGHT;
    int nArrayJ = ( -N_MAZE_ELEMENT_WIDTH - nMapStartedX) /
        N_MAZE_ELEMENT_WIDTH;
    for (int i = nArrayI;
         i < SCREEN_HEIGHT / N_MAZE_ELEMENT_HEIGHT + 2; i++) {
      for (int j = nArrayJ;
           j < SCREEN_WIDTH / N_MAZE_ELEMENT_WIDTH + 2; j++) {

        if (i < 0 || j < 0 || i > B_MAZE_2D_ARRAY.length ||
            j > B_MAZE_2D_ARRAY[0].length) {
          continue;
        }
        else {
          int bX = nMapStartedX + j * N_MAZE_ELEMENT_WIDTH;
          int bY = nMapStartedY + i * N_MAZE_ELEMENT_HEIGHT;
          g.drawImage(mapImages[B_MAZE_2D_ARRAY[i][j]], bX,
                      bY,
                      Graphics.TOP | Graphics.LEFT);

        }
 }
 }

  根據我的測試,方法一的地圖面積越大fps掉的越為厲害,而方法二基本上不會掉fps,強烈推薦方法二.

  地圖系統做好了之后,你就可以使用地圖做更多的表現力了,只要改變nMapStartedX,nMapStartedY,就可以繪制出地圖上的相應部分,代碼的復用效率非常的高。RPG, SLG, PUZZLE等游戲類型都可以使用.歡迎跟我探討更多的游戲制作技術,我還將寫一個關于動畫的相關東東,不過最近沒什么時間

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区在线观看| 亚洲mv在线观看| 2020国产精品自拍| 日韩午夜激情av| 欧美一级高清大全免费观看| 在线播放/欧美激情| 337p亚洲精品色噜噜噜| 色婷婷av一区二区三区大白胸| 欧洲精品一区二区| 91老司机福利 在线| 欧美中文字幕一区二区三区 | 久久久久综合网| 久久久久国产免费免费| 国产精品三级av| 悠悠色在线精品| 日韩国产一区二| 蜜臀99久久精品久久久久久软件| 国内精品自线一区二区三区视频| 国产精品自拍av| 91啪在线观看| 欧美一区二区三区在线| 欧美tickling挠脚心丨vk| 欧美极品美女视频| 一个色综合av| 国精品**一区二区三区在线蜜桃| 不卡视频在线看| 欧美精品777| 国产日韩欧美亚洲| 亚洲成人av一区二区| 国产一区二区三区在线看麻豆| 国产69精品一区二区亚洲孕妇| 日本韩国欧美在线| 精品噜噜噜噜久久久久久久久试看 | 亚洲国产三级在线| 国产一区二区美女诱惑| 色域天天综合网| 久久亚洲二区三区| 亚洲va天堂va国产va久| 国产福利一区二区| 欧美一区二区三区精品| 中文字幕中文在线不卡住| 午夜视频一区二区三区| 粉嫩av一区二区三区在线播放| 欧美电影在线免费观看| 国产精品福利影院| 国产一区二区三区在线观看精品 | 麻豆精品一二三| 色综合天天在线| 亚洲精品一区在线观看| 亚洲制服丝袜av| aaa国产一区| 精品国产自在久精品国产| 亚洲国产成人高清精品| 不卡视频免费播放| 精品国产髙清在线看国产毛片| 一区二区三区美女| 不卡在线观看av| 国产亚洲精品资源在线26u| 日本aⅴ免费视频一区二区三区| 成人黄页在线观看| 国产视频视频一区| 麻豆成人久久精品二区三区红 | 久久这里只有精品6| 三级一区在线视频先锋 | 免播放器亚洲一区| 欧美视频你懂的| 亚洲成人av电影| 欧美日韩不卡视频| 午夜精品一区二区三区三上悠亚| 色哟哟在线观看一区二区三区| 亚洲视频一区在线| 一本一道波多野结衣一区二区| 亚洲欧洲日韩av| 成人开心网精品视频| 国产精品伦一区| 91影院在线免费观看| 亚洲天堂2016| 欧美色图免费看| 首页国产欧美久久| 欧美岛国在线观看| 国产精品一区二区三区99| 国产欧美一区二区三区沐欲| 成人的网站免费观看| 亚洲手机成人高清视频| 欧美色视频一区| 日韩精品久久理论片| 日韩欧美自拍偷拍| 成人高清免费观看| 亚洲精品自拍动漫在线| 欧美视频在线观看一区| 日本不卡在线视频| 国产色一区二区| 色呦呦国产精品| 人人超碰91尤物精品国产| 国产亚洲精品7777| 91碰在线视频| 麻豆久久久久久久| 国产精品丝袜久久久久久app| 日本道在线观看一区二区| 午夜精品123| 久久婷婷久久一区二区三区| 一本一道久久a久久精品综合蜜臀| 午夜激情一区二区| 欧美国产国产综合| 欧美高清dvd| 波多野结衣中文字幕一区二区三区| 亚洲欧美一区二区三区久本道91 | 91免费视频网| 天堂av在线一区| 日本一区二区三区dvd视频在线| 欧洲视频一区二区| 国产一区啦啦啦在线观看| 玉米视频成人免费看| 日韩欧美的一区| 在线这里只有精品| 国产一本一道久久香蕉| 亚洲美女一区二区三区| 精品奇米国产一区二区三区| 色综合色狠狠天天综合色| 麻豆成人免费电影| 亚洲成人av一区| 综合久久久久综合| 久久人人97超碰com| 91精品在线免费| 99久久精品免费看国产免费软件| 老司机一区二区| 亚洲另类春色校园小说| 国产欧美精品区一区二区三区| 欧美妇女性影城| 欧美性受xxxx| 91麻豆国产精品久久| 国产精品综合视频| 极品少妇xxxx偷拍精品少妇| 亚洲图片欧美色图| 亚洲麻豆国产自偷在线| 国产午夜精品美女毛片视频| 日韩一级片网站| 欧美日韩大陆一区二区| 欧美日韩另类国产亚洲欧美一级| 色综合一区二区| 91在线观看免费视频| 懂色av一区二区在线播放| 国内精品在线播放| 国产在线麻豆精品观看| 午夜精品视频一区| 日韩高清在线不卡| 日韩精品国产精品| 日本91福利区| 久久99精品久久久久久国产越南| 麻豆精品一二三| 激情图片小说一区| 国产成人精品午夜视频免费| 韩国视频一区二区| 国产精品中文欧美| 欧美探花视频资源| 91福利在线看| 欧美日韩国产首页| 欧美一级片在线看| 日韩精品专区在线| 欧美成人video| 国产亚洲短视频| 国产精品热久久久久夜色精品三区| 国产精品午夜在线观看| 亚洲免费在线视频一区 二区| 亚洲婷婷在线视频| 午夜视频在线观看一区| 麻豆极品一区二区三区| 国产成人在线看| 色综合久久久久久久久久久| 欧美三级中文字| 欧美sm极限捆绑bd| 国产精品国产精品国产专区不片 | 麻豆免费精品视频| 懂色av一区二区三区蜜臀| 91成人在线免费观看| 欧美一卡二卡在线| 欧美国产日韩亚洲一区| 玉米视频成人免费看| 激情图片小说一区| 91黄色小视频| 26uuu色噜噜精品一区二区| 国产精品视频在线看| 亚洲综合色网站| 精品在线一区二区| 91黄视频在线观看| 久久久精品欧美丰满| 亚洲小说欧美激情另类| 国产精品亚洲一区二区三区妖精 | 秋霞av亚洲一区二区三| 成人自拍视频在线| 欧美另类变人与禽xxxxx| 欧美国产一区视频在线观看| 亚洲妇熟xx妇色黄| 国产成a人无v码亚洲福利| 欧美在线观看一区二区| 久久久久久久综合色一本| 夜夜嗨av一区二区三区四季av | 美女久久久精品| 欧美伊人久久久久久久久影院| 久久一日本道色综合|