45 度角地图-----斜45度角地图拼接

45 度角地图, 可以分为 Staggered, slid 和 Diamond 三种类型


先看看地图元素:

可以看出来是个扁的菱形。这个地图元素的大小是64X32,你可以随意决定元素长宽,在设计程序时,地图元素大小并不重要,只要把尺寸扔进绘图方程,程序就能正确地绘制地图。在这个例子中,我们就先用64X32来演示。

那么这个公式是怎么样的呢?先看看 Staggered地图:
 --->  Staggered

这个地图有 5行,看着这个地图你会想,怎么拼图才能将地图拼出来。再画张图来演示:


从这张图可以看出, 拼图时从左到右,从上到下,跟正规的矩形拼图一样,唯一不同的是,地图元素与元素之间有重叠,看看第一行和第二行之间, 第二行的地图元素会压在第一行的元素上,而第三行的的地图元素则压在第二行的元素上。所以,只要找到正确的公式,你就能正确地设计程序,再来一张图:



图上 绿点(是高亮度绿色,不是暗绿色) 是每块地图元素的起点,第一行的座标是0,第二行的座标是1,第三行的座标是2,......由这些行位座标决定你的地图元素的起点,从这个规律中看出行位座标0,和行位座标2的横向座标X的起点是一样的是0,行位座标1的起点是向右移半块地图元素。

再从纵向座标找规律,看行位座标0和行位座标2,两块地图元素之间的距离刚好是一块地图元素的高。再看看行位座标0和行位座标1,两块地图元素之间的距离刚好是半块地图元素的高。所以,计算每块地图元素的位置,你的公式刚好是:
(j&1)---> 用来计算, j 是奇数也可以是偶数, (奇数&1) == 1, (偶数&1) == 0 (阴兵海 注释)
void  CalculateMapTilePos(int n_map_pos_x,
     int n_map_pos_y,
     int & n_scrn_pos_x,
     int & n_scrn_pos_y)
{
   n_scrn_pos_x = n_map_pos_x * iso_tile_size_x + (n_map_pos_y & 1) * (iso_tile_size_x / 2);
   n_scrn_pos_y = (n_map_pos_y) * iso_tile_size_y / 2;
}

n_map_pos_x   是地图x座标    (地图网格坐标)
n_map_pos_y   是地图y座标   (地图网格坐标)
n_scrn_pos_x  地图元素在屏幕上的x座标  (屏幕显示坐标)
n_scrn_pos_y  地图元素在屏幕上的y座标  (屏幕显示坐标)
iso_tile_size_x 地图切片 宽度
iso_tile_size_y 地图切片 高度


重要:首先以上的公式 只适用于Staggered斜45度角地图,而slide,和Diamond形地图,这个公式要稍加修改才能用。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值