我们要做一个45度游戏地图中,那么如何判断鼠标点中了哪一个碎片呢??如图:也许你想到通过解两个直线方程(点斜式):

不过这是个笨办法,那么有更简单的办法吗?开门见山:***********************************N=int(x/TileW - y/TileH)M=int(x/TileW + y/TileH)***********************************N,M是碎片的索引,从0开始。TileW,TileH是碎片的长宽。x,y是鼠标坐标,但是注意坐标系原点。以上过程如下图演示:那么,是什么原理呢?我们建立一个新的坐标系。以花体字的u,v为新的基向量。

然后把鼠标坐标(注意原点!)(x,y)转换成基于新的基集t={u,v}的展开式:

使用的时候很简单公式是

N=int(x/TileW - y/TileH)

M=int(x/TileW + y/TileH)

------------------------------------------------------------------------------------------------------------

下面说的是45度地图,地图坐标系在顶端的格子计算方法

关于45度角地图中像素坐标和地图坐标之间的转换,网上有各种方法,其实坐标转换就是计算tite宽和tile高在像素坐标中的偏移值,本方法是针对 tite块原点坐标在菱形的顶点的位置的坐标转换,在45度角地图中,方块形状为菱形,你可以用flash cs工具或其他绘图工具很快的创建出这种菱形方块,按以下3个步骤就可以了:

1、 绘制一个任意大小的正方形;

2、 把这个正方形旋转45度;

3、 把旋转的正方形的高度缩放为原来的50%。

还有一点就是方块尺寸的问题,菱形方块的宽度是高度的2倍,其次方块尺寸比例应该是2:1。例如64像素X 32像素或100像素 X 50像素等,这样的尺寸刚好能使方块在地图铺设的时候很好地排列在屏幕上。

至于坐标间的转换其实大家看图就好理解了:

图中是一个以红色(0,0)位置为原点,红点每向地图坐标系M轴上移动一个单位,原点相对像素坐标系X中的偏移值为:方块宽度/2

菱形方块宽 var tileW :Number;

菱形方块高 var tileH :Number;

地图的行数 var row :int;

地图的列数 var col :int;

红色原点坐标(像素坐标系) var originP : Point;

那么红色的原点坐标在地图坐标系中的位置为:

originP.x = row * tileW /2;

originP.y = 0;

原点坐标出来了,那么其它点的坐标呢?

思路是先求出在地图坐标系下(M方向或N方向)每移动一个单位的像素坐标系X轴和像素坐标系Y轴的像素偏移值。

如红色原点移动到黑色点的位置:

M在像素坐标系X轴的偏移像素 = tileW /2;(向右偏移)

M在像素坐标系Y轴的偏移像素 = tileH /2; (向下偏移)

N在像素坐标系X轴的偏移像素 = - tileW /2;(向左偏移)

N在像素坐标系Y轴的偏移像素 = tileH /2; (向下偏移)

假如有个地图坐标点(M,N),那么它对应的像素坐标系的点为var p:Point

p.x = 原点坐标X + M在像素坐标系X轴的偏移像素 × M + N在像素坐标系X轴的偏移像素 × N = originP.x + tileW /2 × M + (-tileW/2) × N = originP.x + (M – N) × tileW/2;

p.y = 原点坐标Y + M在像素坐标系Y轴的偏移像素 × M + N在像素坐标系Y轴的偏移像素 × N = originP.y + tileH/2 × M + tileH/2 × N = originP.y + (M + N) × tileH/2;

