设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3678|回复: 11
打印 上一主题 下一主题

[已经解决] 绘制地图的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
跳转到指定楼层
1
发表于 2013-6-26 09:10:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 爆发的妞 于 2013-6-26 14:14 编辑

小弟遇到一个地图绘制的问题,特来请教。
@eve592370698 @美丽晨露 @SuperMario
问题描述如下:
我看了Tilemap的第三方实现的方式, 里面是@layers包含三成的逻辑地图精灵,
其中绘制普通图块和绘制自动图块方法,在下面
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # * Draw Tile
  3.   #--------------------------------------------------------------------------
  4.   def draw_tile(x, y, z, id)
  5.     rect = Rect.new((id - 384) % 8 * 32, (id - 384) / 8 * 32, 32, 32)
  6.     x *= @tilesize
  7.     y *= @tilesize
  8.     if @tile_width == 32 && @tile_height == 32
  9.       @layers[z].bitmap.blt(x, y, @tileset, rect)
  10.     else
  11.       dest_rect = Rect.new(x, y, @tilesize, @tilesize)
  12.       @layers[z].bitmap.stretch_blt(dest_rect, @tileset, rect)
  13.     end
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # * Draw Auto-Tile
  17.   #--------------------------------------------------------------------------
  18.   def draw_autotile(x, y, z, tile_id)
  19.     # Gets Autotile Filename
  20.     autotile_num = tile_id / 48 - 1
  21.     # Reconfigure Tile ID
  22.     tile_id %= 48
  23.     # Gets Generated Autotile Bitmap Section
  24.     bitmap = RPG::Cache.autotile_tile(autotiles[autotile_num], tile_id, @hue)
  25.  
  26.     # Calculates Tile Coordinates
  27.     x *= @tilesize
  28.     y *= @tilesize
  29.     @layers[z].bitmap.blt(x, y, bitmap, Rect.new(0, 0, 32, 32))
  30.   end


现在我的问题是:精灵中的图片对应的区域会更新, 那么脏区域呢(即是老的数据)
还在,那么三层依次绘制的话,那么上层的脏区域不就绘制出来了吗?不甚解, 特来
求高人指点。

PS:
我自己实现的,单个精灵的情况,移动图块显示正常, 当使用3层的时候,
最上层就有了脏数据,显示了出来。 仔细看第二张图的上面部分。  

device-2013-06-26-103631.png (219.49 KB, 下载次数: 15)

device-2013-06-26-103631.png

device-2013-06-26-103935.png (200.99 KB, 下载次数: 12)

device-2013-06-26-103935.png
rm for android (原生开发)

Lv2.观梦者

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
帖子
6474
2
发表于 2013-6-26 14:17:16 | 只看该作者
请问您所说的【脏数据】指的是啥啊?
潜水,专心忙活三次元工作了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
3
 楼主| 发表于 2013-6-26 14:41:29 | 只看该作者
eve592370698 发表于 2013-6-26 14:17
请问您所说的【脏数据】指的是啥啊?

就是旧数据,下图表示,由于地图绘制次数的原因, 我使用了
卡马克算法, 所以不是每次图片都清除的。 当左边有新数据的
时候,可能右边的旧的数据还在。 如果旧的数据绘制出来,就
会存在问题了。

无标题.png (11.71 KB, 下载次数: 13)

无标题.png
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
687
在线时间
791 小时
注册时间
2011-10-20
帖子
2394

开拓者

4
发表于 2013-6-26 15:02:28 | 只看该作者
这是触屏游戏么- -,恕我无能看不懂。。。可以GC.start看看(garbage collect)
欢迎点此进入我的egames.wink.ws,有RMQQ堂等

