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

Project1

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

[已经解决] 关于独立开关的操作

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

跳转到指定楼层
1
发表于 2016-10-14 11:22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请问应该如何对全部地图上,名称栏带有<Target_A>的事件进行独立开关C的开启/关闭操作?

Lv2.观梦者

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
帖子
649

开拓者

2
发表于 2016-10-14 19:58:57 | 只看该作者
沒測試過,實際做起來不知道怎麼樣{:2_264:}
  1. if event.name = <Target_A>
  2. $game_self_switches[C]=true/false
复制代码
2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

3
 楼主| 发表于 2016-10-15 12:53:19 | 只看该作者
QQ蚊子湯 发表于 2016-10-14 19:58
沒測試過,實際做起來不知道怎麼樣

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

本意需求这个功能是为了方便管理设置。
但是现在仔细一想,直接指定也未尝没有好处。。。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
6886
在线时间
7027 小时
注册时间
2013-11-2
帖子
1344

开拓者剧作品鉴家

4
发表于 2016-10-17 08:32:18 | 只看该作者
  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  
复制代码

评分

参与人数 3星屑 +270 梦石 +1 收起 理由
怪蜀黍 + 250 楼主认可的解答
丿梁丶小柒 + 1 认可答案
七重 + 20 感谢解答0v0

查看全部评分

回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
33402
在线时间
6552 小时
注册时间
2012-5-26
帖子
3178

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

5
发表于 2016-10-17 09:21:50 | 只看该作者
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

评分

参与人数 2星屑 +170 收起 理由
丿梁丶小柒 + 150 认可答案
七重 + 20 感谢解答0v0

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

6
 楼主| 发表于 2016-10-17 13:05:31 | 只看该作者

十分感谢你的解答

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

唔。。最后一个的作用我并不是很明白。
也就是class Game_Map那段。
试了一下不加也能满足功能。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

7
 楼主| 发表于 2016-10-17 13:15:44 | 只看该作者
百里_飞柳 发表于 2016-10-17 09:21
@map = load_data(sprintf("Data/Map%03d.rvdata2", $game_map.map_id))
    $game_map.events.each d ...

十分感谢你的解答!

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

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

点评

要扩展成全部地图,则在最外围加上对全部地图的迭代器,迭代元素为地图序号,替换掉里面全部的$game_map.map_id就行了  发表于 2016-10-17 13:33
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3559
在线时间
2337 小时
注册时间
2015-8-25
帖子
960

开拓者

8
 楼主| 发表于 2016-10-17 13:38:53 | 只看该作者
百里_飞柳 发表于 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其实是代表什么涵义呢?

点评

$game_map.events 是一个哈希表,不是数组,迭代的是哈希表的每一对(两个元素)key和value。这个key是event id的字符串,value是game event的实例  发表于 2016-10-17 14:45
来QQ私聊讨论  发表于 2016-10-17 13:54
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-25 02:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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