flash 做游戏 地图菱形坐标系为什么要转换成矩形坐标

45度斜角地图菱形坐标转换
我们要做一个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}的展开式:
图中是一个以红色(0,0)位置为原点,红点每向地图坐标系M轴上移动一个单位,原点相对像素坐标系X中的偏移值为:方块宽度/2
菱形方块宽 var tileW :N
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:90474次
积分:2222
积分:2222
排名:第15895名
原创:115篇
转载:131篇
(7)(3)(4)(7)(4)(9)(4)(18)(10)(5)(1)(18)(10)(6)(18)(60)(4)(16)(38)(5)如何用flash在有限的页面内制作大的地图?
作者:佚名
字体:[ ] 来源:互联网 时间:06-24 14:45:36
多个朋友因工作或爱好的需要,询问如何用flash在有限的页面内制作大的地图,并链接、显示有关地点的信息。为此将我自己做的一个记录旅游地点的flash地图略作精简、修改,做了这个flash,希望对大家有所帮助
  多个朋友因工作或爱好的需要,询问如何用flash在有限的页面内制作大的地图,并链接、显示有关地点的信息,为此将我自己做的一个记录旅游地点的flash地图略作精简、修改,做了这个flash,并将关键部分做法介绍如下(原有的那个包括显示信息中的文字和采用的旅游照片,将近10 M,太大了,无法上传)。
  作品见下方(好久没发帖了,不知该怎么发swf文件了,把考屏图放下面方便了解)
  特点:
  缩小地图以适应页面大小的局限,用放大镜来放大缩小了的地图,使能清晰的看到需要的细节。使用AS纠正普通遮罩制作放大镜错位较大的缺陷,放大部分在镜片的中心(红十字处)没有错位。用鼠标经过、离开按钮的AS来控制显示有关需要的信息(作品中鼠标在放大镜的中心红十字处)。
  因为地图窗口大小同选的地图长宽要成比例,如果页面合适,也可以让信息同时在地图窗口的右边或下面显示,我自己做的记录旅游地点的地图,文字信息是在右边显示,用组件加滚动条;照片用MC元件,位置在地图窗口内,循环播放,这样显示的信息量可以非常大。图一(信息显示另一做法)
  本作品仅作为示意
  1、各地的朋友千万不要在地理问题上拍砖哦。
  2、一些距离太近的城市偷懒没设定信息显示链接(解决办法是缩小按钮的反应面积)。
  3、为便于上传,地图只放大了1倍,图片的品质也选定得很低。
  4、同样,示意中只有北京同时采用显示1张图片。
  做法简介:
  1、各图层拷屏如图2,为了容易看清做法,图层分得细了些。
  舞台(或地图窗口)大小同选的地图长宽要成比例(便于满舞台显示不变形),我用的舞台是400*330,地图是800*660(这2个尺寸在下面帧动作中要用),只放大1倍。放大倍数可自己确定,只需在步骤7的帧动作AS中改动相应数据即可。
  友情提示:如果地图窗口小于舞台,地图窗口的坐标应该是(0,0)。图二:
  2、新建电影剪辑元件(即MC)&地图元件&,把选定的地图图片导入,图片的X、Y坐标都是0,即左上角对着元件界面的 + 处。简单办法是选中图片,打开属性面板,把X、Y 都改为0,然后用Enter键确定。
  3、把做好的MC拖入场景&小图&图层中,在场景的属性中设定MC坐标为(0,0),宽、高数值同舞台一致,然后用Enter键确定。
  4、把做好的MC再拖入场景&大图&图层中,MC在场景中的坐标也设定为(0,0),选中&大图&图层中的MC,在属性中命名为aa,
  5、做放大镜
  新建MC元件&放大镜元件&,画圆,圆的左右上下均必须居中。用剪切、粘贴到当前位置的办法,把圆的色块和边框分别放在2个图层中。把镜片图层中的颜色块转换为MC元件&镜片元件&。在&放大镜元件&中选中镜片MC,在属性中命名为ee。颜色块是做遮罩用的,在swf文件中看不到它,只是在有颜色的部分能看到被遮蔽的&大图&图层中的画面,所以颜色任意。镜框在swf文件中是看得到的,颜色、式样自定。再增加1个图层放十字线,同镜框一样在swf文件中是看得到的。用&极细&线。
  友情提示:如果工作中需要比例尺,也可经过计算,把十字线设定为比例尺,计算法如下:
  每格标注的距离=每格对应的地图上两点间实际距离*每格像素/地图上该距离的像素。
  实际操作,可以测定在地图上已知距离的水平(或竖直)的两点之间的像素值,计算出1个像素在地图上是多少公里,再确定镜片上每格几个像素,标定比例尺。
  6、把&放大镜元件&MC拖入场景放大镜图层。选中放大镜MC,命名为ff。
  回顾一下,上面已经分别为3个MC命名了,命名应该同下面AS中一致,不能搞错。
  场景中大地图MC命名为aa,
  场景中放大镜MC,命名为ff。
  放大镜元件中放大镜镜片MC,命名为ee,
  在AS图层选中帧,写如下帧动作
  _root.onEnterFrame = function() {
  Mouse.hide();//隐藏鼠标
  startDrag(&_root.ff&, true);// 控制望远镜ff随鼠标移动
  _root.aa.setMask(_root.ff.ee) //用ff中的ee遮蔽aa
  _root.aa._x=_root._xmouse*(1-80/40);//用鼠标坐标控制大画面x坐标跟随
  _root.aa._y=_root._ymouse*(1-66/33);//用鼠标坐标控制大画面y坐标跟随
  } 因为放大镜中有看得见与看不见的两种图形,所以用AS脚本控制遮罩,
  _root.aa.setMask(_root.ff.ee)
  即用ff中的ee遮蔽aa&&括号内的是遮蔽MC,前边的是被遮蔽MC。
  用鼠标坐标控制大画面跟随
  _root.aa._x=_root._xmouse*(1-800/400);//用鼠标坐标控制大画面x坐标跟随
  _root.aa._y=_root._ymouse*(1-660/330);//用鼠标坐标控制大画面y坐标跟随
  按我的计算,要保持不错位,放大图片aa的x坐标应该是:(1&放大倍数)乘以鼠标的x坐标值(同样,y坐标也是这么计算),现在画面的放大倍数是800/400,因此
  _root.aa._x=_root._xmouse*(1-800/400);
  800是本作品的地图宽,400是flash舞台宽度(可以约分,怕说明太费事了),制作时要根据自己作品的地图和flash的实际像素大小更改。
  同样,_root._ymouse*(1-660/330)中也这样。
  8、在&地图元件&中增加按钮,在&地图元件&中增加1个图层放按钮。分别选中每一个按钮,写上AS。以&北京&为例,AS如下:
  on (rollOver) {
  _root.gotoAndStop(2);
  on (rollOut) {
  _root.gotoAndStop(1);
  因为按键设在MC地图元件中,却是控制场景的动作,所以在AS中加了_root.,on (rollOver)时, gotoAndStop哪一帧,就在那帧上制作需要的信息。本作品北京的信息制作在第2帧,因此gotoAndStop(2),共在31个城市制作了信息示意。on (rollOut)都是回到第1帧。
  友情提示;
  按上面的控制地图移动的办法,鼠标要停留在某一个特定的点上(例如本例中闪动的红圆),实际上只能是在flash中的一个特定的位置上。因此,只要避开这个位置,尽可以随意安排需要显示的信息的位置、大小及数量。本例中只有1个拉萨的信息因被遮挡放右边。
  如果页面合适,也可以让文字、图片信息同时在地图窗口之外的右边或下面显示,但要在左边、上边显示,则地图坐标的计算会复杂许多,没有必要。希望这篇flash在有限的页面内制作大的地图教程对大家有所帮助!
大家感兴趣的内容
12345678910
最近更新的内容大话II地图坐标查询器Flash版
你可以到叶子猪的下载中心中将这个Flash下载到你的电脑中
&&&&1、无需记忆快捷键:只要按下地图名字的拼音首字母即可找到相应的地图。如斧头帮:拼音的首字母为“ftb”,顺序按“f”、“t”,即可找到斧头帮的地图。
&&&&注:五指山的地图例外,因为“w”“z”“s”均已作为快捷键使用,因此使用了“wu”(五的拼音)中的“u”作为五指山的快捷键。
  2、快速查找龙7的地图:按“l k”打开龙窟1层的地图,将“龙窟1层”的“k”改为“7”,回车即可。同理可快速查找凤巢和其他含序号的地图。
  3、快速查找凤2的地图:按“f”打开凤巢1层的地图,再按一次下箭头键即可。
  4、在下拉菜单中输入“长安”,回车即可打开长安的地图。同理,在下拉菜单中输入地图名,回车即可打开相应的地图。
  空格/小键盘上的“-”    &&输入x坐标的值
  ,/./小键盘上的“+”/“.”  输入y坐标的值
  回车             确认修改
  上箭头            上一项
  下箭头            下一项
  上翻页            第一项
  下翻页            最后一项
  c              长安
  l              洛阳
  a              长安城东
  n              大唐境内
  u              五指山
  t              斧头帮
  j              大唐边境
  g              傲来国
  p              普陀山
  z              北俱芦洲
  k              龙窟1层
  f              凤巢1层
  m              御马监
  y              瑶池
  h              蟠桃园后
  s              四圣庄
  w              万寿山
  b              白骨山
  d              海岛洞窟1flash地图的制作教程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
flash地图的制作教程
上传于|0|0|文档简介
&&flash地图的制作教程
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢天极传媒:天极网全国分站
您现在的位置:
& &&用于Flash游戏地图显示的AS代码
用于Flash游戏地图显示的AS代码论坛整理 10:57
  今天我们一起研究一下Flash游戏地图的显示技术。文章末尾提供原文件供大家参考。  步骤1:在Flash中新建一个影片,场景尺寸随意。  步骤2:新建一个空的影片剪辑,实体名称为allmc,然后拖到场景的左上角,x坐标为0,y坐标也为0.  步骤3:再新建一个影片剪辑,实体名称为smap,拖到场景任意位置.进到smap,在里面画个小地图背景(比如一个色块)。  注意:如果注册点在左上角的话,那么这个色块的位置就要输入0,0,如果注册点在中心,那么色块的坐标就正好要是色块宽和高的一半。比如色块的宽是30,高是30,那么它的坐标就设置为15,15。弄好后把这个色块按F8转换为影片剪辑,命名实体名称为:smapmc。  步骤4:建立控制的mc和小地图显示的mc。建立一个用来控制的mc,命名为box,再建立个mc,用在小地图中显示的,命名为cir。不要把它们拉进场景,只需要给它们做连接名,连接名称分别为box和cir。  步骤5:AS代码部分,将以下代码复制到主场景第一帧。
//////地图比例尺转换as,绝命时刻日/////// var&sd:Number&=&5; //定义速度 var&boxmc&=&allmc.attachMovie("box",&"nbox",&1); //把控制的元件动态载入影片剪辑allmc,并赋予变量boxmc boxmc._x&=&Math.random()*Stage. //boxmc里包含了nbox,现在定义它的X坐标,Stage.width是主场景的宽,让boxmc._x随机在主场景的任意X轴位置 boxmc._y&=&Math.random()*Stage. //同上,不过这里是随机Y轴& var&xpos:Number&=&boxmc._x; //初始,把boxmc的X坐标显示出来,传递到动态文本筐xpos上 var&ypos:Number&=&boxmc._y; //同上,这里传递的是Y坐标 smap.attachMovie("cir",&"cir",&1); //动态载入cir这个元件,把它载入到smap这个影片剪辑中,它是显示在小地图里的mc smap.cir._x&=&boxmc._x/10; //定义cir在smap里面的X坐标,由于地图大小是以10倍的比例缩放的,所以行走的速度和位置都要/10 smap.cir._y&=&boxmc._y/10; //同上,这里定义的是Y坐标 var&sw:Number&=&Stage. //把总场景的宽赋予变量sw var&sh:Number&=&Stage. //把总场景的高赋予变量sw smap.smapmc._width&=&sw/10; //为了让smap.smapmc.宽按比例缩小放大(考虑到不管如何改变主场景大小都能自行按比例缩小小地图),所以也应该/10,也是为什么 //上两行代码要获取主场景的宽和高的原因 smap.smapmc._height&=&sh/10; //同上,这里是判断高 smap.smapmc._x&=&smap.smapmc._width/2; //为了要让smap.smapmc不管放大还是缩小都永远保持在smap._x=0位置上,所以/自己的一半 smap.smapmc._y&=&smap.smapmc._height/2; //同上,这里是定义Y坐标 onEnterFrame&=&function&()&{ xpos&=&boxmc._x; //不断的把boxmc的X坐标传递给动态文本xpos ypos&=&boxmc._y; //同上,这里是传递Y坐标 if&(Key.isDown(68))&{ &&boxmc._x&+=& &&smap.cir._x&+=&sd/10; &&//boxmc每移动10像素那么小地图里的mc就移动1像素,所以就拿boxmc的速度/10,还是除于10,倍数 } if&(Key.isDown(65))&{ &&boxmc._x&-=& &&smap.cir._x&-=&sd/10; &&//同上 } if&(Key.isDown(87))&{ &&boxmc._y&-=& &&smap.cir._y&-=&sd/10; &&//同上 } if&(Key.isDown(83))&{ &&boxmc._y&+=& &&smap.cir._y&+=&sd/10; &&//同上 } };&  原文件(解压密码:):   如对于本文有任何疑问、意见以及建议,请在文章底部的留言板上留言。或者  更多精彩,尽在天极设计在线!
?? &&阅读关于
的全部文章
(作者:yangling责任编辑:Shiny)
欢迎在新浪微博上关注我们
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
Win10系统在Win8的基础上对界面、特性以及跨平台方面做了诸多优化。
手机整机DIY企业级
pc软件手机软件}

我要回帖

更多关于 直角坐标系中的菱形 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信