查看: 4887|回复: 11

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

[复制链接]
梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
发表于 2013-6-26 09:10:23 | 显示全部楼层 |阅读模式

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

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

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

小弟遇到一个地图绘制的问题,特来请教。
@eve592370698 @美丽晨露 @SuperMario
问题描述如下:
我看了Tilemap的第三方实现的方式, 里面是@layers包含三成的逻辑地图精灵,
其中绘制普通图块和绘制自动图块方法,在下面
[pre lang="ruby" line="1"]  #--------------------------------------------------------------------------
  # * Draw Tile
  #--------------------------------------------------------------------------
  def draw_tile(x, y, z, id)
    rect = Rect.new((id - 384) % 8 * 32, (id - 384) / 8 * 32, 32, 32)
    x *= @tilesize
    y *= @tilesize
    if @tile_width == 32 && @tile_height == 32
      @layers[z].bitmap.blt(x, y, @tileset, rect)
    else
      dest_rect = Rect.new(x, y, @tilesize, @tilesize)
      @layers[z].bitmap.stretch_blt(dest_rect, @tileset, rect)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Auto-Tile
  #--------------------------------------------------------------------------
  def draw_autotile(x, y, z, tile_id)
    # Gets Autotile Filename
    autotile_num = tile_id / 48 - 1
    # Reconfigure Tile ID
    tile_id %= 48
    # Gets Generated Autotile Bitmap Section
    bitmap = RPG::Cache.autotile_tile(autotiles[autotile_num], tile_id, @hue)
   
    # Calculates Tile Coordinates
    x *= @tilesize
    y *= @tilesize
    @layers[z].bitmap.blt(x, y, bitmap, Rect.new(0, 0, 32, 32))
  end[/pre]

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

PS:
我自己实现的,单个精灵的情况,移动图块显示正常, 当使用3层的时候,
最上层就有了脏数据,显示了出来。 仔细看第二张图的上面部分。  
device-2013-06-26-103631.png
device-2013-06-26-103935.png
rm for android (原生开发)

梦石
0
星屑
432
在线时间
4175 小时
注册时间
2010-6-26
回帖
6276
发表于 2013-6-26 14:17:16 | 显示全部楼层
请问您所说的【脏数据】指的是啥啊?
潜水,专心忙活三次元工作了……
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 2013-6-26 14:41:29 | 显示全部楼层
eve592370698 发表于 2013-6-26 14:17
请问您所说的【脏数据】指的是啥啊?

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

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

使用道具 举报

梦石
0
星屑
752
在线时间
800 小时
注册时间
2011-10-20
回帖
2257

开拓者

发表于 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]
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 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 (原生开发)
回复

使用道具 举报

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

贵宾

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

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

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

使用道具 举报

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

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

Tilemap 的三层是逻辑三层, 不是地图的三层。
看下面的一段代码
[pre lang="ruby" line="1"]            # Passes Through All Priorities
            for p in 0..5
              # Skip If Priority Doesn't Match
              next unless p == @priorities[id]
              # Cap Priority to Layer 3
              p = 2 if p > 2
              # Draw Tile
              id < 384 ? draw_autotile(x, y, p, id) : draw_tile(x, y, p, id)
            end[/pre]
如果优先级p=0 就绘制在第一层, 如果p=1就绘制在第二层, 如果
p>=2就绘制在第三层。
当我的逻辑层只有1层的时候, 地图的三层都绘制在一个逻辑层中,
是没有透明图块的, 这样就不存在旧的数据了。 显示正常, 就是没有
遮挡的效果了, 有的优先级显示在人物上的, 也遮挡不了了。
如果有逻辑三层的话, 逻辑1层是没问题的, 基本上都有图块的,不存在
透明图块的(即tile_id=0的图块,地图的第一个图块),但是如果有优先级
>=1 的,就是绘制在逻辑的第二层或第三层的时候, 当移动的时候, 由于卡马克
算法, 第二层和第三层里面的图片, 只更新新的数据, 旧的数据还在。
不知道我的描述是否清晰。

点评

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

使用道具 举报

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

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

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

回复

使用道具 举报

炎发灼眼的讨伐

梦石
0
星屑
50
在线时间
1707 小时
注册时间
2007-8-4
回帖
894
发表于 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化完成- -|||
回复

使用道具 举报

梦石
0
星屑
50
在线时间
142 小时
注册时间
2013-4-13
回帖
82
 楼主| 发表于 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 (原生开发)
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部