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

Project1

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

[原创发布] 航拍 v 1.1 【地图整体截图并输出为PNG】

[复制链接]

Lv2.观梦者

(?????)

梦石
0
星屑
731
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

跳转到指定楼层
1
发表于 2012-1-21 05:37:44 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 各种压力的猫君 于 2012-1-21 19:38 编辑

首先呢,看到了这个帖子:
http://rpg.blue/thread-220151-1-1.html
于是在GOOGLE搜罗给全地图截图的方法,找到了:
http://gameface101.playogame.com/t920-map-screen-shot-rmxp
(外国RM触手真多 = = b 重现了Tilemap这个内部类)

发现这货只能截(其实用“截”并不准确,实际上它是“画”的)到地图元件,截不到事件。

于是本脚本诞生了 - - 可以看做是那个脚本的MOD。
  1. #==============================================================================
  2. # ■ 航拍 v 1.1 by 各种压力的猫君
  3. #------------------------------------------------------------------------------
  4. #   本脚本为 Map Screenshot by mr_wiggles 的汉化&加强,
  5. #   并未取得原作者允许,并未附加原脚本内容,需要原脚本的支持。
  6. #   【换言之本脚本不能单独使用】
  7. #------------------------------------------------------------------------------
  8. #   Map Screenshot by mr_wiggles 的发布网址:
  9. #   http://gameface101.playogame.com/t920-map-screen-shot-rmxp
  10. #------------------------------------------------------------------------------
  11. #   使用方法:
  12. #   ① 将 Map Screenshot by mr_wiggles 插入 MAIN 之上;
  13. #   ② 将本脚本插入上面脚本之下,MAIN 之上;
  14. #   ③ 运行游戏,在需要截图的地图上按F6。
  15. #------------------------------------------------------------------------------
  16. #   更新记录:
  17. #   2012-01-21 v 1.1 支持行走图的色相、透明度以及合成方式(加减法)
  18. #   2012-01-21 v 1.0 修正行走图传送区域错误
  19. #   2012-01-21 v 0.9 初版
  20. #------------------------------------------------------------------------------
  21. #   更新预告:
  22. #   下一版将加入 设定部分暂未实现的功能
  23. #   下一版将加入 超过Bitmap上限自动分割的功能
  24. #==============================================================================

  25. #==============================================================================
  26. # ■ 设定部分
  27. #------------------------------------------------------------------------------
  28. #  本汉化加强版脚本的设定。
  29. #==============================================================================

  30. # 截图类型
  31. #  - 0 仅图块(原脚本类型)
  32. #  - 1 图块 + 事件(事件名称以NPC开头的以及主角除外)
  33. #  - 2 图块 + 全事件(1的基础上包括NPC和主角)
  34. #  - 3 图块 + 远景图 + 雾(暂未实现)
  35. #  - 4 图块 + 远景图 + 雾 + 事件(暂未实现)
  36. #  - 5 图块 + 远景图 + 雾 + 全事件(暂未实现)

  37. Aerial_Photography_TPYE = 2

  38. #==============================================================================
  39. # ■ 汉化部分
  40. #------------------------------------------------------------------------------
  41. #  对原脚本提示信息的汉化。
  42. #==============================================================================
  43. class Spriteset_Map
  44.   def update
  45.     bit_to_png_up
  46.     if Input.trigger?(Input::F6)
  47.       map_infos = load_data("Data/MapInfos.rxdata")
  48.       bit = @tilemap.bitmap
  49.       exp_time = (bit.height * bit.width) * 0.00000664
  50.       string = "航拍图已创建完成\n" +
  51.               "像素数: #{bit.height * bit.width} \n" +
  52.               "预计输出PNG用时: #{exp_time} 秒\n\n" +
  53.               "按确定键开始输出PNG"
  54.       print("#{string}")
  55.       old_time = Time.now
  56.       bit.make_png("#{map_infos[$game_map.map_id].name}")
  57.       string = "#{map_infos[$game_map.map_id].name}.png 已被创建 \n" +
  58.               "尺寸:宽 #{bit.width}, 高 #{bit.height} \n" +
  59.               "耗时:#{Time.now - old_time} 秒"
  60.       print("#{string}")
  61.     end
  62.   end
  63. end

  64. #==============================================================================
  65. # ■ 加强部分
  66. #------------------------------------------------------------------------------
  67. #  对原脚本功能的加强。
  68. #==============================================================================

  69. class Game_Event < Game_Character
  70.   def name
  71.     return @event.name
  72.   end
  73. end

  74. class Sprite_Character < RPG::Sprite
  75.   attr_reader   :tile_id                  # 元件 ID  (0 为无效)
  76. end

  77. class Tilemap
  78.   #--------------------------------------------------------------------------
  79.   # * Collect Bitmap
  80.   #--------------------------------------------------------------------------
  81.   def bitmap
  82.     # Creates New Blank Bitmap
  83.     bitmap = Bitmap.new(@layers[0].bitmap.width, @layers[0].bitmap.height)
  84.     # Passes Through All Layers
  85.     for layer in @layers
  86.       bitmap.blt(0, 0, layer.bitmap,
  87.         Rect.new(0, 0, bitmap.width, bitmap.height))
  88.     end
  89.       
  90.   #--------------------------------------------------------------------------
  91.   # 绘制事件行走图
  92.   #--------------------------------------------------------------------------
  93.   if Aerial_Photography_TPYE == 1 or
  94.      Aerial_Photography_TPYE == 2 or
  95.      Aerial_Photography_TPYE == 4 or
  96.      Aerial_Photography_TPYE == 5
  97.     # 生成角色活动块
  98.     character_sprites = []
  99.     for i in $game_map.events.keys.sort
  100.       # 排除NPC
  101.       if Aerial_Photography_TPYE == 1 or
  102.          Aerial_Photography_TPYE == 4
  103.         next if $game_map.events[i].name.slice(/^NPC/)
  104.       end
  105.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  106.       character_sprites.push(sprite)
  107.     end
  108.     # 排除主角
  109.     unless Aerial_Photography_TPYE == 1 or
  110.            Aerial_Photography_TPYE == 4
  111.       character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  112.     end
  113.     # 绘制
  114.     for npc4map in character_sprites
  115.       rx = npc4map.x + $game_map.display_x / 4 - npc4map.ox
  116.       ry = npc4map.y + $game_map.display_y / 4 - npc4map.oy
  117.       o = npc4map.opacity
  118.       r = npc4map.src_rect
  119.       # 合成方式的处理
  120.       if npc4map.blend_type == 0
  121.         b = npc4map.bitmap.clone
  122.       else
  123.         # 将行走图切一块过来
  124.         sb = Bitmap.new(r.width, r.height)
  125.         sb.blt(0, 0, npc4map.bitmap, r, o)
  126.         # 同样地,将底部图片切一块过来
  127.         ub = Bitmap.new(r.width, r.height)
  128.         sr = Rect.new(rx, ry, r.width, r.height)
  129.         ub.stretch_blt(ub.rect, bitmap, sr)
  130.         # 获取颜色值
  131.         ubc = []
  132.         sbc = []
  133.         bc  = []
  134.         for y in 0..(ub.height - 1)
  135.           for x in 0..(ub.width - 1)
  136.             ubc.push ub.get_pixel(x, y)
  137.             sbc.push sb.get_pixel(x, y)
  138.           end
  139.         end
  140.         @tc = Color.new(0, 0, 0)
  141.         # 生成bitmap
  142.         b = Bitmap.new(r.width, r.height)
  143.         for y in 0..(b.height - 1)
  144.           for x in 0..(b.width - 1)
  145.             i = x + y * b.width
  146.             uc = ubc[i]
  147.             sc = sbc[i]
  148.             mc = mix_color(uc, sc, npc4map.blend_type)
  149.             b.set_pixel(x, y, mc)
  150.           end
  151.         end
  152.         r = Rect.new(0, 0, r.width, r.height)
  153.       end
  154.       # 若不是地图原件,采用行走图绘制方式
  155.       if npc4map.tile_id == 0
  156.         bitmap.blt(rx, ry, b, r, o)
  157.       else
  158.         bitmap.blt(rx, ry, b, Rect.new(0, 0, 32, 32), o)
  159.       end
  160.     end
  161.   end
  162.   #--------------------------------------------------------------------------
  163.     # Return Bitmap
  164.     return bitmap
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   def mix_color(c1, c2, bt)
  168.     return c1 if c2.alpha == 0
  169.     case bt
  170.     when 1 # 加法
  171.       tc_r = c1.red   + c2.red
  172.       tc_g = c1.green + c2.green
  173.       tc_b = c1.blue  + c2.blue
  174.       tc_a = c1.alpha + c2.alpha
  175.     when 2 # 减法
  176.       tc_r = (c1.red   - c2.red).abs
  177.       tc_g = (c1.green - c2.green).abs
  178.       tc_b = (c1.blue  - c2.blue).abs
  179.       tc_a = [c1.alpha, c2.alpha].max
  180.     end
  181.     mc = [tc_r, tc_g, tc_b, tc_a]
  182.     @tc.set(mc[0], mc[1], mc[2], mc[3])
  183.     return @tc
  184.   end
  185.   #--------------------------------------------------------------------------
  186. end
