网页功能: 加入收藏 设为首页 网站搜索  
斜45度角地图拼接
发表日期:2007-03-28作者:[转贴] 出处:  

All Rights Reserved to Lacutis, 2004

 

有人在新浪网的游戏制作论坛问这个,那我随便说说这个问题的解法,先看看地图元素:

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

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

<-- Staggered

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

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

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

再从纵向座标找规律,看行位座标0和行位座标2,两块地图元素之间的距离刚好是一块地图元素的高。再看看行位座标0和行位座标1,两块地图元素之间的距离刚好是半块地图元素的高。所以,计算每块地图元素的位置,你的公式刚好是:

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是地图纵横的横向座标,n_map_pos_y是地图纵横的纵向座标,n_scrn_pos_x和n_scrn_pos_y是地图元素在屏幕上的纵横座标。

重要:

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

Slide:

Diamond:

我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 斜45度角地图拼接
本类热点文章
  脚本系统的实现
  C++基本功和 Design Pattern系列(2) Ty..
  C++基本功和 Design Pattern系列(1) - ..
  斜45度游戏开发(提高篇)
  睱酵笴栏祘Α砞璸?? - [秈顶絞]
  斜45度游戏开发(二)
  第一次写技术文献。Collision AI
  斜视角游戏中遮挡的判断
  C语言基本功教程系列(5) - 文件, Socke..
  用rand()和srand()产生伪随机数的方法总..
  C++基本功和 Design Pattern系列(3) co..
  C语言基本功教程系列(1)
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00522