赞 | 4 |
VIP | 211 |
好人卡 | 175 |
积分 | 7 |
经验 | 48096 |
最后登录 | 2014-1-9 |
在线时间 | 1327 小时 |
Lv2.观梦者 (?????)
- 梦石
- 0
- 星屑
- 728
- 在线时间
- 1327 小时
- 注册时间
- 2011-7-18
- 帖子
- 3184
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
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。- #==============================================================================
- # ■ 航拍 v 1.1 by 各种压力的猫君
- #------------------------------------------------------------------------------
- # 本脚本为 Map Screenshot by mr_wiggles 的汉化&加强,
- # 并未取得原作者允许,并未附加原脚本内容,需要原脚本的支持。
- # 【换言之本脚本不能单独使用】
- #------------------------------------------------------------------------------
- # Map Screenshot by mr_wiggles 的发布网址:
- # http://gameface101.playogame.com/t920-map-screen-shot-rmxp
- #------------------------------------------------------------------------------
- # 使用方法:
- # ① 将 Map Screenshot by mr_wiggles 插入 MAIN 之上;
- # ② 将本脚本插入上面脚本之下,MAIN 之上;
- # ③ 运行游戏,在需要截图的地图上按F6。
- #------------------------------------------------------------------------------
- # 更新记录:
- # 2012-01-21 v 1.1 支持行走图的色相、透明度以及合成方式(加减法)
- # 2012-01-21 v 1.0 修正行走图传送区域错误
- # 2012-01-21 v 0.9 初版
- #------------------------------------------------------------------------------
- # 更新预告:
- # 下一版将加入 设定部分暂未实现的功能
- # 下一版将加入 超过Bitmap上限自动分割的功能
- #==============================================================================
- #==============================================================================
- # ■ 设定部分
- #------------------------------------------------------------------------------
- # 本汉化加强版脚本的设定。
- #==============================================================================
- # 截图类型
- # - 0 仅图块(原脚本类型)
- # - 1 图块 + 事件(事件名称以NPC开头的以及主角除外)
- # - 2 图块 + 全事件(1的基础上包括NPC和主角)
- # - 3 图块 + 远景图 + 雾(暂未实现)
- # - 4 图块 + 远景图 + 雾 + 事件(暂未实现)
- # - 5 图块 + 远景图 + 雾 + 全事件(暂未实现)
- Aerial_Photography_TPYE = 2
- #==============================================================================
- # ■ 汉化部分
- #------------------------------------------------------------------------------
- # 对原脚本提示信息的汉化。
- #==============================================================================
- class Spriteset_Map
- def update
- bit_to_png_up
- if Input.trigger?(Input::F6)
- map_infos = load_data("Data/MapInfos.rxdata")
- bit = @tilemap.bitmap
- exp_time = (bit.height * bit.width) * 0.00000664
- string = "航拍图已创建完成\n" +
- "像素数: #{bit.height * bit.width} \n" +
- "预计输出PNG用时: #{exp_time} 秒\n\n" +
- "按确定键开始输出PNG"
- print("#{string}")
- old_time = Time.now
- bit.make_png("#{map_infos[$game_map.map_id].name}")
- string = "#{map_infos[$game_map.map_id].name}.png 已被创建 \n" +
- "尺寸:宽 #{bit.width}, 高 #{bit.height} \n" +
- "耗时:#{Time.now - old_time} 秒"
- print("#{string}")
- end
- end
- end
- #==============================================================================
- # ■ 加强部分
- #------------------------------------------------------------------------------
- # 对原脚本功能的加强。
- #==============================================================================
- class Game_Event < Game_Character
- def name
- return @event.name
- end
- end
- class Sprite_Character < RPG::Sprite
- attr_reader :tile_id # 元件 ID (0 为无效)
- end
- class Tilemap
- #--------------------------------------------------------------------------
- # * Collect Bitmap
- #--------------------------------------------------------------------------
- def bitmap
- # Creates New Blank Bitmap
- bitmap = Bitmap.new(@layers[0].bitmap.width, @layers[0].bitmap.height)
- # Passes Through All Layers
- for layer in @layers
- bitmap.blt(0, 0, layer.bitmap,
- Rect.new(0, 0, bitmap.width, bitmap.height))
- end
-
- #--------------------------------------------------------------------------
- # 绘制事件行走图
- #--------------------------------------------------------------------------
- if Aerial_Photography_TPYE == 1 or
- Aerial_Photography_TPYE == 2 or
- Aerial_Photography_TPYE == 4 or
- Aerial_Photography_TPYE == 5
- # 生成角色活动块
- character_sprites = []
- for i in $game_map.events.keys.sort
- # 排除NPC
- if Aerial_Photography_TPYE == 1 or
- Aerial_Photography_TPYE == 4
- next if $game_map.events[i].name.slice(/^NPC/)
- end
- sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
- character_sprites.push(sprite)
- end
- # 排除主角
- unless Aerial_Photography_TPYE == 1 or
- Aerial_Photography_TPYE == 4
- character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
- end
- # 绘制
- for npc4map in character_sprites
- rx = npc4map.x + $game_map.display_x / 4 - npc4map.ox
- ry = npc4map.y + $game_map.display_y / 4 - npc4map.oy
- o = npc4map.opacity
- r = npc4map.src_rect
- # 合成方式的处理
- if npc4map.blend_type == 0
- b = npc4map.bitmap.clone
- else
- # 将行走图切一块过来
- sb = Bitmap.new(r.width, r.height)
- sb.blt(0, 0, npc4map.bitmap, r, o)
- # 同样地,将底部图片切一块过来
- ub = Bitmap.new(r.width, r.height)
- sr = Rect.new(rx, ry, r.width, r.height)
- ub.stretch_blt(ub.rect, bitmap, sr)
- # 获取颜色值
- ubc = []
- sbc = []
- bc = []
- for y in 0..(ub.height - 1)
- for x in 0..(ub.width - 1)
- ubc.push ub.get_pixel(x, y)
- sbc.push sb.get_pixel(x, y)
- end
- end
- @tc = Color.new(0, 0, 0)
- # 生成bitmap
- b = Bitmap.new(r.width, r.height)
- for y in 0..(b.height - 1)
- for x in 0..(b.width - 1)
- i = x + y * b.width
- uc = ubc[i]
- sc = sbc[i]
- mc = mix_color(uc, sc, npc4map.blend_type)
- b.set_pixel(x, y, mc)
- end
- end
- r = Rect.new(0, 0, r.width, r.height)
- end
- # 若不是地图原件,采用行走图绘制方式
- if npc4map.tile_id == 0
- bitmap.blt(rx, ry, b, r, o)
- else
- bitmap.blt(rx, ry, b, Rect.new(0, 0, 32, 32), o)
- end
- end
- end
- #--------------------------------------------------------------------------
- # Return Bitmap
- return bitmap
- end
- #--------------------------------------------------------------------------
- def mix_color(c1, c2, bt)
- return c1 if c2.alpha == 0
- case bt
- when 1 # 加法
- tc_r = c1.red + c2.red
- tc_g = c1.green + c2.green
- tc_b = c1.blue + c2.blue
- tc_a = c1.alpha + c2.alpha
- when 2 # 减法
- tc_r = (c1.red - c2.red).abs
- tc_g = (c1.green - c2.green).abs
- tc_b = (c1.blue - c2.blue).abs
- tc_a = [c1.alpha, c2.alpha].max
- end
- mc = [tc_r, tc_g, tc_b, tc_a]
- @tc.set(mc[0], mc[1], mc[2], mc[3])
- return @tc
- end
- #--------------------------------------------------------------------------
- end
复制代码
地图大赛的时候这个脚本会很好用吧……
更新1.1:支持色相、透明度、以及加法/减法混合
(我到底在干嘛 = = b 预告的一个都没更……上次写着暂无支持计划的反而全支持了……) |
评分
-
查看全部评分
|