登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
  立华软件园 - 安全技术中心 - 技术文档 - 入门基础 技术文章 | 相关下载 | 电子图书 | 攻防录像 | 安全网站 | 在线论坛 | QQ群组 | 搜索   
 安全技术技术文档
  · 安全配制
  · 工具介绍
  · 黑客教学
  · 防火墙
  · 漏洞分析
  · 破解专题
  · 黑客编程
  · 入侵检测
 安全技术工具下载
  · 扫描工具
  · 攻击程序
  · 后门木马
  · 拒绝服务
  · 口令破解
  · 代理程序
  · 防火墙
  · 加密解密
  · 入侵检测
  · 攻防演示
 安全技术论坛
  · 安全配制
  · 工具介绍
  · 防火墙
  · 黑客入侵
  · 漏洞检测
  · 破解方法
 其他安全技术资源
  · 攻防演示动画
  · 电子图书
  · QQ群组讨论区
  · 其他网站资源
最新招聘信息

Tile Based Engine的设计 - 坐标变换
发表日期:2007-03-28作者:[转贴] 出处:  

   Isometric Tile的处理比矩形的稍微复杂一点的地方在于屏幕是矩形的, 而反映出来的游戏世界的坐标轴有些不同. 无论是精灵的移动, 还是处理 Tile 都需要经过坐标变换. 而一个屏幕的区域在游戏世界的地图上却成了一个菱形. 我想,所有第一次设计 Isometric Tile 引擎的程序员都为这个烦躁过 (自己的感受啦;-) 不排除因为这个原因修改自己的原始设计的可能性 ^_^.

  实际它一点也不复杂,但需要你静下心来用直尺在白纸上画一张示意图. (注意:如果你贪图一时的便宜,而随手用铅笔比画,只会使你的心情更烦躁) 或者按云风的习惯用C程序来作图(推荐使用风魂 等方便的图形库;-) 当然你 AutoCAD 玩的好的话, 用 ADS 也非常方便. 这些方法不只针对这个特定问题, 我想每个程序员都应该养成这些良好的习惯 ;-) 这里云风为你做了这步.
看下图:


我是按前面的文章中推算的 Tile 形状, 和每个地图块的大小来作的 1:1 的示意图. 绿色框住的是 320x240 的 1/4 屏幕大小的地图块. Tile 的大小设定为 81x41 由于 Tile 间有 1 点的重叠, 所以实际占的空间是 80x40 的. 另外我将左上角的一块 Tile 设定为 (0,0) 其它的 Tile 按相对坐标编了坐标值, 方便大家的观看.

  如图,由于 Tile 的大小比较合理, 正好可以在一个地图块中容纳整数个 Tile, 所以我们的坐标变换就非常容易了.按图中所标的相对坐标, 左上角一块为 (0,0). 那么我们将相对坐标 (x,y) 的 Tile 变换为地图块上的像素坐标为(40*(y-x),20*(x+y))

  一个地图块里, 包含了 59 个 Tile, 其中边缘部分是和四周重叠的. 如果我们的地图数据是按游戏世界坐标储存. 我们可以看到, 这 59 个 Tile X 范围是 [-4,6] Y 范围是 [-1,9]. 就是说我们至少需要读入游戏世界中的一个 11x11 的地图描述矩阵才能包含这个地图块的数据. 这里, 我建议游戏地图描述数据用 16x16 做一块保存. 在加载几个地图块的图象数据的同时, 我们也可以将相应的地图描述数据的范围计算出来, 分块加载到内存.

  两个坐标的换算在解决不同的问题中, 可能有些麻烦, 但我们只需要记住两条基本公式. 游戏世界中的坐标(X,Y)换算到屏幕矩形坐标系(X0,Y0)中是 X0=a*(Y-X),Y0=b*(X+Y) 而反向的转换可以推算出来是 X=(1/2)*(Y0*2-X0)/a, Y=(1/2)*(Y0*2+X0)/a. 在计算除法的时候, 应该注意正负号的问题. (-1/7 取整在这里应该是 -1 而不是 0) 这里 a,b 是矩形的长宽系数, 比如在前面的提到的换算公式中用到的 a=40,b=20 就是 Tile 的长(80)宽(40) 的一半. 同样你要对地图块进行某种运算的时候; 4 和 6 这两个参数将会派上用场 ;-)

by codingnow.com

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 Tile Based Engine的设计 - 坐标变换

 ■ [欢迎对本文发表评论]
用  户:  匿名发出:
您要为您所发的言论的后果负责,故请各位遵纪守法并注意语言文明。

最新招聘信息

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