Project1

标题: 萌新问问关于地图名的问题 [打印本页]

作者: Medicine0907    时间: 2018-6-26 16:44
标题: 萌新问问关于地图名的问题
本帖最后由 VIPArcher 于 2018-11-13 08:58 编辑

使用了脚本MOG_地图名,也把素材图片替換成自己画的
不过最近发现了小问题
原本想法是把地图分成室外和室內2种。
室外使用这个脚本;室內使用內建左上角的地图名显示。

▲室外


▲室內


▲但是在进入室內把脚本功能关闭一次之后再次开啟就开始2个地图名同时出现了

想问问大佬们这个情況有沒有方法解決的?

也把脚本附上來


RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - 地图名 (v1.4) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]https://atelierrgss.wordpress.com/[/url]
  6. #==============================================================================
  7. # 显示一个Touhou风格的地图名.
  8. #==============================================================================
  9. # 将以下两张图片放在文件夹: Graphics/System/
  10. #
  11. # Map_Name_Particle.png
  12. # Map_Name_Layout.png
  13. #
  14. #==============================================================================
  15. # 开启或关闭本样式地图名的脚本.
  16. #
  17. # $game_temp.mapname = true
  18. #
  19. #==============================================================================
  20. #==============================================================================
  21. # ● Histórico (Version History)
  22. #==============================================================================
  23. # v 1.4 - Melhoria na codificação.
  24. #==============================================================================
  25.  
  26. module MOG_TOUHOU_MAP_NAME
  27.   # 地图名位置.
  28.   MAP_NAME_POSITION = [272,192]
  29.   # 文本位置.
  30.   MAP_NAME_WORD_POSITION = [-30,18]
  31.   # 粒子的位置.
  32.   MAP_NAME_PARTICLE_POSITION = [-100,-50]
  33.   # 地图名Z坐标.
  34.   MAP_NAME_Z = 50
  35.   # 是否在默认情况下显示地图名.
  36.   MAP_NAME_AUTOMATIC = false
  37.  
  38. end
  39.  
  40. #==============================================================================
  41. # ■ Game Temp
  42. #==============================================================================
  43. class Game_Temp
  44.  
  45. attr_accessor :mapname_conf
  46. attr_accessor :mapname_layout_conf
  47. attr_accessor :mapname_duration
  48. attr_accessor :mapname
  49.  
  50. #--------------------------------------------------------------------------
  51. # ● Initialize
  52. #--------------------------------------------------------------------------                  
  53.   alias mog_map_name_initialize initialize
  54.   def initialize
  55.       @mapname_conf = []
  56.       @mapname_layout_conf = []
  57.       @mapname_duration = [false,-1,2]
  58.       @mapname = false
  59.       mog_map_name_initialize
  60.   end  
  61. end
  62.  
  63. #==============================================================================
  64. # ■ Game Player
  65. #==============================================================================
  66. class Game_Player < Game_Character  
  67.  
  68. #--------------------------------------------------------------------------
  69. # ● Perform Transfer
  70. #--------------------------------------------------------------------------                     
  71.   alias mog_touhou_map_name_perform_transfer perform_transfer
  72.   def perform_transfer
  73.       m_id = $game_map.map_id
  74.       mog_touhou_map_name_perform_transfer
  75.       if MOG_TOUHOU_MAP_NAME::MAP_NAME_AUTOMATIC
  76.          if m_id != $game_map.map_id and $game_map.display_name != ""
  77.             $game_temp.mapname = true
  78.          end
  79.       end   
  80.   end
  81.  
  82. end  
  83.  
  84. #==============================================================================
  85. # ■ Map Name
  86. #==============================================================================
  87. class Map_Name < Sprite
  88.   include MOG_TOUHOU_MAP_NAME
  89.  
  90.   attr_reader   :letter
  91.   attr_reader   :turn
  92.   attr_reader   :animation_duration
  93.   attr_reader   :text_duration
  94.   attr_reader   :duration
  95.  
  96. #--------------------------------------------------------------------------
  97. # ● Initialize
  98. #--------------------------------------------------------------------------                 
  99.   def initialize(letter,x,y, zoom, opac,duration, animation_dutation, text_duration,turn, center_x, viewport = nil)      
  100.       super(viewport)
  101.       [url=home.php?mod=space&uid=446611]@letter[/url] = letter
  102.       @turn = turn
  103.       @duration = duration
  104.       @animation_duration = animation_dutation
  105.       @animation_duration2 = animation_dutation
  106.       @text_duration = text_duration
  107.       self.bitmap = Bitmap.new(32,32)
  108.       self.bitmap.font.size = 32
  109.       self.bitmap.font.bold = true
  110.       self.bitmap.font.italic = true
  111.       self.bitmap.draw_text(0,0, 32, 32, @letter.to_s,0)
  112.       self.z = 999
  113.       self.zoom_x = zoom
  114.       self.zoom_y = zoom
  115.       self.ox =  -100
  116.       self.oy =  -100
  117.       self.x = x
  118.       self.y = y
  119.       self.z = MAP_NAME_Z + 2
  120.       self.opacity = opac
  121.   end  
  122.  
  123. #--------------------------------------------------------------------------
  124. # ● Dispose
  125. #--------------------------------------------------------------------------               
  126.   def dispose_word
  127.       return if self.bitmap == nil
  128.       self.bitmap.dispose
  129.       self.bitmap = nil
  130.   end  
  131.  
  132. #--------------------------------------------------------------------------
  133. # ● Update
  134. #--------------------------------------------------------------------------               
  135.   def update
  136.       super
  137.       update_animation
  138.   end
  139.  
  140. #--------------------------------------------------------------------------
  141. # ● Update Animation
  142. #--------------------------------------------------------------------------                 
  143.   def update_animation
  144.       @animation_duration -= 1 if @animation_duration > 0
  145.       return if @animation_duration > 0
  146.       if self.zoom_x > 1
  147.          self.zoom_x -= 0.06
  148.          self.x += 5
  149.          self.y += 6        
  150.          self.opacity += 35
  151.          self.zoom_y = self.zoom_x
  152.          if self.zoom_x <= 1
  153.             self.zoom_x = 1
  154.             self.zoom_y = self.zoom_x
  155.             self.opacity = 255
  156.             @text_duration = @duration - @animation_duration2
  157.          end      
  158.        else
  159.           @text_duration -= 1
  160.        end
  161.   end
  162.  
  163. end
  164.  
  165. #==============================================================================
  166. # ■ Particle_Name_Map
  167. #==============================================================================
  168. class Particle_Name_Map < Sprite
  169.  
  170.   include MOG_TOUHOU_MAP_NAME
  171.  
  172. #--------------------------------------------------------------------------
  173. # ● Initialize
  174. #--------------------------------------------------------------------------            
  175.   def initialize(viewport = nil,x,y,ax,ay)
  176.       super(viewport)
  177.       self.bitmap = Cache.system("Map_Name_Particle")
  178.       @pos = [x + self.bitmap.width,y - self.bitmap.height]
  179.       @area = [ax - (self.bitmap.width * 4),ay - self.bitmap.height]
  180.       reset_setting
  181.   end  
  182.  
  183. #--------------------------------------------------------------------------
  184. # ● Reset Setting
  185. #--------------------------------------------------------------------------               
  186.   def reset_setting
  187.       zoom = (50 + rand(100)) / 100.1
  188.       self.zoom_x = zoom
  189.       self.zoom_y = zoom
  190.       self.x = @pos[0] + rand(@area[0])
  191.       self.y = @pos[1] + rand(@area[1])
  192.       self.z = MAP_NAME_Z + 1
  193.       self.opacity = 0
  194.       self.angle = rand(360)
  195.       self.blend_type = 0
  196.       @speed_x = 0
  197.       @speed_y = [[rand(4), 4].min, 1].max
  198.       @speed_a = rand(3)
  199.       @fade_y = @pos[1] + 32
  200.   end
  201.  
  202. #--------------------------------------------------------------------------
  203. # ● Dispose
  204. #--------------------------------------------------------------------------               
  205.   def dispose
  206.       super
  207.       self.bitmap.dispose
  208.   end  
  209.  
  210. #--------------------------------------------------------------------------
  211. # ● Update
  212. #--------------------------------------------------------------------------               
  213.   def update
  214.       super
  215.       self.y -= @speed_y
  216.       self.opacity -= self.y > @fade_y ? -8 : 5
  217.       reset_setting if self.y < 0
  218.   end  
  219.  
  220. #--------------------------------------------------------------------------
  221. # ● Update Fade
  222. #--------------------------------------------------------------------------               
  223.   def update_fade
  224.       self.y -= @speed_y
  225.       self.opacity -= 5
  226.   end   
  227.  
  228. end
  229.  
  230. #==============================================================================
  231. # ■ Spriteset Map
  232. #==============================================================================
  233. class Spriteset_Map
  234.  
  235. #--------------------------------------------------------------------------
  236. # ● Initialize
  237. #--------------------------------------------------------------------------                 
  238.   alias mog_mapname_initialize initialize
  239.   def initialize
  240.       mog_mapname_initialize
  241.       create_touhou_map_name
  242.   end  
  243.  
  244. #--------------------------------------------------------------------------
  245. # ● Create Touhou Map Name
  246. #--------------------------------------------------------------------------                  
  247. def create_touhou_map_name
  248.      return if @th_map != nil
  249.      @th_map = Touhou_Map_Sprites.new
  250. end
  251.  
  252. #--------------------------------------------------------------------------
  253. # ● Dispose
  254. #--------------------------------------------------------------------------                 
  255.   alias mog_th_mapname_dispose dispose
  256.   def dispose
  257.       mog_th_mapname_dispose
  258.       dispose_touhou_map_name
  259.   end   
  260.  
  261. #--------------------------------------------------------------------------
  262. # ● Dispose Touhou Map Name
  263. #--------------------------------------------------------------------------                  
  264.   def dispose_touhou_map_name
  265.       return if @th_map == nil
  266.       @th_map.dispose
  267.       @th_map = nil
  268.   end
  269.  
  270. #--------------------------------------------------------------------------
  271. # ● Update
  272. #--------------------------------------------------------------------------                 
  273.   alias mog_th_mapname_update update
  274.   def update
  275.       mog_th_mapname_update
  276.       update_touhou_map_name
  277.   end   
  278.  
  279. #--------------------------------------------------------------------------
  280. # ● Update Touhou Map Name
  281. #--------------------------------------------------------------------------                  
  282.   def update_touhou_map_name
  283.       return if @th_map == nil
  284.       @th_map.update
  285.   end
  286.  
  287. end
  288.  
  289. #==============================================================================
  290. # ■ Touhou Map Sprites
  291. #==============================================================================
  292. class Touhou_Map_Sprites
  293. include MOG_TOUHOU_MAP_NAME
  294.  
  295. #--------------------------------------------------------------------------
  296. # ● Initialize
  297. #--------------------------------------------------------------------------                 
  298.   def initialize
  299.       @vis_time = 0
  300.       @vis = map_name_visible?
  301.       dispose
  302.       create_map_name
  303.       create_map_namelayout
  304.       create_light      
  305.   end
  306.  
  307. #--------------------------------------------------------------------------
  308. # ● Create Map Name
  309. #--------------------------------------------------------------------------                 
  310.   def create_map_name
  311.       return if $game_temp.mapname_duration[2] > 0
  312.       @map_name.each {|sprite| sprite.dispose_word} if @map_name != nil
  313.       @map_name = []
  314.       mapname = $game_map.display_name
  315.       m_name = mapname.to_s.split(//)
  316.       index = 0
  317.       turn = 0
  318.       duration = 20 * mapname.size      
  319.       center_x = 10 * mapname.size
  320.       $game_temp.mapname_duration[1] = (duration) + 64 if $game_temp.mapname_duration[1] <= 0
  321.       x2 = (-170 + MAP_NAME_POSITION[0] + MAP_NAME_WORD_POSITION[0]) - center_x
  322.       y2 = -170 + MAP_NAME_POSITION[1] + MAP_NAME_WORD_POSITION[1]
  323.       if $game_temp.mapname_conf == []
  324.          for i in m_name
  325.              @map_name.push(Map_Name.new(i[0],(index * 20) + x2,y2,1.8,0,duration, 20 * index,0,turn,center_x))
  326.              index += 1
  327.              turn = turn == 0 ? 1 : 0
  328.          end
  329.       else
  330.          c = $game_temp.mapname_conf   
  331.          for i in 0...c.size
  332.              @map_name.push(Map_Name.new(c[index][0],c[index][1],c[index][2],c[index][3],c[index][4],c[index][5],c[index][6],c[index][7],turn,0))
  333.              index += 1
  334.              turn = turn == 0 ? 1 : 0
  335.          end        
  336.       end
  337.   end
  338.  
  339. #--------------------------------------------------------------------------
  340. # ● Create Map Name Layout
  341. #--------------------------------------------------------------------------                  
  342. def create_map_namelayout
  343.      return if $game_temp.mapname_duration[2] > 1
  344.      if @map_name_layout != nil
  345.         @map_name_layout.bitmap.dispose
  346.         @map_name_layout.dispose
  347.         @map_name_layout = nil
  348.      end  
  349.      @map_name_layout = Sprite.new
  350.      @map_name_layout.bitmap = Cache.system("Map_Name_Layout.png")
  351.      @map_name_layout.z = MAP_NAME_Z
  352.      @map_name_org_position = [MAP_NAME_POSITION[0] - (@map_name_layout.bitmap.width / 2),MAP_NAME_POSITION[1] - (@map_name_layout.bitmap.height / 2)]
  353.      if $game_temp.mapname_layout_conf == []
  354.         @map_name_layout.x = @map_name_org_position[0] + 100
  355.         @map_name_layout.y = @map_name_org_position[1]
  356.         @map_name_layout.opacity = 0
  357.      else
  358.         @map_name_layout.x = $game_temp.mapname_layout_conf[0]
  359.         @map_name_layout.y = $game_temp.mapname_layout_conf[1]
  360.         @map_name_layout.opacity = $game_temp.mapname_layout_conf[2]
  361.      end
  362. end  
  363.  
  364.   #--------------------------------------------------------------------------
  365.   # ● Create Light
  366.   #--------------------------------------------------------------------------  
  367.   def create_light
  368.       return if $game_temp.mapname_duration[2] > 1   
  369.       x = MAP_NAME_POSITION[0] + MAP_NAME_PARTICLE_POSITION[0]
  370.       y = MAP_NAME_POSITION[1] + MAP_NAME_PARTICLE_POSITION[1]   
  371.       @particle_name =[]
  372.       ax = @map_name_layout.bitmap.width - 32
  373.       ay = @map_name_layout.bitmap.height - 32
  374.       for i in 0...15
  375.           @particle_name.push(Particle_Name_Map.new(nil,x,y,ax,ay))
  376.       end  
  377.   end
  378.  
  379. #--------------------------------------------------------------------------
  380. # ● Map Name Clear
  381. #--------------------------------------------------------------------------                  
  382. def map_name_clear
  383.      @map_name.each {|sprite| sprite.dispose_word} if @map_name != nil
  384.      @map_name = nil
  385.      $game_temp.mapname_duration[0] = false
  386.      $game_temp.mapname_duration[1] = -1
  387.      $game_temp.mapname_conf.clear
  388.      $game_temp.mapname_layout_conf.clear     
  389. end   
  390.  
  391. #--------------------------------------------------------------------------
  392. # ● Layout Clear
  393. #--------------------------------------------------------------------------                        
  394.   def layout_clear
  395.       return if @map_name_layout == nil
  396.       @map_name_layout.bitmap.dispose
  397.       @map_name_layout.dispose
  398.       @map_name_layout = nil
  399.       $game_temp.mapname_layout_conf.clear
  400.   end
  401.  
  402. #--------------------------------------------------------------------------
  403. # ● Dispose
  404. #--------------------------------------------------------------------------                 
  405.   def dispose
  406.       dispose_map_name_word
  407.       dispose_map_name_layout
  408.       dispose_map_name_particle
  409.   end  
  410.  
  411. #--------------------------------------------------------------------------
  412. # ● Dispose Map Mame Layout
  413. #--------------------------------------------------------------------------                     
  414. def dispose_map_name_layout
  415.      return if @map_name_layout == nil
  416.      $game_temp.mapname_layout_conf[0] = @map_name_layout.x
  417.      $game_temp.mapname_layout_conf[1] = @map_name_layout.y
  418.      $game_temp.mapname_layout_conf[2] = @map_name_layout.opacity
  419.      @map_name_layout.bitmap.dispose
  420.      @map_name_layout.dispose
  421. end      
  422.  
  423. #--------------------------------------------------------------------------
  424. # ● Particle_Name Clear
  425. #--------------------------------------------------------------------------                        
  426.   def dispose_map_name_particle
  427.       return if @particle_name == nil
  428.       @particle_name.each {|sprite| sprite.dispose}
  429.       @particle_name = nil         
  430.   end
  431.  
  432. #--------------------------------------------------------------------------
  433. # ● Dispose Map Mame Word
  434. #--------------------------------------------------------------------------                     
  435. def dispose_map_name_word
  436.      return if @map_name == nil
  437.      index = 0
  438.      for i in @map_name
  439.          if $game_temp.mapname_conf[index] == nil
  440.             $game_temp.mapname_conf[index] = ["",0,0,0,0,0,0,0,0]
  441.          end  
  442.          $game_temp.mapname_conf[index][0] = i.letter
  443.          $game_temp.mapname_conf[index][1] = i.x
  444.          $game_temp.mapname_conf[index][2] = i.y
  445.          $game_temp.mapname_conf[index][3] = i.zoom_x
  446.          $game_temp.mapname_conf[index][4] = i.opacity           
  447.          $game_temp.mapname_conf[index][5] = i.duration  
  448.          $game_temp.mapname_conf[index][6] = i.animation_duration
  449.          $game_temp.mapname_conf[index][7] = i.text_duration
  450.          i.dispose_word
  451.          index += 1
  452.      end
  453.      @map_name.each {|sprite| sprite.dispose_word}
  454.      @map_name = nil
  455. end
  456.  
  457. #--------------------------------------------------------------------------
  458. # ● Update
  459. #--------------------------------------------------------------------------                 
  460.   def update
  461.       refresh_map_name
  462.       dispose_map_name_time
  463.       update_word
  464.       update_map_name_layout
  465.   end  
  466.  
  467. #--------------------------------------------------------------------------
  468. # ● Map Name Visible?
  469. #--------------------------------------------------------------------------                    
  470.   def map_name_visible?
  471.       return false if !SceneManager.scene_is?(Scene_Map)
  472.       return false if @vis_time > 0
  473.       return true
  474.   end
  475.  
  476. #--------------------------------------------------------------------------
  477. # ● Refresh Map Name
  478. #--------------------------------------------------------------------------                  
  479.   def refresh_map_name
  480.       return unless $game_temp.mapname
  481.       $game_temp.mapname = false
  482.       map_name_clear
  483.       layout_clear
  484.       dispose_map_name_particle
  485.       $game_temp.mapname_duration[2] = 0      
  486.       create_map_name
  487.       create_map_namelayout
  488.       create_light
  489.   end  
  490.  
  491. #--------------------------------------------------------------------------
  492. # ● Update Light
  493. #--------------------------------------------------------------------------              
  494. def update_light
  495.      return if @particle_name == nil
  496.      for sprite in @particle_name
  497.          sprite.update
  498.          sprite.visible = @vis
  499.      end  
  500. end
  501.  
  502. #--------------------------------------------------------------------------
  503. # ● Update Fade ight
  504. #--------------------------------------------------------------------------              
  505. def update_fade_light
  506.      return if @particle_name == nil
  507.      @particle_name.each {|sprite| sprite.update_fade}      
  508. end  
  509.  
  510. #--------------------------------------------------------------------------
  511. # ● Update Map Name Layout
  512. #--------------------------------------------------------------------------                     
  513.   def update_map_name_layout
  514.       return if @map_name_layout == nil
  515.       @vis = map_name_visible?
  516.       if !@vis
  517.          @vis_time = 1
  518.       else
  519.          @vis_time -= 1 if @vis_time > 0
  520.       end  
  521.       @map_name_layout.visible = @vis
  522.       if @map_name != nil
  523.          @map_name_layout.opacity += 5
  524.          update_light
  525.          if @map_name_layout.x > @map_name_org_position[0]
  526.             @map_name_layout.x -= 1
  527.          end  
  528.       else
  529.          @map_name_layout.x -= 2
  530.          @map_name_layout.opacity -= 8
  531.          update_fade_light
  532.          if @map_name_layout.opacity <= 0
  533.             layout_clear
  534.             dispose_map_name_particle
  535.             $game_temp.mapname_duration[2] = 2
  536.          end   
  537.       end
  538.   end
  539.  
  540. #--------------------------------------------------------------------------
  541. # ● Update Word
  542. #--------------------------------------------------------------------------                     
  543.   def update_word
  544.       return if @map_name == nil      
  545.       for map_sprite in @map_name
  546.           map_sprite.update
  547.           map_sprite.visible = @vis
  548.       end  
  549.   end  
  550.  
  551. #--------------------------------------------------------------------------
  552. # ● Dispose Map Name Time
  553. #--------------------------------------------------------------------------                       
  554.   def dispose_map_name_time
  555.       if $game_temp.mapname_duration[1] > 0
  556.          $game_temp.mapname_duration[1] -= 1
  557.          return
  558.       end   
  559.       return if $game_temp.mapname_duration[1] < 0
  560.       map_name_clear
  561.       $game_temp.mapname_duration[2] = 1
  562.   end  
  563.  
  564. end
  565.  
  566. $mog_rgss3_touhou_map_name = true

作者: MCCF    时间: 2018-7-1 12:23
在场所移动之前打开这个功能试一试
作者: cinderelmini    时间: 2018-7-1 13:44
可以建两个公共事件:
公共事件1:《室内地图名转室外地图名》
脚本:$game_temp.mapname = true
更改显示地图名称:关闭

公共事件2:《室外地图名转室内地图名》
脚本:$game_temp.mapname = false
更改显示地图名称:开启

然后在进入室内地图的时候场景移动之前,先调用公共事件2,
从室内离开时场景移动前,先调用公共事件1……
作者: Medicine0907    时间: 2018-7-1 17:39
谢谢2位大佬的热心  这里给出一点测试回报
首先是离开时场景移动前先用脚本开关的问题回报:那是会失败.....
因为先用脚本的结果是进入下一地图时,脚本会显示上一张地图的名字,还有左上的地图名问题沒有解決到
不过3楼Dalao给出提示 原来有个功能是可以更改显示地图名称的开关
这个只要在地图更換前变更,然后再控制一个決定新地图用不用地图名脚本的开关,就成功了~~(开心的跳





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1