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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: def123
打印 上一主题 下一主题

为武器增加一个“体力”属性,需要在哪些地方修改?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
154
在线时间
56 小时
注册时间
2008-12-25
帖子
25
11
发表于 2009-6-1 22:07:08 | 只看该作者
http://rpg.blue/web/htm/news856.htm
说实话这玩意我是没看懂
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
12
发表于 2009-6-1 22:10:55 | 只看该作者
在 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感谢您的热情解答~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-18
帖子
50
13
 楼主| 发表于 2009-6-1 22:22:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
14
发表于 2009-6-1 22:29:30 | 只看该作者
这就是因为某些武器的 power 属性没有被初始化,所以他们是 nil,而 nil 是不可比较的类型,所以有这个错误~我上面 Scene_Title 那个部分只初始化了数据库中第一个和最后一个武器的 power 属性,其实也可以用一个循环把所有武器的体力都初始化为 0:
for i in 1...$data_weapons.size
   $data_weapons.power = 0
end
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-18
帖子
50
15
 楼主| 发表于 2009-6-1 22:35:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-18
帖子
50
16
 楼主| 发表于 2009-6-1 22:43:05 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
20 小时
注册时间
2005-10-24
帖子
1571
17
发表于 2009-6-2 00:05:52 | 只看该作者
  如果能直接反映到编辑器上就好了.
  幸好只是hp,要是攻击力就不好计算了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 03:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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