复制代码


地图大赛的时候这个脚本会很好用吧……

更新1.1:支持色相、透明度、以及加法/减法混合
(我到底在干嘛 = = b 预告的一个都没更……上次写着暂无支持计划的反而全支持了……)

点评

话说有VX的吗!VX的吗!有给我一个谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢....  发表于 2013-12-8 16:19
之前想弄这种东西来着,不过没有能力,猫菌弄出来真是太好了><p.s.:糖貌似都在某个群组里扔没了  发表于 2012-1-21 10:11
猫娘辛苦了~~午夜党塞口糖+_+  发表于 2012-1-21 05:45

评分

参与人数 3星屑 +400 收起 理由
凌童鞋 + 158 凑整。。
orzfly + 42 塞糖
七夕小雨 + 200 塞糖

查看全部评分

Lv1.梦旅人

梦石
0
星屑
226
在线时间
28 小时
注册时间
2019-10-9
帖子
20
9
发表于 2019-10-10 10:18:59 | 只看该作者
这个mv可以用的嘛

点评

这个脚本诞生的时候MV还没出世呢=.=  发表于 2019-10-10 11:47
大哥这是2012的貼子, 被你挖上來了,这是XP区 要MV腳本你去MV区  发表于 2019-10-10 11:38
当然不行  发表于 2019-10-10 11:36
有没有互相鞭策的小伙伴!~
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

