じ☆ve冰风 发表于 2024-2-24 06:42:07

话说这个ace脚本有没有类似的mv插件?

RUBY 代码
#==============================================================================
# ■ 隐藏房间黑块
#by:VIPArcher ]
#-- 本脚本来自 https://rpg.blue 使用或转载请保留以上信息。
#==============================================================================
# 使用说明:
#· 在需要用黑块遮罩的地图上建一个事件,事件名为 "Black_Room"并且在该事件里注释上
#需要遮罩的范围矩形,例如就为从地图坐标(6,4)开始到坐标(10,17)的矩形
#区域填充上黑色块遮罩掉,当玩家踏入这个矩形时遮罩块消失。查看坐标可以看地图编辑器
#右下角,把要遮罩的区域的左上角的坐标和右下角的坐标带入即可。
#· 指定遮罩块颜色可在设置的第一行注释上
#· 每个遮罩可以指定角色踏入的矩形,规则同上,注释方法为在对应的矩形后面同一行注释
#例如,,未指定踏入区域时默认原矩形为踏入区域
#· 如需注释多个黑块房间请注意换行。
#· 需要用图片做为遮罩块,就像这样备注 ,
#   使用图片做为遮罩块必须设置踏入的矩形。文件放在"\Graphics\Parallaxes"文件夹下
#==============================================================================
$VIPArcherScript ||= {};$VIPArcherScript[:black_room] = 20150211
#-------------------------------------------------------------------------------
module VIPArcher end
#==============================================================================
# ★ 设定部分 ★
#==============================================================================
moduleVIPArcher::BlackRoom
Z = 999                        # 遮罩块的Z值
SW = 0                         # 该开关开启时遮罩块不可见
Edge = -5                      # 遮罩块边距留空的距离
Room_Color = Color.new(0,0,0)# 默认遮罩块填充的颜色
Event_Name = 'Black_Room'      # 设置遮罩块的事件名
Opacity_Speed = 17             # 透明度变化的速度
end
#==============================================================================
# ☆ 设定结束 ☆
#==============================================================================
class Sprite_BlackRoom < Sprite
includeVIPArcher::BlackRoom
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize(rect,check_rect,color,viewport)
    super(viewport)
    @check_rect, @color = check_rect,color
    if rect.is_a?(Rect)
      self.x, self.y, self.z = rect.x * 32, rect.y * 32, Z
      width, height = rect.width - rect.x + 1,rect.height - rect.y + 1
      set_bitmap(width * 32,height * 32)
    elsif rect.is_a?(Array)
      self.x, self.y, self.z = rect * 32, rect * 32, Z
      set_bitmap(rect)
    end
end
#--------------------------------------------------------------------------
# ● 设置Bitmap
#--------------------------------------------------------------------------
def set_bitmap(*args)
    case args.size
    when1
      self.bitmap = Cache.parallax(args)
    when2
      self.bitmap = Bitmap.new(args, args)
      rect = Rect.new(Edge, Edge, args - Edge * 2, args - Edge * 2)
      self.bitmap.fill_rect(rect, @color)
    end
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
    super
    self.bitmap.dispose
end
#--------------------------------------------------------------------------
# ● 位置判定
#--------------------------------------------------------------------------
def character_pos?
    $game_player.x > @check_rect.width|| $game_player.x <@check_rect.x ||
    $game_player.y > @check_rect.height || $game_player.y <@check_rect.y
end
#--------------------------------------------------------------------------
# ● 更新透明度
#--------------------------------------------------------------------------
def update_opacity
    self.opacity += character_pos? ? Opacity_Speed : - Opacity_Speed
    self.opacity = 0if$game_switches
end
#--------------------------------------------------------------------------
# ● 更新位置
#--------------------------------------------------------------------------
def update_position
    self.ox = $game_map.display_x * 32
    self.oy = $game_map.display_y * 32
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
    super
    update_opacity
    update_position
end
end
#-------------------------------------------------------------------------------
class Spriteset_Map
includeVIPArcher::BlackRoom
#--------------------------------------------------------------------------
# ● 生成黑色遮罩块
#--------------------------------------------------------------------------
alias black_room_create_characters create_characters
def create_characters
    black_room_create_characters
    room_sprite_dispose if@black_room_sprites
    @black_room_sprites = []
    $game_map.events.values.eachdo |event|
      if event.instance_variable_get(:@event).name =~ /#{Event_Name}/i
      returnif event.list.nil?
      event.list.each{ |command| get_setup(command)}
      end
    end
end
#--------------------------------------------------------------------------
# ● 获取遮罩块设置
#--------------------------------------------------------------------------
def get_setup(command)
    returnunless command.code == 108or408
    command.parameters.each{|line|get_rect_setup(line);get_bitmap_setup(line)}
end
#--------------------------------------------------------------------------
# ● 备注文件名的设置
#--------------------------------------------------------------------------
def get_bitmap_setup(line)
    if line =~ //i
      rect = [$1,$2.to_i,$3.to_i]
      if line =~ /\[(\d+.*?)\]/; x = $1.split(',')
      check_rect = Rect.new(x.to_i,x.to_i,x.to_i,x.to_i)
      end
      sprite = Sprite_BlackRoom.new(rect,check_rect,@color,@viewport1)
      sprite.opacity = 0unless sprite.character_pos?
      @black_room_sprites.push(sprite)
    end
end
#--------------------------------------------------------------------------
# ● 备注矩形的设置
#--------------------------------------------------------------------------
def get_rect_setup(line)
    @color = eval($1)if line =~ //i
    @color ||= Room_Color
    if line =~ //; x = $1.split(',')
      check_rect = rect = Rect.new(x.to_i,x.to_i,x.to_i,x.to_i)
      if line =~ /\[(\d+.*?)\]/; x = $1.split(',')
      check_rect = Rect.new(x.to_i,x.to_i,x.to_i,x.to_i)
      end
      sprite = Sprite_BlackRoom.new(rect,check_rect,@color,@viewport1)
      sprite.opacity = 0unless sprite.character_pos?
      @black_room_sprites.push(sprite)
    end
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
alias black_room_dispose dispose
def dispose
    black_room_dispose
    room_sprite_dispose
end
#--------------------------------------------------------------------------
# ● 释放遮罩块
#--------------------------------------------------------------------------
def room_sprite_dispose
    @black_room_sprites.each{|sprite| sprite.dispose}
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
alias black_room_update update
def update
    black_room_update
    @black_room_sprites.each{|sprite| sprite.update}
end
end



挺有趣的脚本,就是不知道有没有和它类似的mv插件,如果没有,不知道哪个老师能写一份造福一下mv的使用者们{:2_260:}
             本帖来自P1论坛作者rkjspb,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=394956若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 话说这个ace脚本有没有类似的mv插件?