查看: 2568|回复: 6

[交流讨论] 不是很懂为啥RM的脚本架构要这样设计

[复制链接]
梦石
0
星屑
1944
在线时间
404 小时
注册时间
2015-8-30
回帖
322
发表于 2018-8-31 20:26:51 | 显示全部楼层 |阅读模式

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

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

×
既然把$scene这玩意扔了,为啥还留着$data_***和$game_***
我觉得架构应该这样设计:
把DataManager模块扔了
然后咱做个Data模块,除了用来实现原来DataManager的功能,单例类里面还有attr_accessor
比如Data.actors,Data.items之类的
接着把Game_***什么的类都扔了,造一个Game的Namespace
Game模块里面有Game::Map,Game::Party之类的东西
$game_map.map_id这种画风全部变成Game::Map.map_id
至于load_database里面$game_*** = Game_***.new的画风都变成Game::***.init[pre lang="ruby"]module Data
  class << self
    attr_accessor :actors
    attr_accessor :classes
    attr_accessor :skills
    # ...
  end
  module_function
  def load_normal_database
    self.actors = load_data("Data/Actors.rvdata2")
    # ...
  end
  def create_game_objects
    Game::Temp.init
    Game::System.init
    # ...
  end
  # ...
end[/pre]就像这样

评分

参与人数 1赞 +1 收起 理由
张咚咚 + 1 官方:能全局变量搞定的事儿为啥要用模块= .

查看全部评分

小仙女一枚~
梦石
0
星屑
4623
在线时间
1207 小时
注册时间
2016-4-7
回帖
944

开拓者

发表于 2018-9-1 08:31:15 | 显示全部楼层
需要注意的是 gamexxx并不都是单例类 datamanager十分必要
改出一堆namespace一堆单例类 有点oo过度的感觉
就架构上来说va是最合理的 反而到了mv一方面因为js的原因再加上我觉得写mv的水平明显逊色于写va的 折腾了一堆没必要的xxxmanager

点评

可以写一个含有save和extract功能的Game::Savable模块,让需要存档的东西include(Game::Savable),再重写一些方法来实现  发表于 2018-9-1 14:32
仔细想想这些类在读档的时候存在着两个实例(当前本身就有的和反序列化的时候创建的)  发表于 2018-9-1 14:11
Game下面不是单例类的可以new,DataManager的功能Data也能实现,而且Ruby不就是完全OO的语言嘛  发表于 2018-9-1 10:37
附庸的附庸不是我的附庸,女儿的女儿还是我的女儿。CK2沉迷ing
回复

使用道具 举报

梦石
28
星屑
10170
在线时间
4673 小时
注册时间
2011-8-22
回帖
1216

开拓者

发表于 2018-9-1 08:33:34 | 显示全部楼层
我觉得主要原因是序列化的时候灵活直观。

至于用全局变量还是静态类,既然两者等价那就无所谓合理不合理,并不是全局变量就低人一等。

点评

虽说是等价的,但是全局变量太灵活,封装成模块比较安全  发表于 2018-9-1 10:37
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部