[url=http://rpg.blue/thread-317273-1-1.html]短篇八-赶选

http://yun.baidu.com/share/link?shareid=2158225779&uk=169642147&third=0


历险ARPG赢回你的疆域新的战斗模式?…………点击这里:[宋乱贼狂 for QQ堂]
http://rpg.blue/group-368-1.html
programing ....?
[url=http://rpg.blue/thrd-234658-1-1.html]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
5
 楼主| 发表于 2013-6-26 15:07:09 | 只看该作者
本帖最后由 爆发的妞 于 2013-6-26 15:09 编辑
end55rpg 发表于 2013-6-26 15:02
这是触屏游戏么- -,恕我无能看不懂。。。可以GC.start看看(garbage collect)


恩。是触摸的。是我android的仿照rmxp原生开发的。
如果只绘制在一层上面是没有问题的。 但是没有遮罩主角的效果了。
多层就产生了这个问题。

点评

多层会怎样?角色移动后图块出现问题?》  发表于 2013-6-26 15:13
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

6
发表于 2013-6-26 15:19:40 | 只看该作者
爆发的妞 发表于 2013-6-26 15:07
恩。是触摸的。是我android的仿照rmxp原生开发的。
如果只绘制在一层上面是没有问题的。 但是没有遮罩主 ...

如果一层没问题,多层应该也不应该产生这样的问题啊,每层都是调用相同的处理过程吧

在需要更换的区域重绘新地图,然后重新拼接
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
7
 楼主| 发表于 2013-6-26 15:35:07 | 只看该作者
亿万星辰 发表于 2013-6-26 15:19
如果一层没问题,多层应该也不应该产生这样的问题啊,每层都是调用相同的处理过程吧

在需要更换的区域重 ...

Tilemap 的三层是逻辑三层, 不是地图的三层。
看下面的一段代码
RUBY 代码复制
  1. # Passes Through All Priorities
  2.             for p in 0..5
  3.               # Skip If Priority Doesn't Match
  4.               next unless p == @priorities[id]
  5.               # Cap Priority to Layer 3
  6.               p = 2 if p > 2
  7.               # Draw Tile
  8.               id < 384 ? draw_autotile(x, y, p, id) : draw_tile(x, y, p, id)
  9.             end

如果优先级p=0 就绘制在第一层, 如果p=1就绘制在第二层, 如果
p>=2就绘制在第三层。
当我的逻辑层只有1层的时候, 地图的三层都绘制在一个逻辑层中,
是没有透明图块的, 这样就不存在旧的数据了。 显示正常, 就是没有
遮挡的效果了, 有的优先级显示在人物上的, 也遮挡不了了。
如果有逻辑三层的话, 逻辑1层是没问题的, 基本上都有图块的,不存在
透明图块的(即tile_id=0的图块,地图的第一个图块),但是如果有优先级
>=1 的,就是绘制在逻辑的第二层或第三层的时候, 当移动的时候, 由于卡马克
算法, 第二层和第三层里面的图片, 只更新新的数据, 旧的数据还在。
不知道我的描述是否清晰。

点评

暂时想不出什么问题~这个都东西我没有实际写过,可能理解不到你现在出问题的这个层面上。  发表于 2013-6-26 15:46
rm for android (原生开发)
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

8
发表于 2013-6-26 17:04:56 | 只看该作者
好吧,表示我看不懂这个脚本
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv1.梦旅人

炎发灼眼的讨伐者

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
帖子
904
9
发表于 2013-6-27 22:18:48 | 只看该作者
构成元件地图的各精灵的 Z 座标是特定的固定值。

优先级为 0 的地图元件的 Z 座标必定是 0。
画面上端位置的优先级为 1 的地图元件的 Z 座标是 64。
优先级每增加 1,Z 座标增加 32。
元件地图纵向滚动的话,Z 座标也一起变化。
地图上显示的人物 Z 座标,必须先决定地图元件的 Z 座标。


文档的描述

点评

thanks  发表于 2013-6-28 09:13

评分

参与人数 1星屑 +140 收起 理由
弗雷德 + 140 惊现夏娜!

查看全部评分

RMXP&amp;RMVX通用Web化完成- -|||
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
帖子
92
10
 楼主| 发表于 2013-6-28 08:55:18 | 只看该作者
灼眼的夏娜 发表于 2013-6-27 22:18
构成元件地图的各精灵的 Z 座标是特定的固定值。

优先级为 0 的地图元件的 Z 座标必定是 0。

元件地图纵向滚动的话,Z 座标也一起变化。 纵向的话, 应该是y坐标移动吧。 不知道你这个文档出处在哪, 我也想看看。 谢谢你的回答。

点评

RMXP默认帮助手册 F1里的~  发表于 2013-6-28 09:08
rm for android (原生开发)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-1 10:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表