66RPG为《RPG制作大师》系列工具的游戏作者提供交流环境、技术教
学、大量游戏制作素材、以及游戏发布平台,以推动国内同人、原创游 戏的发展为己任。欢迎对自己制作游戏有兴趣的朋友们来玩~

66RPG充值页面

最近更新记录

  • 2012-05-17 : 背景、立绘素材图册制作完成
  • 2012-05-12 : 将40多个背景、立绘素材加入了组合预览图,便于查看
  • 2012-05-11 : 新增20个素材资源
  • 2012-05-10 : 恢复15篇文章资源

66RPG 站内搜索

精确(推荐) 全文

本站收集内容是为了便于让游戏制作爱好者互相学习与交流,所有内容的版权与著作权均归原作者/公司所有。如进行有可能引起纠纷的使用,建议您先与原作方沟通。
[PS0]线形视野系统
更新:2012-02-09 11:28:07 | 点击量:1286
[PS0]线形视野系统
脚本作者:各种压力的猫君
版本更新:PS0-20120129-XDE
适用版本:RPG Maker VX Ace
移植自XP的线形视野系统,适合做暗杀类游戏

脚本说明
移植自XP脚本 >Leyeshot2.1线形视野系统,做暗杀类游戏的葵花宝典! By 流川枫

想测试效果的话,随便弄个范例地图,建个NPC,用事件脚本

$game_map.events[@event_id].le_seeing = true
$game_map.events[@event_id].le_show = true

就能看到效果了。
1

脚本内容

#encoding:utf-8
#==============================================================================
# [PS0]线形视野系统
#      Linetype_Eyeshot
#------------------------------------------------------------------------------
#     非常强大、高效率的NPC视野系统
#==============================================================================
# [更新记录]
#    - 2012.01.29 By 各种压力的猫君
#      * 移植至RGSS3,遵循PS0协议
#    - 2008.11.03 By LCF(流川枫 QQ:350773875)
#      * 蓝本(LCF_Leyeshot XP 2.1)
#------------------------------------------------------------------------------
# [使用方法]
#    - 将本脚本插入到MAIN以上
#    - 当NPC看到主角时,会打开自身的独立开关D
#------------------------------------------------------------------------------
# [使用说明]
#    - 在需要开启视野系统的NPC身上执行以下脚本至少一次即可
#        以下内容纯移植原脚本,下一版加入简化输入功能。
#    - $game_map.events[@event_id].le_seeing = true/false
#        该值为true表示该NPC视野开启,否则未开启,默认为false。
#    - $game_map.events[@event_id].le_clairv = true/false
#        该值为true表示该NPC视野不扫描视线障碍,否则扫描,默认为false。
#    - $game_map.events[@event_id].le_show = true/false
#        该值为true表示显示该NPC的视线,否则不显示,默认为false。
#    - $game_map.events[@event_id].le_side = true/false
#        该值为true表示该NPC可以看到侧面一格内的人,否则由斜率决定,默认为true。
#    - $game_map.events[@event_id].le_circle = true/false
#        该值为true表示该NPC为环绕视野,否则不能看见自己的身后,默认为false。
#    - $game_map.events[@event_id].le_deepness = 深度值
#        该值代表视野的能见度,默认为7。
#    - $game_map.events[@event_id].le_slope = 斜率值
#        该值代表视野的斜率,默认为1.0。
#    - $game_map.events[@event_id].le_color = 颜色值
#        该值代表视线显示的颜色,默认为0xf0。
#==============================================================================
$_PS0 = {} if $_PS0 == nil  
$_PS0["Linetype_Eyeshot"] = 20120129
#==============================================================================
# [PS0] 通用配置模块  
#==============================================================================
module PS0
  module Linetype_Eyeshot
    
    # 初始版本,仅移植为Ace可用版本。功能待添加。
    
  end
