Project1

标题: 关于独立开关的操作 [打印本页]

作者: 七重    时间: 2016-10-14 11:22
标题: 关于独立开关的操作
请问应该如何对全部地图上,名称栏带有<Target_A>的事件进行独立开关C的开启/关闭操作?
作者: QQ蚊子湯    时间: 2016-10-14 19:58
沒測試過,實際做起來不知道怎麼樣{:2_264:}
  1. if event.name = <Target_A>
  2. $game_self_switches[C]=true/false
复制代码

作者: 七重    时间: 2016-10-15 12:53
QQ蚊子湯 发表于 2016-10-14 19:58
沒測試過,實際做起來不知道怎麼樣

感觉不太对,我开始自己试了下,发现自己思路也错了。
感觉RGSS3系统本身的结构,对实现这个操作好像不太方便。(大概...QxQ)

本意需求这个功能是为了方便管理设置。
但是现在仔细一想,直接指定也未尝没有好处。。。
作者: RaidenInfinity    时间: 2016-10-17 08:32
  1. module DataManager

  2.   def self.load_database
  3.     if $BTEST
  4.       load_battle_test_database
  5.     else
  6.       load_normal_database
  7.       load_map_database
  8.       check_player_location
  9.     end
  10.   end  
  11.   
  12.   def self.load_map_database
  13.       $data_maps = {}
  14.       $data_mapinfos.each{|k,v|
  15.         $data_maps[k] = load_data("Data/" + v.name + ".rvdata2")
  16.       }
  17.   end
  18.    
  19. end

  20. class Game_Interpreter
  21.   
  22.   #调用方法:事件脚本指令
  23.   #operate_all_self_switch(事件名字, 开关名字,类型)
  24.   #类型::on 打开 :off 关闭 :flip 反转
  25.   #例如:打开所有地图内 <Target A> 事件的 C 独立开关
  26.   #operate_all_self_switch("<Target A>", 'C', :on)
  27.   def operate_all_self_switch(ev_name,switch_char,type)
  28.     $data_maps.each{|k,v|
  29.       v.events.each{|k1,v1|
  30.         if v1.name == ev_name
  31.           operate_self_switch(k,k1,switch_char,type)
  32.         end
  33.       }
  34.     }  
  35.   end
  36.   
  37.   def operate_self_switch(map_id, event_id, switch_char, type)
  38.     key = [map_id, event_id, switch_char]
  39.     case type
  40.       when :on; $game_self_switches[key] = true
  41.       when :off; $game_self_switches[key] = false
  42.       when :flip; $game_self_switches[key] ^= true  
  43.     end   
  44.   end  
  45.   
  46. end   

  47. #这个不一定要加,看你喜好 就别浪费了$data_maps
  48. class Game_Map
  49.   
  50.   def setup(map_id)
  51.     @map_id = map_id
  52.     @map = $data_maps[map_id]
  53.     @tileset_id = @map.tileset_id
  54.     @display_x = 0
  55.     @display_y = 0
  56.     referesh_vehicles
  57.     setup_events
  58.     setup_scroll
  59.     setup_parallax
  60.     setup_battleback
  61.     @need_refresh = false
  62.   end
  63.   
  64. end  
复制代码

作者: 百里_飞柳    时间: 2016-10-17 09:21
RUBY 代码复制
  1. @map = load_data(sprintf("Data/Map%03d.rvdata2", $game_map.map_id))
  2.     $game_map.events.each do |k,v|
  3.       p temp = @map.events[k.to_i].name  #此处获取了当前地图上事件的名字
  4.       if temp =~ /<Target_A>/
  5.         key = [$game_map.map_id,k.to_i,"C"]
  6.         $game_self_switches[key] = true
  7.       end
  8.     end

作者: 七重    时间: 2016-10-17 13:05
RaidenInfinity 发表于 2016-10-17 08:32

十分感谢你的解答

制作ARPG游戏的时候,单纯利用开关和变量多了之后就变得很难处理,有了统一控制独立开关的方法之后就方便多了。

唔。。最后一个的作用我并不是很明白。
也就是class Game_Map那段。
试了一下不加也能满足功能。
作者: 七重    时间: 2016-10-17 13:15
百里_飞柳 发表于 2016-10-17 09:21
@map = load_data(sprintf("Data/Map%03d.rvdata2", $game_map.map_id))
    $game_map.events.each d ...

十分感谢你的解答!

这个的效果好像是仅对当前所在的地图上带有标记的事件进行操作呢!

稍作修改的话感觉又能拓展出各样的功能的说,真的是太棒了。

作者: 七重    时间: 2016-10-17 13:38
百里_飞柳 发表于 2016-10-17 09:21
@map = load_data(sprintf("Data/Map%03d.rvdata2", $game_map.map_id))
    $game_map.events.each d ...


回复你的点评:

谢谢补充。

唔,其实我一直对有两个临时参数的迭代器用法有所不理解,我可以请教一下吗?

比如这句:
$game_map.events.each do |k,v|
我理解这个k的意思是,对这个地图上包含的k个事件进行k次操作。

那么这里的v其实是代表什么涵义呢?




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