设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1691|回复: 2
打印 上一主题 下一主题

[已经过期] 如何在一个地图上设置多层雾?

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2065
在线时间
164 小时
注册时间
2014-6-21
帖子
120
跳转到指定楼层
1
发表于 2017-11-10 14:25:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
事件好像是只能设置一个

Lv4.逐梦者

梦石
5
星屑
3419
在线时间
390 小时
注册时间
2016-6-25
帖子
232
2
发表于 2017-11-11 06:00:55 | 只看该作者
本帖最后由 零教授 于 2017-11-11 16:41 编辑

楼主也可自行善用搜索功能搜索其他的多层雾脚本
脚本如下,即原版的 Spriteset_Map类,这个用起来不是插入式的,而是在 Spriteset_Map这个原有的脚本类里插入一些内容,或者把原版的 Spriteset_Map替换
如果和其他也修改了 Spriteset_Map类的脚本冲突则需要手动插入本脚本中插入的内容,插入的内容标注的也比较显而易见,全部用长条的#框起来了
和分辨率扩大脚本很可能不兼容

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Spriteset_Map
  3. #------------------------------------------------------------------------------
  4. #  处理地图画面活动块和元件的类。本类在
  5. # Scene_Map 类的内部使用。
  6. #==============================================================================
  7.  
  8. # 增加多重雾设定 2011 08 10
  9. # 相关脚本:·Game_Map
  10. # 附加一层雾方式:在进入地图前运行脚本
  11. #
  12. # #第一个雾
  13. # extra_fog = [雾图片名,色调偏移,x速度,y速度,缩放(百分比),透明度(0~255),混合方式(0正常,1加法,2减法)]
  14. # $game_map.extra_fogs.push(extra_fog)
  15. # #第一个雾
  16. # extra_fog = [雾图片名,色调偏移,x速度,y速度,缩放,透明度,混合方式]
  17. # $game_map.extra_fogs.push(extra_fog)
  18. ######以此类推
  19.  
  20. #例: 下面脚本添加了两个交叉运动的雾
  21.  
  22. #extra_fog = ["Clouds",0,2,10,200,64,0]
  23. #$game_map.extra_fogs.push(extra_fog)
  24. #extra_fog = ["Clouds",0,10,2,200,64,0]
  25. #$game_map.extra_fogs.push(extra_fog)
  26.  
  27. #
  28.  
  29. # 不使用雾时请在退出地图前调用$game_map.extra_fogs.clear,否则雾会带到下一个地图
  30.  
  31. class Spriteset_Map
  32.   attr_reader :viewport1
  33.   attr_reader :viewport2
  34.   attr_reader :viewport3
  35.   attr_reader :viewport4
  36.   attr_reader :character_sprites
  37.   attr_accessor :picture_sprites
  38.   attr_accessor :panorama
  39.   attr_reader :sub_spritesets
  40.  
  41.     # 锁定远景的地图编号(编号为2、8、10的地图远景会锁定)
  42.   SCROLL_FREEZE_PANORAMA_IDS = [2]   
  43.   SCROLLY_FREEZE_PANORAMA_IDS = [337,357] #锁定Y轴  
  44.   DOUBLE_PANORAMA_IDS = [209]
  45.   AUTO_SCROLLY_PANORAMA_IDS = [362,365]
  46.   #——说明:如果自动滚动和锁定都包括了某张地图,则该地图不滚动。
  47.   #——如果自动滚动和锁定都没有包括某图,则还是会使用默认效果。
  48.   #--------------------------------------------------------------------------
  49.   # ● 初始化对像
  50.   #--------------------------------------------------------------------------
  51.   def initialize
  52.     # 生成显示端口
  53.     @viewport1 = Viewport.new(0, 0, 640, 480)
  54.     @viewport2 = Viewport.new(0, 0, 640, 480)
  55.     @viewport3 = Viewport.new(0, 0, 640, 480)
  56.     @viewport4 = Viewport.new(0, 0, 640, 480) #####
  57.     @viewport2.z = 200
  58.     @viewport3.z = 5000
  59.     @viewport4.z = 20005
  60.     # 生成元件地图
  61.     @tilemap = Tilemap.new(@viewport1)
  62.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  63.     for i in 0..6
  64.       autotile_name = $game_map.autotile_names[i]
  65.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  66.     end
  67.     @tilemap.map_data = $game_map.data
  68.     @tilemap.priorities = $game_map.priorities
  69.     # 生成远景平面
  70.     @panorama = Plane.new(@viewport1)
  71.     @panorama.z = -1000
  72.     #-----------------------
  73.    $panorama2 = Plane.new(@viewport1)
  74.    $panorama2.z = -500
  75.    #-----------------------
  76.     # 生成雾平面
  77.     @fog = [Plane.new(@viewport1)]
  78.     @fog[0].z = 3000
  79.     @fog_name = []
  80.     @fog_hue = []
  81.     unless $game_map.extra_fogs.nil?
  82.       for i in 0...$game_map.extra_fogs.size
  83.         fog_set = $game_map.extra_fogs[i]
  84.         fog = Plane.new(@viewport1)
  85.         fog.z = 30000
  86.         @fog.push(fog)
  87.       end
  88.     end
  89.     # 生成角色活动块
  90.     @character_sprites = []
  91.     for i in $game_map.events.keys.sort
  92.       sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  93.       @character_sprites.push(sprite)
  94.     end
  95.     #if $game_switches[988] == true #海战开关
  96.     #$player = (Sprite_Player.new(@viewport1, $game_player))
  97.     #@character_sprites.push(Sprite_Player.new(@viewport1, $game_player))
  98.     #else
  99.     @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  100.     #end
  101.     #####人物跟随
  102.     begin
  103.       setup_actor_character_sprites($game_party.characters)
  104.     rescue
  105.     end
  106.     # 生成天气
  107.     @weather = RPG::Weather.new(@viewport1)
  108.     # 生成图片
  109.     @picture_sprites = []
  110.     #for i in 1..50
  111.     #  @picture_sprites.push(Sprite_Picture.new(@viewport2,
  112.     #    $game_screen.pictures[i]))
  113.     #end
  114.     for i in 1..24
  115.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  116.         $game_screen.pictures[i]))
  117.     end   
  118.     for i in 25..50
  119.       @picture_sprites.push(Sprite_Picture.new(@viewport4,
  120.         $game_screen.pictures[i]))
  121.     end        
  122.     # 生成计时器块
  123.     @timer_sprite = Sprite_Timer.new
  124.     @sub_spritesets = []
  125.     # 刷新画面
  126.     update
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ●
  130.   #--------------------------------------------------------------------------
  131.   def check_fullscreen
  132.     if $game_map.fullscreen or $game_variables[GAME_END_VARIABLE] > 0
  133.       @sub_spritesets[0] = Spriteset_UI.new(0,120,false,-1) if @sub_spritesets[0].nil?
  134.       @sub_spritesets[1] = Spriteset_UI.new(160,120,false,-1) if @sub_spritesets[1].nil?
  135.       @sub_spritesets[2] = Spriteset_UI.new(160,0,false,-1) if @sub_spritesets[2].nil?
  136.     else
  137.       unless @sub_spritesets.empty?
  138.         @sub_spritesets[0].dispose unless @sub_spritesets[0].nil?
  139.         @sub_spritesets[1].dispose unless @sub_spritesets[1].nil?
  140.         @sub_spritesets[2].dispose unless @sub_spritesets[2].nil?   
  141.         @sub_spritesets = []
  142.       end
  143.     end
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 释放
  147.   #--------------------------------------------------------------------------
  148.   def dispose
  149.     # 释放元件地图
  150.     @tilemap.tileset.dispose
  151.     for i in 0..6
  152.       @tilemap.autotiles[i].dispose
  153.     end
  154.     @tilemap.dispose
  155.     # 释放远景平面
  156.     @panorama.dispose
  157.     # 释放雾平面
  158.     for fog in @fog
  159.       fog.dispose
  160.     end
  161.     # 释放角色活动块
  162.     for sprite in @character_sprites
  163.       sprite.dispose
  164.     end
  165.     # 释放天候
  166.     @weather.dispose
  167.     # 释放图片
  168.     for sprite in @picture_sprites
  169.       sprite.dispose
  170.     end
  171.     # 释放flash
  172.     for sprite in $map_flash
  173.       sprite.dispose unless sprite.nil?
  174.     end
  175.     $map_flash = []
  176.     # 释放计时器块
  177.     @timer_sprite.dispose
  178.     # 释放显示端口
  179.     @viewport1.dispose
  180.     @viewport2.dispose
  181.     @viewport3.dispose
  182.     #$player.dispose if ($game_switches[988] == true)
  183.     for ss in @sub_spritesets
  184.       unless ss.nil?
  185.         ss.dispose
  186.       end
  187.     end
  188.   end
  189.   #-------------------------------------  
  190. def abs(x)
  191.    if x < 0          # 如果 x 小于 0 的话,
  192.      return -x       #   结束函数,返回值 -x。
  193.    else              # 除此之外,
  194.      return x        #   结束函数,返回值 x。
  195.    end               # 分歧结束。
  196. end
  197.   #--------------------------------------------------------------------------
  198.   # ● 刷新画面
  199.   #--------------------------------------------------------------------------
  200.   def update
  201.  
  202.     #============================
  203.     #地图图块可更改设置
  204.    if $game_map.new_tileset == true
  205.       @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  206.       @tilemap.priorities = $game_map.priorities
  207.       for i in 0..6
  208.         autotile_name = $game_map.autotile_names[i]
  209.         @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  210.       end
  211.       $game_map.new_tileset = false
  212.     end
  213.     #======================
  214.  
  215.     # 远景与现在的情况有差异发情况下
  216.     if @panorama_name != $game_map.panorama_name or
  217.        @panorama_hue != $game_map.panorama_hue
  218.       @panorama_name = $game_map.panorama_name
  219.       @panorama_hue = $game_map.panorama_hue
  220.       if @panorama.bitmap != nil
  221.         @panorama.bitmap.dispose
  222.         @panorama.bitmap = nil
  223.       end
  224.       if @panorama_name != ""
  225.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  226.         #-------------------------------------------------------------------------
  227.         if DOUBLE_PANORAMA_IDS.include?($game_map.map_id)
  228.            $panorama2.bitmap = RPG::Cache.panorama(@panorama_name+"_2", @panorama_hue)
  229.          end
  230.  
  231. #-------------------------------------------------------------------------
  232.       end
  233.       Graphics.frame_reset
  234.     end
  235.     # 雾与现在的情况有差异的情况下
  236.     for i in 0...($game_map.extra_fogs.size+1)
  237.       if @fog[i].nil?
  238.         fog = Plane.new(@viewport1)
  239.         fog.z = 3000
  240.         @fog[i] = fog
  241.       end
  242.       if @fog_name[i] != $game_map.fog_name(i) or @fog_hue[i] != $game_map.fog_hue(i)
  243.         @fog_name[i] = $game_map.fog_name(i)
  244.         @fog_hue[i] = $game_map.fog_hue(i)
  245.         if @fog[i].bitmap != nil
  246.           @fog[i].bitmap.dispose
  247.           @fog[i].bitmap = nil
  248.         end
  249.         if @fog_name[i] != ""
  250.           @fog[i].bitmap = RPG::Cache.fog(@fog_name[i], @fog_hue[i])
  251.           unless CUSTOM_FOG_Z[@fog_name[i]].nil?
  252.             @fog[i].z = CUSTOM_FOG_Z[@fog_name[i]]
  253.           end
  254.         end
  255.         Graphics.frame_reset
  256.       end
  257.     end
  258.     # 雾与现在的情况有差异的情况下
  259.     for i in ($game_map.extra_fogs.size+1)...@fog.size
  260.       unless @fog[i].nil?
  261.         @fog[i].dispose
  262.       end
  263.       @fog[i] = nil
  264.       Graphics.frame_reset
  265.     end   
  266.     if @fog.size > ($game_map.extra_fogs.size+1)
  267.       @fog.compact!
  268.     end
  269.  
  270.     # 刷新元件地图
  271.     @tilemap.ox = $game_map.display_x / 4
  272.     @tilemap.oy = $game_map.display_y / 4
  273.     @tilemap.update
  274.     # 刷新远景平面
  275.     @panorama.ox = $game_map.display_x / 8
  276.     @panorama.oy = $game_map.display_y / 8
  277.  
  278.        # ===================================
  279.     if SCROLL_FREEZE_PANORAMA_IDS.include?($game_map.map_id)
  280.      @panorama.ox = 0
  281.      @panorama.oy = 0
  282.     elsif SCROLLY_FREEZE_PANORAMA_IDS.include?($game_map.map_id)
  283.      @panorama.ox = $game_map.display_x / 18 +$game_map.panorama_ox
  284.      @panorama.oy = 0
  285.     elsif AUTO_SCROLLY_PANORAMA_IDS.include?($game_map.map_id)
  286.      @panorama.ox = $game_map.display_x / 4
  287.      @panorama.oy = -$game_map.panorama_oy
  288.     else  
  289.       @panorama.ox = $game_map.display_x / 8 +$game_map.panorama_ox
  290.       @panorama.oy = $game_map.display_y / 8 +$game_map.panorama_oy
  291.     end
  292. #-------------------------------
  293.     #----------
  294.    if DOUBLE_PANORAMA_IDS.include?($game_map.map_id)
  295.      $panorama2.ox = $game_map.display_x / 6
  296.      $panorama2.oy = $game_map.display_y / 6
  297.    end
  298.     # ===================================
  299.     #----------
  300.     # 刷新雾平面
  301.     for i in 0...($game_map.extra_fogs.size+1)
  302.       @fog[i].zoom_x = $game_map.fog_zoom(i) / 100.0
  303.       @fog[i].zoom_y = $game_map.fog_zoom(i) / 100.0
  304.       @fog[i].opacity = $game_map.fog_opacity(i)
  305.       @fog[i].blend_type = $game_map.fog_blend_type(i)
  306.       @fog[i].ox = $game_map.display_x / 4 + $game_map.fog_ox(i)
  307.       @fog[i].oy = $game_map.display_y / 4 + $game_map.fog_oy(i)
  308.       @fog[i].tone = $game_map.fog_tone(i)
  309.     end
  310.     # 刷新角色活动块
  311.     for sprite in @character_sprites
  312.       sprite.update
  313.     end
  314.     # 刷新天候图形
  315.     @weather.type = $game_screen.weather_type
  316.     @weather.max = $game_screen.weather_max
  317.     @weather.ox = $game_map.display_x / 4
  318.     @weather.oy = $game_map.display_y / 4
  319.     @weather.update
  320.     # 刷新图片
  321.     for sprite in @picture_sprites
  322.       sprite.update
  323.     end
  324.     # 刷新flash
  325.     for sprite in $map_flash
  326.       sprite.update unless sprite.nil?
  327.     end
  328.     #$player.dispose if ($game_switches[988] == true)
  329.     # 刷新计时器块
  330.     @timer_sprite.update
  331.     # 设置画面的色调与震动位置
  332.     @viewport1.tone = $game_screen.tone
  333.     @viewport1.ox = $game_screen.shake
  334.     # 设置画面的闪烁色
  335.     @viewport3.color = $game_screen.flash_color
  336.     # 刷新显示端口
  337.     @viewport1.update
  338.     @viewport3.update
  339.     # 800*600
  340.     check_fullscreen
  341.     for ss in @sub_spritesets
  342.       unless ss.nil?
  343.         ss.update
  344.       end
  345.     end
  346.   end
  347. end


