• <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>
            隨筆 - 132  文章 - 51  trackbacks - 0
            <2012年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910

            常用鏈接

            留言簿(7)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            cocos2d-x

            OGRE

            OPenGL

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            我們要做一個(gè)45度游戲地圖中,那么如何判斷鼠標(biāo)點(diǎn)中了哪一個(gè)碎片呢??如圖:
             
            也許你想到通過(guò)解兩個(gè)直線方程(點(diǎn)斜式):

             

            不過(guò)這是個(gè)笨辦法,那么有更簡(jiǎn)單的辦法嗎?
            開(kāi)門見(jiàn)山:
            ***********************************
            N=int(x/TileW - y/TileH)
            M=int(x/TileW + y/TileH)

            ***********************************
            N,M是碎片的索引,從0開(kāi)始。
            TileW,TileH是碎片的長(zhǎng)寬。
            x,y是鼠標(biāo)坐標(biāo),但是注意坐標(biāo)系原點(diǎn)。
            以上過(guò)程如下圖演示:
             
            那么,是什么原理呢?

            我們建立一個(gè)新的坐標(biāo)系。以花體字的u,v為新的基向量。

             
            然后把鼠標(biāo)坐標(biāo)(注意原點(diǎn)!)(x,y)轉(zhuǎn)換成基于新的基集t={u,v}的展開(kāi)式:
             


            使用的時(shí)候很簡(jiǎn)單
            公式是
            1. N=int(x/TileW - y/TileH)
            2. M=int(x/TileW + y/TileH)


            ------------------------------------------------------------------------------------------------------------
            下面說(shuō)的是45度地圖,地圖坐標(biāo)系在頂端的格子計(jì)算方法

            關(guān)于45度角地圖中像素坐標(biāo)和地圖坐標(biāo)之間的轉(zhuǎn)換,網(wǎng)上有各種方法,其實(shí)坐標(biāo)轉(zhuǎn)換就是計(jì)算tite寬和tile高在像素坐標(biāo)中的偏移值,本方法是針對(duì) tite塊原點(diǎn)坐標(biāo)在菱形的頂點(diǎn)的位置的坐標(biāo)轉(zhuǎn)換,在45度角地圖中,方塊形狀為菱形,你可以用flash cs工具或其他繪圖工具很快的創(chuàng)建出這種菱形方塊,按以下3個(gè)步驟就可以了:
            1、 繪制一個(gè)任意大小的正方形;
            2、 把這個(gè)正方形旋轉(zhuǎn)45度;
            3、 把旋轉(zhuǎn)的正方形的高度縮放為原來(lái)的50%。
            還有一點(diǎn)就是方塊尺寸的問(wèn)題,菱形方塊的寬度是高度的2倍,其次方塊尺寸比例應(yīng)該是2:1。例如64像素X 32像素或100像素 X 50像素等,這樣的尺寸剛好能使方塊在地圖鋪設(shè)的時(shí)候很好地排列在屏幕上。
            至于坐標(biāo)間的轉(zhuǎn)換其實(shí)大家看圖就好理解了:


            圖中是一個(gè)以紅色(0,0)位置為原點(diǎn),紅點(diǎn)每向地圖坐標(biāo)系M軸上移動(dòng)一個(gè)單位,原點(diǎn)相對(duì)像素坐標(biāo)系X中的偏移值為:方塊寬度/2
            菱形方塊寬 var tileW :Number;
            菱形方塊高 var tileH :Number;
            地圖的行數(shù) var row :int;
            地圖的列數(shù) var col :int;
            紅色原點(diǎn)坐標(biāo)(像素坐標(biāo)系) var originP : Point;
            那么紅色的原點(diǎn)坐標(biāo)在地圖坐標(biāo)系中的位置為:
            originP.x = row * tileW /2;
            originP.y = 0;
            原點(diǎn)坐標(biāo)出來(lái)了,那么其它點(diǎn)的坐標(biāo)呢?
            思路是先求出在地圖坐標(biāo)系下(M方向或N方向)每移動(dòng)一個(gè)單位的像素坐標(biāo)系X軸和像素坐標(biāo)系Y軸的像素偏移值。
            如紅色原點(diǎn)移動(dòng)到黑色點(diǎn)的位置:
            M在像素坐標(biāo)系X軸的偏移像素 = tileW /2;(向右偏移)
            M在像素坐標(biāo)系Y軸的偏移像素 = tileH /2; (向下偏移)
            N在像素坐標(biāo)系X軸的偏移像素 = - tileW /2;(向左偏移)
            N在像素坐標(biāo)系Y軸的偏移像素 = tileH /2; (向下偏移)
            假如有個(gè)地圖坐標(biāo)點(diǎn)(M,N),那么它對(duì)應(yīng)的像素坐標(biāo)系的點(diǎn)為var p:Point
            p.x = 原點(diǎn)坐標(biāo)X + M在像素坐標(biāo)系X軸的偏移像素 × M + N在像素坐標(biāo)系X軸的偏移像素 × N = originP.x + tileW /2 × M + (-tileW/2) × N = originP.x + (M – N) × tileW/2;
            p.y = 原點(diǎn)坐標(biāo)Y + M在像素坐標(biāo)系Y軸的偏移像素 × M + N在像素坐標(biāo)系Y軸的偏移像素 × N = originP.y + tileH/2 × M + tileH/2 × N = originP.y + (M + N) × tileH/2;

            原文地址:http://blog.sina.com.cn/s/blog_6807f539010103ce.html

            posted on 2012-07-20 08:12 風(fēng)輕云淡 閱讀(7061) 評(píng)論(0)  編輯 收藏 引用 所屬分類: cocos2d
            国产精品久久久香蕉| 久久亚洲av无码精品浪潮| 久久精品毛片免费观看| 国产午夜精品久久久久九九电影 | 久久综合亚洲鲁鲁五月天| 亚洲色大成网站WWW久久九九| 久久久久九九精品影院| 很黄很污的网站久久mimi色| 伊人久久亚洲综合影院| 精品久久久久久无码人妻热| 久久亚洲精品中文字幕| 久久精品国产亚洲AV无码麻豆| 久久国产精品一区| 久久久九九有精品国产| 久久99国产精品久久久| 久久精品国产91久久综合麻豆自制| 亚洲午夜无码久久久久小说 | 久久人人添人人爽添人人片牛牛| 亚洲色欲久久久久综合网| 99久久精品免费看国产免费| 狠狠精品干练久久久无码中文字幕 | 国产精品美女久久久网AV| 亚洲综合精品香蕉久久网97 | 久久精品一区二区| 亚洲精品国精品久久99热一| 国产亚洲精久久久久久无码| 91精品国产高清久久久久久io| 精品亚洲综合久久中文字幕| 亚洲中文精品久久久久久不卡| 一本色道久久88综合日韩精品| 欧美麻豆久久久久久中文| 久久久这里只有精品加勒比| 奇米综合四色77777久久| 国产成人精品三上悠亚久久| 国产精品久久久香蕉| 国产香蕉久久精品综合网| 久久久久久久久久久精品尤物| 久久午夜夜伦鲁鲁片免费无码影视 | 久久久久噜噜噜亚洲熟女综合 | 香蕉久久永久视频| 香蕉久久久久久狠狠色|