日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AS3 RPG游戏引擎开发日志3:地图坐标转换

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AS3 RPG游戏引擎开发日志3:地图坐标转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在這里更改之前說的45度角坐標轉換的問題,地圖仍然不變,但地圖坐標和游戲坐標的關系改變了,它的對應關系如下圖:


  其中虛線表示地圖的邊緣,區塊中標的數是數組的索引,即地圖坐標。地圖的高度用大寫的H表示,區塊的高度用小寫的h表示,區塊的寬度等于高度的兩倍。

  • 顯示坐標轉換成地圖坐標

  假設一個點(下圖中的A點)的顯示坐標為(x,y),地圖坐標為(i,j),顯示坐標轉換成地圖坐標就是要在已知x和y的情況下求i和j。

  i的值等于AB的長除菱形區塊的邊長取整,AB=AF+BF,△ADF是一個直角邊比為1:2的直角三角形,其中直角邊AD=x,因此AF=√5—x2。△FBK是BF=BK等腰三角形,且底邊上的高等于底邊FK,FK=GE,GE=AE-AG,AG=x/2,因此BF=√5—2(y-x/2)。最后

i=(AF+BF)/(√5—h2)=[√5—x2+ √5—2(y-x/2)]/√5—h2=(y+x/2)/h。

  對j的值求解則要分兩種情況,即上圖中的A點和O點,確定條件分別是x/2<H-h和x/2>=H-h。

  在A點,j等于AC的長除菱形區塊的邊長取整,AC=AH+HC,HC=HI=AJ,AJ可以通過i的值求出。AH=√5—x2,AJ=菱形區塊的邊長-(AB-菱形區塊的邊長×i)=

√5—h2-[√5—x2+ √5—2(y-x/2)]+√5—hi2,

這是可以得出j=(x/2-y)/h+i+1。

  在O點,同上面的道理一樣,區別是求PQ,PQ=OS,最后計算的結果是j=(2H+x/2-y)/h-i。

結論:
?? ??? ?i=(y+x/2)/h
?? ??? ?j=(x/2-y)/h+i+1?? ?當x/2<H-h時
?? ??? ?j=(2H+x/2-y)/h-i?? ?當x/2>=H-h時

  • 地圖坐標轉換成顯示坐標

  此時要將上圖中的(6,7)轉換成Z點到地圖左邊緣和上邊緣的像素值,這里先直接用顯示坐標轉換成地圖坐標中的二元一次方程組求出x和y,同樣分條件:

當i<H/h時:
?? ??? ?x=hj-h
?? ??? ?y=h(2i-j+1)/2
當i>=H/h時:
?? ??? ?x=h(2i+j)-2H
?? ??? ?y=H-hj/2

  以上公式是直接求解出來的,當我們用放進去計算的時候x值是正確的,但y值總是比真實值多了h/2。出現這種情況就要從對應關系上去思考,地圖坐標系統中的點,比如(6,7),它實際對應于顯示坐標系統中的點不是Z點,而是Z點下方h/2位置處的點,把頭向左轉一點來看上圖,可以看到地圖坐標中,點(6,7)的左上角(左上角就是坐標點)就是顯示坐標中Z點下方h/2位置處,因此更正后得到轉換公式:

當i<H/h時:
?? ??? ?x=hj-h
?? ??? ?y=h(2i-j)/2
當i>=H/h時:
?? ??? ?x=h(2i+j)-2H
?? ??? ?y=H-h(j+1)/2

  • 總結

  數學是很有意思的,原本以為這些公式會與地圖傾斜的角度有關,但計算后根號5這個值不存在了,不過這樣說也不完全對,因為菱形區塊的高寬比正好是1比2,這樣導致公式最后也簡潔很多。

轉載于:https://www.cnblogs.com/pains/archive/2009/08/08/1541753.html

總結

以上是生活随笔為你收集整理的AS3 RPG游戏引擎开发日志3:地图坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。