了解编辑器 原图 导入到地图编辑器后 比较可以发现,一开始多出了一块.docxVIP

了解编辑器 原图 导入到地图编辑器后 比较可以发现,一开始多出了一块.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
了解编辑器 原图 导入到地图编辑器后 比较可以发现,一开始多出了一块

了解编辑器原图导入到地图编辑器后比较可以发现,一开始多出了一块。制作地图在编辑器内绘制地图如下(5*5):导出地图数组形式的编码数据如下:const short snow_map0[5][5] = {{ 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_map0[5][5] = {{ 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,再套用公式求。好了,原理明白后下面来看看实际操作:先画第一个小格子相对应的读取数组的第一个元素——int number = snow_map0[0][0] ;设置裁剪区——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个地图格,应重新定义裁剪区位置。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.

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档