查看: 77|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    昨天 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月八日(秋) | 显示全部楼层 |阅读模式
    首先呢,看到了这个帖子:
    http://rpg.blue/thread-220151-1-1.html
    于是在GOOGLE搜罗给全地图截图的方法,找到了:
    http://gameface101.playogame.com/t920-map-screen-shot-rmxp
    (外国RM触手真多 = = b 重现了Tilemap这个内部类)

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

    于是本脚本诞生了 - - 可以看做是那个脚本的MOD。
    1. #==============================================================================# ■ 航拍 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  endend#==============================================================================# ■ 加强部分#------------------------------------------------------------------------------#  对原脚本功能的加强。#==============================================================================class Game_Event < Game_Character  def name    return @event.name  endendclass Sprite_Character < RPG::Sprite  attr_reader   :tile_id                  # 元件 ID  (0 为无效)endclass 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 预告的一个都没更……上次写着暂无支持计划的反而全支持了……)

                 本帖来自P1论坛作者各种压力的猫君,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=220157  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-11 15:51 , Processed in 0.064297 second(s), 42 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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