此外可以手动设置雾层次,这个就是可以新插入的脚本


RUBY 代码复制
  1. # 修改雾z坐标的另一种方法:根据雾文件名字指定
  2. #相关脚本: Spriteset_Map
  3. CUSTOM_FOG_Z = {}
  4. # 例:CUSTOM_FOG_Z["天空"] = -500 #指定文件名为天空的雾坐标为-500
  5.  
  6. CUSTOM_FOG_Z["天空"] = -500
  7. CUSTOM_FOG_Z["夜空"] = -500
  8. CUSTOM_FOG_Z["夜空二"] = -500
  9. CUSTOM_FOG_Z["隙间雾"] = -500
  10. CUSTOM_FOG_Z["沙漠"] = -500
  11. CUSTOM_FOG_Z["血雾"] = -500
  12. CUSTOM_FOG_Z["地面"] = -500
  13. CUSTOM_FOG_Z["浮游星"] = -500
  14. CUSTOM_FOG_Z["幻雾"] = -500
  15. # 修改雾z坐标的办法:在大地图中使用事件运行脚本
  16. # 例如
  17. # $scene.spriteset.fog.z = -500
  18. # 可以将雾坐标修改到-500,即位于远景和地图之间
  19.  
  20. class Spriteset_Map
  21.   attr_accessor :fog
  22. end
  23.  
  24. class Scene_Map
  25.   attr_accessor :spriteset
  26. end













点评

这两个脚本是要一起使用的  发表于 2017-11-11 16:38

评分

参与人数 2星屑 +20 +1 收起 理由
RyanBern + 20 塞糖
chd114 + 1 这种功能居然真的有人做···

查看全部评分

魔女的下午茶~~制作组募集~~有偿招募长期立绘画师~群号168579736~~多人在线RPG~~无意识Navigation,火热内测中,招内测人员~
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-11 09:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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