tilemap 菱形_45度斜角地图菱形坐标转换相关推荐

  1. 45度斜角地图菱形坐标转换

    !!! 此文章内容为转载,没有真实实践,只给需要的朋友提供思路,具体详细算法需要自己根据项目需求变动 !!! 我们要做一个45度游戏地图中,那么如何判断鼠标点中了哪一个碎片呢??如图:   也许你想到 ...

  2. 让Tiled成为一个强有力的45度菱形Staggered打点器(地图编辑器)

    让Tiled成为一个强有力的45度菱形Staggered打点器(地图编辑器) 分类: cocos2dx2013-08-05 23:09 1601人阅读 评论(1) 收藏 举报 Tiled的确强大,处理 ...

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

    45 度角地图, 可以分为 Staggered, slid 和 Diamond 三种类型 先看看地图元素: 可以看出来是个扁的菱形.这个地图元素的大小是64X32,你可以随意决定元素长宽,在设计程序时 ...

  4. 斜角地图逻辑原理解析和Isometric地图编辑器设计方案(转)

    http://uh.9ria.com/link.php?url=http://bbs.9ria.com%2Fviewthread.php%3Ftid%3D77966 当我要做的一款游戏,而无法即时地查 ...

  5. 斜45度瓦片地图(Staggered Tiled Map)里的简单数学

    瓦片地图(Tiled Map)系列文章: 斜45度瓦片地图(Staggered Tiled Map)里的简单数学 瓦片地图注意事项 前段时间在做游戏的地图编辑功能,我们是在一个斜45度视角的场景上,对 ...

  6. cocos2dx使用TiledMap模拟3D地图场景----斜45度2D地图的靠墙直线移动

     基于cocos2dx引擎的第三人称射击游戏,角色使用3D模型,地图采用2.5D.  定制地图编辑系统抛开不谈,这里最大可能的挖掘现有工具TiledMap的潜力,完成超2.5D地图的实现.  使用2D ...

  7. HTML怎么做出菱形框架,css3怎么实现菱形渐变?

    本篇文章介绍了css3实现菱形渐变的效果,有着一定的参考价值,现在将它分享给各位,希望对各位有帮助. css3怎么实现菱形渐变 1.实现菱形渐变,首先需要实现一个菱形,使用了clip-path属性:. ...

  8. 菱形实现气泡Bubble,菱形画箭头,菱形画三角形

    菱形实现气泡Bubble,菱形画箭头,菱形画三角形 >>>>>>>>>>>>>>>>>>&g ...

  9. 45度角地图坐标计算 和 层级计算

    //2个方块x的距离 xdis = 38 //2个方块y的距离 ydis = -19 //传入 XY 下标 获取坐标   45度角地图 getPositonByXY(_x :number, _y :  ...

最新文章

  1. .NET笔试题集(一)
  2. 很久没有更新blog了,对不起每一位朋友。
  3. Android Studio 使用入门及问题汇总
  4. 【前端开发系列】—— CSS3属性选择器总结
  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 5 章 数据定义_5.6. 权限
  6. wpf中xps文档合并功能实现
  7. 匿名内部类 可以访问外部类_Java——内部类详解
  8. PowerDesigner--创建概念数据模型;并生成逻辑数据模型/物理数据模型/数据库SQL脚本
  9. 使用rkhunter检测Linux的rootkit
  10. 小型微型计算机系统2006,小型微型计算机系统杂志
  11. 第三季-第26课-守护进程设计
  12. (转)“宇宙之王”高盛在历史的交叉口,不得不全面走向机器自动化
  13. html中 DPlayer 播放m3u8文件【方式二】
  14. mobaXterm中delete键显示^?
  15. DOTA2新英霸更新日志
  16. linux安装包PGP加密验证
  17. 文件十六进制编辑软件HxD Hex Editor的使用
  18. 深信服2019届校园招聘专场(私聊博主得内推码,免简历筛选)
  19. 2023年AP微观经济学考什么?
  20. 隔行扫描, 逐行扫描

热门文章

  1. 从openbox了解Linux桌面相关知识
  2. 前端实现小米官网导航栏的实现 主要通过HTML+CSS完成效果有下拉列表和一个固定定位,中间色块用来辨识固定定位,效果更加明显
  3. windows模拟linux系统下载,Windows模拟器|Wine(Linux下运行Windows程序)v1.9 官方最新版_软件侠下载站...
  4. 数字化校园如何高效运维
  5. 高新技术企业研发费用核算管理
  6. 基于SpringBoot的外卖项目(详细开发过程)
  7. web微博系统(前端)
  8. ssh 链接不上虚拟机 ping不通虚拟机 而且防火墙已经关闭的状态下
  9. 解决部分Android手机播放MP4视频外音是杂音的问题,耳机播放正常
  10. MATLAB画论文里的图片,如何在论文中画出漂亮的插图?