地图坐标转换

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=√52(y-x/2)。最后

i=(AF+BF)/(√5—h2)=[√5—x2+ √52(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+ √52(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,这样导致公式最后也简洁很多。

from:http://www.cnblogs.com/pains/archive/2009/08/08/1541753.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值