• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(8)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             

                游戲地圖的畫面是游戲中不可缺少的重要環(huán)節(jié)之一,要產(chǎn)生游戲地圖,除了可以直接使用已經(jīng)繪制好的地圖外,對于一些畫面不太復(fù)雜,且具有重復(fù)性質(zhì)的地圖或場景,有一個比較好的解決辦法,那就是利用地圖拼接的方法,將一小塊一小塊的小地圖組合成較大的地圖。
                地圖拼接的優(yōu)點在于節(jié)省系統(tǒng)資源,因為一張大型的地圖會占用比較多的內(nèi)存空間,且加載速度較慢,如果游戲中使用了為數(shù)較多的大型地圖,那么勢必會降低程序運行時的性能,而且需要相當(dāng)可觀的內(nèi)存空間。

                本篇隨筆從最基本的平面地圖貼圖開始講起,這種貼圖方法相當(dāng)直觀,即利用一張張四方形的小圖塊組成同樣是四方形的大地圖。下圖便是一張由3種不同圖塊組合而成的平面地圖。
                事實上,這張地圖是由4×3張小圖塊組成的,列方向是4張圖塊,行方向是3張圖塊,這里使用列與行這樣的字眼,是因為隨后將使用數(shù)組來定義地圖中出現(xiàn)圖塊的內(nèi)容。
                從這張圖中可以看到,一共出現(xiàn)了3中不一樣的地圖,這是因為程序中會事先以數(shù)組定義哪個位置上要出現(xiàn)哪一種地圖,使得拼接出來的地圖能夠符合需求。現(xiàn)在假設(shè)圖中3種不同圖塊的編號分別為0、1和2,那么可以以下面的這個一維數(shù)組來定義出上圖中的地圖。
            int mapblock[12]={0,1,1,1,  //第1列
                                                       
            2,0,1,2,  //第2列
                                                       
            2,2,2,2}
            //第3列
                  //為什么用一維數(shù)組而不是二維數(shù)組呢?


                將這個一維數(shù)組以行列的方式排列,可以看出每個數(shù)組元素對應(yīng)圖中的哪個圖塊。
                需要提醒的是,由于使用的是一位數(shù)組來定義地圖內(nèi)容,因此上面這個數(shù)組的每個元素的索引值是0……11.但是,由于程序里不論計算圖塊貼圖的位置還是計算整張地圖的長寬尺寸,都是以行列來進(jìn)行換算的,所以需要將數(shù)組的索引值轉(zhuǎn)換成相應(yīng)的列編號與行編號,轉(zhuǎn)換公式如下:

            列編號 = 索引值 / 每一列的圖塊個數(shù)(行數(shù));
            行編號 = 索引值 % 每一列的圖塊個數(shù)(行數(shù));

                下圖驗證上面的公式,方格中的編號是一維數(shù)組的元素索引值。


                這里需要注意的是,列編號與行編號的起始值都是從0開始算起,而一旦算出了列編號與行編號之后,便可以按照圖塊的寬與高來求出圖塊貼圖的位置,下面是計算圖塊左上點貼圖坐標(biāo)的公式。

             

            左上點X坐標(biāo) = 行編號 × 圖塊的寬度;
            左上點Y坐標(biāo) = 列編號 × 圖塊的高度;

            范例ch2_9:運用不同小圖塊,示范平面地圖拼接的技巧。
            下載地址:ch2_9(上傳到windows live空間,可能需要MSN賬號登陸)
            說明:程序源代碼中有相關(guān)的注釋。
            程序運行結(jié)果如下圖:

             
            PS:如想獲得更多關(guān)于Visual C++游戲開發(fā)的內(nèi)容,可點擊隨筆:《Visual C++游戲編程基礎(chǔ)》學(xué)習(xí)筆記——索引隨筆

            posted on 2010-04-09 09:26 煙皚 閱讀(2368) 評論(2)  編輯 收藏 引用 所屬分類: 《Visual C++游戲編程基礎(chǔ)》學(xué)習(xí)筆記

            Feedback

            # re: 游戲地圖制作——平面地圖貼圖[未登錄] 2010-08-02 18:09 cliz
            你好 我登入msn 也下載不了你的代碼啊。。
            能不能發(fā)給我一份啊。。謝謝了。。
            souliz@live.cn  回復(fù)  更多評論
              

            # re: 游戲地圖制作——平面地圖貼圖 2013-07-23 23:36 求學(xué)
            你好,登入後代碼已經(jīng)消失,能否寄給我一份?謝謝
            sa39390419@yahoo.com.tw
            (ps:其它講解的代碼也已消失)  回復(fù)  更多評論
              

            人妻无码精品久久亚瑟影视| 亚洲性久久久影院| 99久久精品免费看国产一区二区三区| 99久久精品国产一区二区蜜芽| 久久夜色精品国产噜噜麻豆| 久久精品国产亚洲AV蜜臀色欲| 日韩精品无码久久一区二区三| 精品久久久久久无码国产| 精品久久人妻av中文字幕| 久久综合给合久久狠狠狠97色69 | 亚洲精品无码久久毛片| 日本精品一区二区久久久| 性做久久久久久久久久久| 久久久久亚洲AV无码专区首JN| 国产精品乱码久久久久久软件| 久久丫忘忧草产品| 久久精品一本到99热免费| 久久精品国产只有精品2020| 99久久99久久精品国产片果冻| 国产69精品久久久久99| 少妇久久久久久被弄到高潮| 久久久国产99久久国产一| 一本久久知道综合久久| 久久久国产乱子伦精品作者| 国产69精品久久久久9999| 久久久久无码国产精品不卡| 久久99九九国产免费看小说| 精品免费久久久久久久| 久久久久一本毛久久久| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 麻豆亚洲AV永久无码精品久久| 久久er国产精品免费观看2| 97久久精品人人澡人人爽| 久久精品极品盛宴观看| 国内精品久久国产大陆| 综合久久久久久中文字幕亚洲国产国产综合一区首| 一本大道久久香蕉成人网| 久久久久久无码Av成人影院| 久久99精品久久久久久不卡| 日韩久久久久久中文人妻| 国内精品欧美久久精品|