end
#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :le_seeing                 # 视野系统开关
  attr_accessor :le_clairv                 # 视野透视开关
  attr_accessor :le_show                   # 视线显示开关
  attr_accessor :le_side                   # 侧面可视开关
  attr_accessor :le_circle                 # 视野环绕开关
  attr_accessor :le_deepness               # 视野深度
  attr_accessor :le_slope                  # 视野斜率
  attr_accessor :le_color                  # 显示颜色
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #     event : RPG::Event
  #--------------------------------------------------------------------------
  alias original_initialize initialize
  def initialize(map_id, event)
    original_initialize(map_id, event)
    @le_seeing   = false
    @le_clairv   = false
    @le_show     = false
    @le_side     = true
    @le_circle   = false
    @le_deepness = 7
    @le_slope    = 1.0
    @le_color    = 0xf0
    @trace = Table.new(@le_deepness,2)
    @trace[0,0] = -1
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  alias original_update update
  def update
    if @le_seeing
      @trace.resize(@le_deepness,2) if @trace.xsize != @le_deepness
      original_switch = $game_self_switches[[$game_map.map_id, @id, "D"]]
      self.see
      $game_map.need_refresh = true if original_switch != $game_self_switches[[$game_map.map_id, @id, "D"]]
    end
    original_update
  end
  #--------------------------------------------------------------------------
  # ● 视野检测
  #--------------------------------------------------------------------------
  def see
    $game_self_switches[[$game_map.map_id, @id, "D"]] = false
    if ($game_player.x-@x).abs<@le_deepness and ($game_player.y-@y).abs<@le_deepness
      difference_x = $game_player.x - @x
      difference_y = $game_player.y - @y
      case @direction
      when 2
        return if @le_circle != true and $game_player.y < @y
        unless @le_side and (difference_y == 0 and difference_x.abs == 1)
          return if (difference_y/(difference_x+0.0)).abs < @le_slope
        end
      when 4
        return if @le_circle != true and $game_player.x > @x
        unless @le_side and difference_y.abs == 1 and difference_x == 0
          return if (difference_x/(difference_y+0.0)).abs < @le_slope
        end
      when 6
        return if @le_circle != true and $game_player.x < @x
        unless @le_side and difference_y.abs == 1 and difference_x == 0
          return if (difference_x/(difference_y+0.0)).abs < @le_slope
        end
      else
        return if @le_circle != true and $game_player.y > @y
        unless @le_side and difference_y == 0 and difference_x.abs == 1
          return if (difference_y/(difference_x+0.0)).abs < @le_slope
        end
      end
      $game_self_switches[[$game_map.map_id, @id, "D"]] = scan_line
    end
  end
  #--------------------------------------------------------------------------
  # ● 视线检测
  #--------------------------------------------------------------------------
  def scan_line
    difference_x = $game_player.x - @x
    difference_y = $game_player.y - @y
    direction_x = (difference_x > 0 ? 1 : -1)
    direction_y = (difference_y > 0 ? 1 : -1)
    i = 0
    if difference_x.abs > difference_y.abs
      while difference_x.abs > i+1
        i+=1
        x = @x+i*direction_x
        if direction_y>0
          y = @y+i*difference_y/(difference_x+0.0)*direction_y*direction_x+0.5
        else
          y = @y-i*difference_y/(difference_x+0.0)*direction_y*direction_x+0.5
        end
        x = x.floor
        y = y.floor
        if @le_clairv != true
          unless (direction_x > 0 ? passable?(x-1,y,6) : passable?(x+1,y,4))
            @trace[i-1,0] = -1
            return false
          end
        end
        if @le_show
          @trace[i-1,0] = x
          @trace[i-1,1] = y
          $scene.spriteset.tilemap.flash_data[x,y] = @le_color
        end
      end
    else
      while difference_y.abs > i+1
        i+=1
        y = @y+i*direction_y
        if direction_x>0
          x = @x+i*difference_x/(difference_y+0.0)*direction_x*direction_y+0.5
        else
          x = @x-i*difference_x/(difference_y+0.0)*direction_x*direction_y+0.5
        end
        x = x.floor
        y = y.floor
        if @le_clairv != true
          unless (direction_y > 0 ? passable?(x,y-1,2) : passable?(x,y+1,8))
            @trace[i-1,0] = -1
            return false
          end
        end
        if @le_show
          @trace[i-1,0] = x
          @trace[i-1,1] = y
          SceneManager.scene.spriteset.tilemap.flash_data[x,y] = @le_color
        end
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 清除痕迹
  #--------------------------------------------------------------------------
  def clear
    for i in 0 .. @trace.xsize-1
      break if @trace[i,0] == -1
      SceneManager.scene.spriteset.tilemap.flash_data[@trace[i,0],@trace[i,1]] = 0
    end
    @trace[0,0] = -1
  end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :tilemap 
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias original_ini initialize
  def initialize
    original_ini
    @tilemap.flash_data=Table.new(@tilemap.map_data.xsize,@tilemap.map_data.ysize)
  end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :spriteset
end
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
  alias original_update update
  #--------------------------------------------------------------------------
  # ● 更新画面
  #     main : 事件解释器更新的标志
  #--------------------------------------------------------------------------
  def update(main = false)
    # 清除视线痕迹
    for event in @events.values
      event.clear
    end
    original_update(main = false)
  end
end
#==============================================================================
# [PS0] End of Script
#==============================================================================

搜到一些相关内容,看看有没有有用的:

教程 : [PS0]强制指定行走图帧数教程 : [PS0]物品颜色描绘教程 : [PS0]强制移动队列行进的队..教程 : VX呼出对话框教程 : [过期VIP]NPC头上显示名..教程 : [PS0]线形视野系统教程 : 人物跟随系统教程 : 日期,天气,昼夜系统(养成游戏..教程 : 使用地图当战斗背景完美版教程 : VX双远景图系统(XP移植)教程 : 地图上显示文字脚本教程 : 锥形视野系统,带有障碍判断教程 : 远景自动移动 (追加:雾移动)教程 : 防止事件过多卡机教程 : RMVX升级提示教程 : FF7的菜单排版教程 : 华丽镜头移动脚本 VX化教程 : 两行脚本解决公共事件造成的地图..教程 : 伪·内嵌表达式教程 : 日夜控制系统完美版教程 : 任务显示与菜单综合加强教程 : RMXP在游戏运行中制作事件教程 : 截图+档位扩展50+存档提示+..教程 : 图片标题 整合 标题流星雨教程 : 菜单快捷键教程 : 通过装备修炼技能(AP修炼)教程 : 人物跟随 (精简,在地图创造事..教程 : vx新菜单样式教程 : VX地图名自动显示教程 : 任务系统缩减版 (清纯版- -..

没找到你想要的?可以使用搜索功能 ↓

66RPG 站内搜索

精确(推荐) 全文

评论啦