了解编辑器 原图 导入到地图编辑器后 比较可以发现一开始多出了一块.docx_第1页
了解编辑器 原图 导入到地图编辑器后 比较可以发现一开始多出了一块.docx_第2页
了解编辑器 原图 导入到地图编辑器后 比较可以发现一开始多出了一块.docx_第3页
了解编辑器 原图 导入到地图编辑器后 比较可以发现一开始多出了一块.docx_第4页
了解编辑器 原图 导入到地图编辑器后 比较可以发现一开始多出了一块.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 了解编辑器原图导入到地图编辑器后比较可以发现,一开始多出了一块。2. 制作地图在编辑器内绘制地图如下(5*5):导出地图数组形式的编码数据如下:const short snow_map055 = 31, 0, 0, 0, 0 , 0, 0, 7, 0, 28 , 0, 32, 15, 20, 0 , 0, 18, 20, 32, 0 , 0, 0, 0, 0, 0 ;我们现在给原图和地图编辑器中显示的图片编上号,以便于比较。编号从0开始,因为地图编辑器默认是从0开始的,同时从0开始还有个好处,就是在后来计算相对于裁剪区的偏移量的时候刚好对上,因为Canvas的坐标原点为(0,0)啊原图编号后:地图编辑器中的显示:可见其相同图块的编码相差1。在设置裁剪区后要画图时是要求得准备要画上的方格所在的行和列的,以便使其相对于裁剪区进行偏移。例如:开始设定裁剪区在(0,0),大小为每格图的大小(32*32)。要把那朵花画上去;我们去原图找到它,编号为30;于是便可以根据以下公式计算出它所在的行和列:所在行数 h = 编号 / 总列数;所在列数 l = 编号 % 总列数;所以,h = 30 / 8 = 3 ;l = 30 % 8 = 6 ;确实也如此:为什么要从0开始?和上面说到的原因一样,Canvas的坐标是(0,0)开始的,而且记录地图的数组也是按0行0列开始算的。如果这里不从0开始编号,到后来计算原图相对裁剪区的位移时会有相差1的错误。现在再来看导出的数组:const short snow_map055 = 31, 0, 0, 0, 0 , 0, 0, 7, 0, 28 , 0, 32, 15, 20, 0 , 0, 18, 20, 32, 0 , 0, 0, 0, 0, 0 ;第一个为31,我们编辑的地图第一个画的正是那朵花。所以要根据地图编辑器的数据求得对应图块在原图上的实际位置还得先减1,再套用公式求。好了,原理明白后下面来看看实际操作:1. 先画第一个小格子相对应的读取数组的第一个元素int number = snow_map000 ;设置裁剪区setClip(0, 0, 32, 32) ;找到编号31格子在原图的行和列h = (number-1) / 8 ;l = (number-1) / 8 ;把原图相对于裁剪区坐标进行移位,使对应的格子落到裁剪区可以看出,应该先左移6格长度(32*6),再上移3格高度(32*3),便可以。也就是要左移所在列l*格宽个单位,再上移所在行h*格高个单位;moveX = l * 32;moveY = h*32;注意:所有这些移动都是相对于裁剪区的(0,0);所以最终把图片的左上角移到:photo_X = 0 moveX ;photo_Y = 0 moveY ;计算好坐标,现在就把图片画上:Image image = Image.createImage(“/snow.png”); / 导入原图g.drawImage(image, photo_X, photo_Y, Graphics.TOP|Graphics.LEFT);/把坐标定在左上2. 以此类推,画出余下地图画第2个地图格,应重新定义裁剪区位置。setClip(32*1, 32*0, 32, 32);再看一下画第一个时的设定 setClip(0, 0, 32, 32) ;其实可以写为: setClip(32*0, 32*0, 32, 32); 那就可以推算到,画第3格时是2,然后是3,4 再看看数组,所读区数据的下标也正好是0,1,2,3,4 再来看画图,因为其坐标我们是相对应于裁剪区的坐标求出的,所以可以写成双层for循环:for(int i=0; i5; i+) for(int j=0; j5; j+)g.setClip(32*j, 32*i, 32, 32);moveX = 32*j 32*l ; / 32*(j - l)moveY = 32*i 32*h ; / 32*(i - h)g.drawImage(image, moveX, moveY, Graphics.TOP|Graphics.LEFT) ;第2格是编号0,是地图编辑器自动添加的一个空白区,原图上没有对应的区域,应该留空。可以用判断语句使其跳过:if ( snow_map0 i j ) / 不做处理else / 画上其实不用也是一样的,应为3.归纳出一条通式: for(int i=0; i5; i+) y = i*mapH; for(int j=0; j5; j+) x = j*mapW;bg.setClip(x, y, mapW, m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论