查看: 2663|回复: 4

[已经解决] 探测隐藏事件的雷达 标识不消除

[复制链接]
梦石
0
星屑
50
在线时间
139 小时
注册时间
2013-1-30
回帖
39
发表于 2014-1-19 23:23:12 | 显示全部楼层 |阅读模式

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

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

×
探测隐藏事件的雷达          @喵呜喵5 的脚本

如何捡完东西后,星星标识消失,不再会被雷达扫描到,

而东西没捡的话,就算换一个地图,又回来,星星标识还在

图片:

QQ截图20140119231322.png

QQ截图20140119231335.png

QQ截图20140119231348.png

QQ截图20140119231358.png

附件:

Project2.zip (1.46 MB, 下载次数: 99)
愁死我了。。。。

梦石
1
星屑
23236
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-1-22 22:25:48 | 显示全部楼层
本帖最后由 喵呜喵5 于 2014-1-22 22:50 编辑

参考宝箱事件的处理方式啊少年!

捡起物品后独立开关打开切换到没有注释的事件页不就好了!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
139 小时
注册时间
2013-1-30
回帖
39
 楼主| 发表于 2014-1-23 02:27:07 | 显示全部楼层
喵呜喵5 发表于 2014-1-22 22:25
参考宝箱事件的处理方式啊少年!

捡起物品后独立开关打开切换到没有注释的事件页不就好了! ...


即使切换事件页,雷达扫瞄过产生的星星也不消除
愁死我了。。。。
回复

使用道具 举报

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
回帖
2257

贵宾

发表于 2014-1-23 11:11:23 | 显示全部楼层
本帖最后由 Sion 于 2014-1-23 12:15 编辑

修复一些 bug
[pre lang="ruby" line="1"]#@nova
class Game_Interpreter
  def trigger_radar #事件中插入此脚本触发探测器
    Sprite_DetectSign::init
    dEvs = $game_map.events.values.select {|e| e.detectable}
    @nova = Sprite_RadarNova.new(dEvs)
    update_animations until @nova.anime_end?
    @nova.dispose
    @nova = nil
    update_detect until Sprite_DetectSign::not_busy?
  end
  def update_animations
    @nova.update
    update_detect
  end
  def update_detect
    Sprite_DetectSign::update
    Fiber.yield
  end
  def terminate_rada
    @nova.dispose if @nova
    Sprite_DetectSign::dispose
  end
end
#-
class Game_Event
  attr_reader  :detectable
  alias_method :detected_setup_page_20131018, :setup_page
  def setup_page(p)
    detected_setup_page_20131018(p)
    detected_object_judge
  end
  def detected_object_judge
    @detectable = nil ;
    @list.each {|cmd| break if detected_scan_list(cmd)} unless empty?
  end
  def detected_scan_list(cmd)
    return false unless cmd.code == 108 || cmd.code == 408
    return @detectable = cmd.parameters[0].include?("可探测")
  end
end
#-
class Sprite_RadarNova < Sprite
  def radar_radius; 200 end #雷达探测半径
  def anime_end?
    zoom_x * width >= radar_radius * 2
  end
  def initialize(dEvs, vp=nil)
    super(vp)
    self.z = 300
    self.bitmap = Cache.system('RadarNova')
    self.ox = width / 2
    self.oy = height / 2
    self.zoom_x = 0
    self.zoom_y = 0
    setup_detectable_events(dEvs)
    @map_x = $game_player.real_x
    @map_y = $game_player.real_y
    update
  end
  #
  def setup_detectable_events(dEvs)
    @dEvs_R = {}
    dEvs.each {|e|
      er = radius_from_player(e)
      @dEvs_R[e] = er if er <= radar_radius
    }
  end
  def radius_from_player(e)
    (($game_player.real_x-e.real_x)**2+($game_player.real_y-e.real_y)**2)**0.5
  end
  def update
    self.x = $game_map.adjust_x(@map_x) * 32 + 16
    self.y = $game_map.adjust_y(@map_y) * 32 + 16
    update_detect
  end
  def update_detect
    r = zoom_x + 0.025 #修改放大公式
    self.zoom_x = r
    self.zoom_y = r
    r *= width / 64.0
    trgEvs = []
    @dEvs_R.each {|e, er|
      next if r <= er
      trgEvs.push(e)
      Sprite_DetectSign.new(e.real_x, e.real_y)
      Audio.se_play('Audio/SE/ice1') #修改探测音效
    }
    trgEvs.each {|e| @dEvs_R.delete(e)} unless trgEvs.empty?
  end
end
#-
class Sprite_DetectSign < Sprite
  #探测到事件动画参考 Graphics\System 内 DetectSign
  def anime_rate;    9 end #设置帧切换间隔
  def anime_frames;  4 end #动画帧数
  def anime_width;  32 end #单帧宽度
  def anime_height; 32 end #单帧高度
  def initialize(x, y, vp=nil)
    super(vp)
    @map_x = x
    @map_y = y
    self.z = 300
    self.bitmap = Cache.system('DetectSign')
    self.ox = anime_width / 2
    self.oy = anime_height / 2
    @count = 0
    src_rect.set(0, 0, anime_width, anime_height)
    @@animations.push(self)
    update
  end
  def update
    self.x = $game_map.adjust_x(@map_x) * 32 + 16
    self.y = $game_map.adjust_y(@map_y) * 32 + 16
    @count += 1
    return if @count % anime_rate != 0
    src_rect.x += anime_width
    anime_end if src_rect.x == anime_frames * anime_width
  end
  def anime_end
    dispose
    @@ended_animations.push(self)
  end
end
#
class << Sprite_DetectSign
  def init
    @@animations       = []
    @@ended_animations = []
  end
  #
  def update
    @@animations.each {|anime| anime.update}
    return if @@ended_animations.empty?
    @@animations -= @@ended_animations
    @@ended_animations.clear
  end
  def dispose
    @@animations.each {|anime| anime.dispose}
    @@animations.clear
    @@ended_animations.clear
  end
  def not_busy?
    @@animations.empty?
  end
end

class Game_CommonEvent
  def refresh
    if active?
      @interpreter ||= Game_Interpreter.new
    elsif @interpreter
      @interpreter.terminate_rada
      @interpreter = nil
    end
  end
end[/pre]   
回复

使用道具 举报

梦石
0
星屑
50
在线时间
139 小时
注册时间
2013-1-30
回帖
39
 楼主| 发表于 2014-1-23 11:59:05 | 显示全部楼层
Sion 发表于 2014-1-23 11:11
修复一些 bug
#@nova
class Game_Interpreter

恩恩,十分好用,谢谢啦~
愁死我了。。。。
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部