8
发表于 2012-1-21 20:07:40 | 只看该作者
本帖最后由 yangff 于 2012-1-21 20:09 编辑

我写过。lz等等
http://rpg.blue/forum.php?mod=viewthread&tid=100487
就是这个

点评

↓ "下" -> "写"  发表于 2012-1-21 20:32
下这个脚本主要考虑到有些地图元件是以元件绘制的,原脚本会显示不全。  发表于 2012-1-21 20:31
Vocaloid in China 么……  发表于 2012-1-21 20:28
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
122
在线时间
1740 小时
注册时间
2009-7-12
帖子
443
7
发表于 2012-1-21 19:57:17 | 只看该作者
噗…那個Screen Shot我之前才在地圖區發過XDD
不過他不能後台就是了,不知道這個可不可以@@

点评

不能后台。其实主要耗时不是生成图片,而是输出PNG。用柳大给我的某DLL可以秒出我会乱说 XD  发表于 2012-1-21 20:35

那啥…我以為用戶名只是通行碼…
所以我暱稱不是serena718哈,是月見斐夜
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
731
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

6
 楼主| 发表于 2012-1-21 19:43:10 | 只看该作者
本帖最后由 各种压力的猫君 于 2012-1-21 19:47 编辑

更新 v 1.1 了,自顶一下。

忽然想到一个邪恶用途:
①用RMXP绘制三图层式的地图
②分别每图层输出PNG(考虑加入分图层输出功能~)
③扔到ACE当远景图并用图片显示遮挡层

哇咔咔ACE的脑残地图绘制方式去屎吧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
帖子
941
5
发表于 2012-1-21 11:13:44 | 只看该作者
截完後...圖在那?!!!!!?

点评

在游戏根目录,文件名就是你设置的地图名。  发表于 2012-1-21 17:03
回复 支持 反对

使用道具 举报

Lv4.逐梦者

永久原子

梦石
18
星屑
175
在线时间
2054 小时
注册时间
2010-10-25
帖子
4226

开拓者

4
发表于 2012-1-21 10:00:09 | 只看该作者
哇!一堆英文叫我如何是好?不过截不到事件确实不错,谢谢猫君的脚本。

点评

网站....................  发表于 2012-1-21 13:44
哪有英文= =?  发表于 2012-1-21 10:11
人不在了,有事烧纸。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
帖子
941
3
发表于 2012-1-21 07:55:07 手机端发表。 | 只看该作者
即是对地图整体截图,而且可以任意繪画,修改再變回地图?如是的,大神也!

点评

只能截图……如果你想随意修改之后变回地图的话,可以用远景图(但是在RMXP编辑器是看不到的)  发表于 2012-1-21 19:41
回复 支持 反对

使用道具 举报

Lv3.寻梦者

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
帖子
4128

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

2
发表于 2012-1-21 05:48:12 | 只看该作者
其实雾行图和远景猫君都可以很容易搞定的吧,期待更新

点评

bitmap有个要命的5000*5000限制……地图大赛那种等级的地图很容易就超出界限了……这个必须解决,其他都次要(哎?我怎么还没睡 = = b 滚床去了)  发表于 2012-1-21 06:32
恩,我觉得这就是对脚本功能完美的一种追求嘛~其实真的已经很好啦 ~\(≧▽≦)/~  发表于 2012-1-21 05:52
其实我在想雾和远景真的有必要么 = = b 远景可能有必要,雾真心觉得没多少用……  发表于 2012-1-21 05:49
[url=http://weibo.com/2238291690?s=6uyXnP]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 03:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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