查看: 1890|回复: 2

[已经解决] 如何在战斗场景中取得当前地图的雾图形及其设置

[复制链接]

脚本白痴

梦石
0
星屑
422
在线时间
903 小时
注册时间
2007-7-9
回帖
1259
发表于 2014-8-26 18:09:55 | 显示全部楼层 |阅读模式

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

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

×
这段脚本以及显示端口之类的脚本都已经设置好,战斗中雾图形也显示成功了
但是不能取得地图中的雾的移动。请问一下该怎么修改?
明明和Spriteset_Map中的脚本是一样的。这里就不能移动了……
  1. #=========================================================
  2.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  3.       @fog_name = $game_map.fog_name
  4.       @fog_hue = $game_map.fog_hue
  5.       if @fog.bitmap != nil
  6.         @fog.bitmap.dispose
  7.         @fog.bitmap = nil
  8.       end
  9.       if @fog_name != ""
  10.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  11.       end
  12.       Graphics.frame_reset
  13.     end
  14.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  15.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  16.     @fog.opacity = $game_map.fog_opacity
  17.     @fog.blend_type = $game_map.fog_blend_type
  18.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  19.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  20.         @fog.tone = $game_map.fog_tone
  21.     #==============================================================
复制代码

正统向RPG-大雄的高井山奇谈
https://rpg.blue/thread-369758-1-1.html
哆啦A梦RTP风格素材
https://rpg.blue/forum.php?mod=viewthread&tid=394608
梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2014-8-26 19:54:58 | 显示全部楼层
本帖最后由 RyanBern 于 2014-8-26 20:11 编辑

按照@taroxd 的思路,做了一个子类,暂时没发现问题。
需要在Spriteset_Battle里面生成对象@fog = Plane_Fog.new(@viewport5, 地图ID),这个设置比较别扭,意思就是采用某某地图图块关联的雾图形来设置,否则一个个设置怪麻烦的。
然后该update和dispose的,别忘了。
[pre lang="Ruby"]class Plane_Fog < Plane
  attr_reader   :fog_name                 # 雾 文件名
  attr_reader   :fog_hue                  # 雾 色相
  attr_accessor :fog_blend_type           # 雾 混合方式
  attr_accessor :fog_zoom                 # 雾 放大率
  attr_accessor :fog_sx
  attr_accessor :fog_sy
  def initialize(viewport, tileset_id)
    super(viewport)
    self.z = 3000
    tileset = $data_tilesets[tileset_id]
    self.change_fog(tileset.fog_name, tileset.fog_hue)
    @fog_opacity = tileset.fog_opacity
    @fog_blend_type = tileset.fog_blend_type
    @fog_zoom = tileset.fog_zoom
    @fog_sx = tileset.fog_sx
    @fog_sy = tileset.fog_sy
    # 初始化雾的各种信息
    @fog_ox = 0
    @fog_oy = 0
    @fog_tone = Tone.new(0, 0, 0, 0)
    @fog_tone_target = Tone.new(0, 0, 0, 0)
    @fog_tone_duration = 0
    @fog_opacity_duration = 0
    @fog_opacity_target = 0
  end
  def dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● 开始变更雾的色调
  #     tone     : 色调
  #     duration : 时间
  #--------------------------------------------------------------------------
  def start_fog_tone_change(tone, duration)
    @fog_tone_target = tone.clone
    @fog_tone_duration = duration
    if @fog_tone_duration == 0
      @fog_tone = @fog_tone_target.clone
    end
  end
  #--------------------------------------------------------------------------
  # ● 开始变更雾的不透明度
  #     opacity  : 不透明度
  #     duration : 时间
  #--------------------------------------------------------------------------
  def start_fog_opacity_change(opacity, duration)
    @fog_opacity_target = opacity * 1.0
    @fog_opacity_duration = duration
    if @fog_opacity_duration == 0
      @fog_opacity = @fog_opacity_target
    end
  end
  def change_fog(name, hue)
    # 雾与现在的情况有差异的情况下
    if name != @fog_name || hue != @fog_hue
      @fog_name = name
      @fog_hue = hue
      if self.bitmap != nil
        @fog.bitmap.dispose
        @fog.bitmap = nil
      end
      if @fog_name != ""
        self.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
      end
      Graphics.frame_reset
    end
  end
  def update
    @fog_ox -= @fog_sx / 8.0
    @fog_oy -= @fog_sy / 8.0
    # 处理雾的色调变更
    if @fog_tone_duration >= 1
      d = @fog_tone_duration
      target = @fog_tone_target
      @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
      @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
      @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
      @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
      @fog_tone_duration -= 1
    end
    # 处理雾的不透明度变更
    if @fog_opacity_duration >= 1
      d = @fog_opacity_duration
      @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
      @fog_opacity_duration -= 1
    end
    # 刷新雾平面
    self.zoom_x = @fog_zoom / 100.0
    self.zoom_y = @fog_zoom / 100.0
    self.opacity = @fog_opacity
    self.blend_type = @fog_blend_type
    self.ox = @fog_ox
    self.oy = @fog_oy
    self.tone = @fog_tone
  end
end[/pre]

评分

参与人数 1星屑 +220 收起 理由
牛肉面 + 220 认可答案

查看全部评分

回复

使用道具 举报

脚本白痴

梦石
0
星屑
422
在线时间
903 小时
注册时间
2007-7-9
回帖
1259
 楼主| 发表于 2014-8-26 21:04:53 | 显示全部楼层
十分感谢!问题解决了!

正统向RPG-大雄的高井山奇谈
https://rpg.blue/thread-369758-1-1.html
哆啦A梦RTP风格素材
https://rpg.blue/forum.php?mod=viewthread&tid=394608
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部