| 赞 | 2  | 
 
| VIP | 143 | 
 
| 好人卡 | 1 | 
 
| 积分 | 1 | 
 
| 经验 | 216792 | 
 
| 最后登录 | 2019-10-10 | 
 
| 在线时间 | 24 小时 | 
 
 
 
 
 
Lv1.梦旅人 
	- 梦石
 - 0 
 
        - 星屑
 - 61 
 
        - 在线时间
 - 24 小时
 
        - 注册时间
 - 2008-8-5
 
        - 帖子
 - 1924
 
 
 
 | 
	
在 RPG::Weapon 中添加属性是正确的,不过上面那样你写 @huixin = 0 那一行没有作用,因为 RM 中的武器对象都是从文件(weapons.rxdata)反序列化后得到的对象,initialize 在被你动态修改之前(没有 @huixin = 0 这一行的时候)就被调用并保存到文件了~ 
所以除非你直接用 RPG::Weapon.new,否则你修改后的 initialize 没有任何意义。应该在 Scene_Title 中,$data_weapons 初始化之后按照数据库编号去初始化数组中每个元素的属性 
 
一个简单的例子,给武器加一个体力属性,红色部分是修改了的地方:module RPG 
  class Weapon 
    attr_accessor :power 
  end 
end 
 
class Scene_Title 
  #-------------------------------------------------------------------------- 
  # ● 主处理 
  #-------------------------------------------------------------------------- 
  def main 
    # 战斗测试的情况下 
    if $BTEST 
      battle_test 
      return 
    end 
    # 载入数据库 
    $data_actors        = load_data("Data/Actors.rxdata") 
    $data_classes       = load_data("Data/Classes.rxdata") 
    $data_skills        = load_data("Data/Skills.rxdata") 
    $data_items         = load_data("Data/Items.rxdata") 
    $data_weapons       = load_data("Data/Weapons.rxdata") 
    $data_armors        = load_data("Data/Armors.rxdata") 
    $data_enemies       = load_data("Data/Enemies.rxdata") 
    $data_troops        = load_data("Data/Troops.rxdata") 
    $data_states        = load_data("Data/States.rxdata") 
    $data_animations    = load_data("Data/Animations.rxdata") 
    $data_tilesets      = load_data("Data/Tilesets.rxdata") 
    $data_common_events = load_data("Data/CommonEvents.rxdata") 
    $data_system        = load_data("Data/System.rxdata") 
    $data_weapons[1].power = 2 
    #......... 
    # 中间的省略 
    #......... 
    $data_weapons[32].power = 5 
    # 生成系统对像 
    $game_system = Game_System.new 
    # 生成标题图形 
    @sprite = Sprite.new 
    @sprite.bitmap = RPG::Cache.title($data_system.title_name) 
    # 生成命令窗口 
    s1 = "新游戏" 
    s2 = "继续" 
    s3 = "退出" 
    @command_window = Window_Command.new(192, [s1, s2, s3]) 
    @command_window.back_opacity = 160 
    @command_window.x = 320 - @command_window.width / 2 
    @command_window.y = 288 
    # 判定继续的有效性 
    # 存档文件一个也不存在的时候也调查 
    # 有効为 @continue_enabled 为 true、无效为 false 
    @continue_enabled = false 
    for i in 0..3 
      if FileTest.exist?("Save#{i+1}.rxdata") 
        @continue_enabled = true 
      end 
    end 
    # 继续为有效的情况下、光标停止在继续上 
    # 无效的情况下、继续的文字显示为灰色 
    if @continue_enabled 
      @command_window.index = 1 
    else 
      @command_window.disable_item(1) 
    end 
    # 演奏标题 BGM 
    $game_system.bgm_play($data_system.title_bgm) 
    # 停止演奏 ME、BGS 
    Audio.me_stop 
    Audio.bgs_stop 
    # 执行过渡 
    Graphics.transition 
    # 主循环 
    loop do 
      # 刷新游戏画面 
      Graphics.update 
      # 刷新输入信息 
      Input.update 
      # 刷新画面 
      update 
      # 如果画面被切换就中断循环 
      if $scene != self 
        break 
      end 
    end 
    # 装备过渡 
    Graphics.freeze 
    # 释放命令窗口 
    @command_window.dispose 
    # 释放标题图形 
    @sprite.bitmap.dispose 
    @sprite.dispose 
  end 
end  这样就成功给武器添加了新的属性~ 
之后就是实际把属性应用到角色身上了。原来的武器附加属性是在 Game_Actor 中的 base_XXX 等方法中附加的,所以增加 maxhp 的话也可以去修改 base_maxhp:  #-------------------------------------------------------------------------- 
  # ● 获取基本 MaxHP 
  #-------------------------------------------------------------------------- 
  def base_maxhp 
    weapon = $data_weapons[@weapon_id] 
    maxhp = $data_actors[@actor_id].parameters[0, @level] 
    if weapon 
      return weapon.power * 5 + maxhp 
    end 
    @hp = [@hp, maxhp].min 
    return maxhp 
  end  系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ |   
 
 
 
 |