查看: 4284|回复: 15

[已经解决] 想在装备页面显示四个属性要怎么改呢?

[复制链接]
梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
发表于 2022-4-10 15:03:35 | 显示全部楼层 |阅读模式

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

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

×
人物状态页面现在已经改掉了是四个属性没错(对标的原属性:勇气-力量、礼仪-灵巧、社交-速度、学识-魔力)
现在装备界面的左侧也想改成四个属性,但是文字显示的明明是勇气(力量),礼仪(灵巧)和社交(速度),我看脚本里Equipleft里面的描述数值变化的三个项却是攻击力,物理防御和魔法防御,一下子就不会改了。
请问一下我有没有选错页?装备左侧想改成这四个属性请问要怎么改呢?

状态界面已经是四属性了

状态界面已经是四属性了

装备左边想也改成4属性

装备左边想也改成4属性

脚本里的描述却是攻击力和防御

脚本里的描述却是攻击力和防御
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2022-4-10 16:38:05 | 显示全部楼层
本帖最后由 guoxiaomi 于 2022-4-10 16:41 编辑

25-27行的 draw_actor_parameter 是用于显示当前的属性和值,你需要把最后一个参数从012改成345。

下面那些是显示更换之后的数值变化,包括“→”符号和不同颜色的新属性(atk/pdef/mdef)值,你想显示更新后的其他属性的变化,就顺着 set_new_parameters 找吧,大概在 Scene_Equip 的 refresh 方法里。

如果你想所有4个属性都显示,那么可以考虑不显示等级?或者把 Window_EquipLeft 窗口高度调大一点,同时也要调整其他窗口的高度和位置。

评分

参与人数 2星屑 +50 赞 +1 收起 理由
RyanBern + 50 认可答案
taeckle + 1 大神威武!

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
 楼主| 发表于 2022-4-10 20:17:09 | 显示全部楼层
guoxiaomi 发表于 2022-4-10 16:38
25-27行的 draw_actor_parameter 是用于显示当前的属性和值,你需要把最后一个参数从012改成345。

下面那 ...

现在很神奇的是不选择装备的情况下的数值就是对应的勇气(力量) 礼仪(灵巧)和社交(速度),选择装备的情况下,箭头左边的数字也是没错的,但右边数字始终是0. 装备完成后,左边数字会加上正确的属性OJZ
这样说的话012应该是没有问题的?主要是下面那一段?

点评

右边的数字就在scene_equip的refresh中赋值的  发表于 2022-4-11 12:05
回复

使用道具 举报

梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
 楼主| 发表于 2022-4-18 13:56:55 | 显示全部楼层
现在我改了Scene_equip 里面的这些:
     # 获取变更装备后的能力值
      new_str = @actor.str
      new_dex = @actor.dex
      new_agi = @actor.agi
      new_int = @actor.int
  # 描画左窗口
      @left_window.set_new_parameters(new_int, new_dex, new_agi, new_int)

然后还有window_equipleft里的这些:
def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    draw_actor_parameter(@actor, 4, 32, 0)
    draw_actor_parameter(@actor, 4, 64, 1)
    draw_actor_parameter(@actor, 4, 96, 2)
    draw_actor_parameter(@actor, 4, 128, 3)
    if @new_str != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 64, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 64, 36, 32, @new_str.to_s, 2)
    end
    if @new_dex != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 96, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 96, 36, 32, @new_dex.to_s, 2)
    end
    if @new_agi != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 128, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 128, 36, 32, @new_agi.to_s, 2)
    end
    if @new_int !=nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 128, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 128, 36, 32, @new_int.to_s, 2)
  end
  def set_new_parameters(new_str, new_dex, new_agi, new_int)
    if @new_str != new_str or @new_dex != new_dex or @new_agi != new_agi or @new_int != new_int
      @new_str = new_str
      @new_dex = new_dex
      @new_agi = new_agi
      @new_int = new_int
      refresh
    end
  end

但是直接就变成了“脚本window_equipleft最后一行发生了SyntaxError”
请问这个是怎么回事呀?
回复

使用道具 举报

梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
 楼主| 发表于 2022-4-18 13:58:13 | 显示全部楼层
foghidecrab 发表于 2022-4-10 20:17
现在很神奇的是不选择装备的情况下的数值就是对应的勇气(力量) 礼仪(灵巧)和社交(速度),选择装备 ...

可以麻烦大佬看下我下面改的嘛?是LEVEL不要了改成四属性,现在还是错误。

点评

要不你传个工程文件吧  发表于 2022-4-18 17:27
回复

使用道具 举报

梦石
0
星屑
1748
在线时间
485 小时
注册时间
2006-1-7
回帖
996
发表于 2022-4-19 01:31:59 | 显示全部楼层
foghidecrab 发表于 2022-4-18 13:58
可以麻烦大佬看下我下面改的嘛?是LEVEL不要了改成四属性,现在还是错误。 ...

脚本 Scene_Equip  中
115-116行
  1.       # 描画左窗口
  2.       @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
复制代码

改成
  1.       # 描画左窗口
  2.       @left_window.set_new_parameters(new_str, new_dex, new_agi, new_int)
复制代码

初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
 楼主| 发表于 2022-4-19 15:41:23 | 显示全部楼层
白鬼 发表于 2022-4-19 01:31
脚本 Scene_Equip  中
115-116行

这个6楼发的里面改过了
回复

使用道具 举报

梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
 楼主| 发表于 2022-4-19 15:59:44 | 显示全部楼层
链接:https://pan.baidu.com/s/1tendOJEA4mVRPyfajgVO-g
提取码:yjrx
--来自百度网盘超级会员V4的分享

对不起不知道怎么传工程文件,整个全传上来了OJZ,里面应该有一堆不重要的图片之类的
回复

使用道具 举报

梦石
0
星屑
1748
在线时间
485 小时
注册时间
2006-1-7
回帖
996
发表于 2022-4-19 16:13:51 | 显示全部楼层
本帖最后由 白鬼 于 2022-4-19 16:29 编辑
foghidecrab 发表于 2022-4-19 15:59
链接:https://pan.baidu.com/s/1tendOJEA4mVRPyfajgVO-g
提取码:yjrx
--来自百度网盘超级会员V4的分享


[fold=如何发论坛附件]哈哈哈,崩溃不
222.jpg

其实论坛上传附件很简单
回帖子时选择高级模式
223.jpg
再按图中所示即可。可以只上传DATA文件夹,如果你要解决的问题不涉及一些非RTP素材的话。[/fold]

我改好了,测试可以。我把修改的两个脚本完整的发出来你对照一下看看哪里不对吧。
另外,设置好数据库,别拿铜剑给阿尔西斯做测试,因为这家伙一出生就拿着铜剑
223.jpg
[fold=Window_EquipLeft【改】]#==============================================================================
# ■ Window_EquipLeft
#------------------------------------------------------------------------------
#  装备画面的、显示角色能力值变化的窗口。
#==============================================================================

class Window_EquipLeft < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor : 角色
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 64, 272, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_name(@actor, 4, 0)
    #draw_actor_level(@actor, 4, 32)
    draw_actor_parameter(@actor, 4, 32, 3)
    draw_actor_parameter(@actor, 4, 64, 4)
    draw_actor_parameter(@actor, 4, 96, 5)
    draw_actor_parameter(@actor, 4, 128, 6)
   
    if @new_str != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 32, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 32, 36, 32, @new_str.to_s, 2)
    end
    if @new_dex != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 64, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 64, 36, 32, @new_dex.to_s, 2)
    end
    if @new_agi != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 96, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 96, 36, 32, @new_agi.to_s, 2)
    end
    if @new_int != nil
      self.contents.font.color = system_color
      self.contents.draw_text(160, 128, 40, 32, "→", 1)
      self.contents.font.color = normal_color
      self.contents.draw_text(200, 128, 36, 32, @new_int.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● 变更装备后的能力值设置
  #     new_atk  : 变更装备后的攻击力
  #     new_pdef : 变更装备后的物理防御
  #     new_mdef : 变更装备后的魔法防御
  #--------------------------------------------------------------------------
  def set_new_parameters(new_str, new_dex, new_agi, new_int)
    if @new_str != new_str or @new_dex != new_dex or @new_agi != new_agi or @new_int != new_int
      @new_str = new_str
      @new_dex = new_dex
      @new_agi = new_agi
      @new_int = new_int
      refresh
    end
  end
end
[/fold]
[fold=Scene_Equip【改】]#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  处理装备画面的类。
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor_index : 角色索引
  #     equip_index : 装备索引
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
    @equip_index = equip_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    @actor = $game_party.actors[@actor_index]
    # 生成窗口
    @help_window = Window_Help.new
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)
    # 关联帮助窗口
    @right_window.help_window = @help_window
    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window
    # 设置光标位置
    @right_window.index = @equip_index
    refresh
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话的就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @help_window.dispose
    @left_window.dispose
    @right_window.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    # 设置物品窗口的可视状态
    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)
    # 获取当前装备中的物品
    item1 = @right_window.item
    # 设置当前的物品窗口到 @item_window
    case @right_window.index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end
    # 右窗口被激活的情况下
    if @right_window.active
      # 删除变更装备后的能力
      @left_window.set_new_parameters(nil, nil, nil, nil)#改
    end
    # 物品窗口被激活的情况下
    if @item_window.active
      # 获取现在选中的物品
      item2 = @item_window.item
      # 变更装备
      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
      # 获取变更装备后的能力值
      new_str = @actor.str#改
      new_dex = @actor.dex#改
      new_agi = @actor.agi#改
      new_int = @actor.int#追加
      # 返回到装备
      @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
      @actor.hp = last_hp
      @actor.sp = last_sp
      # 描画左窗口
      @left_window.set_new_parameters(new_str, new_dex, new_agi, new_int)#改
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新窗口
    @left_window.update
    @right_window.update
    @item_window.update
    refresh
    # 右侧窗口被激活的情况下: 调用 update_right
    if @right_window.active
      update_right
      return
    end
    # 物品窗口被激活的情况下: 调用 update_item
    if @item_window.active
      update_item
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (右侧窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_right
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(2)
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 固定装备的情况下
      if @actor.equip_fix?(@right_window.index)
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 激活物品窗口
      @right_window.active = false
      @item_window.active = true
      @item_window.index = 0
      return
    end
    # 按下 R 键的情况下
    if Input.trigger?(Input::R)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至下一位角色
      @actor_index += 1
      @actor_index %= $game_party.actors.size
      # 切换到别的装备画面
      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
    # 按下 L 键的情况下
    if Input.trigger?(Input::L)
      # 演奏光标 SE
      $game_system.se_play($data_system.cursor_se)
      # 移至上一位角色
      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size
      # 切换到别的装备画面
      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 演奏装备 SE
      $game_system.se_play($data_system.equip_se)
      # 获取物品窗口现在选择的装备数据
      item = @item_window.item
      # 变更装备
      @actor.equip(@right_window.index, item == nil ? 0 : item.id)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      # 再生成右侧窗口、物品窗口的内容
      @right_window.refresh
      @item_window.refresh
      return
    end
  end
end
[/fold]

评分

参与人数 1星屑 +100 赞 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

梦石
0
星屑
190
在线时间
11 小时
注册时间
2020-6-21
回帖
13
 楼主| 发表于 2022-4-19 16:43:13 | 显示全部楼层
现在变成了:
脚本' window_base'的293行发生了TypeError.
第293行是:
   self.contents.draw_text(x, y, 120, 32, parameter_name)

我的行数可能和默认不太一样,因为我把整个特技项给去掉了。
顺带一说那一整段是:
  #--------------------------------------------------------------------------
  # ● 描绘能力值
  #     actor : 角色
  #     x     : 描画目标 X 坐标
  #     y     : 描画目标 Y 坐标
  #     type  : 能力值种类 (0~3)
  #--------------------------------------------------------------------------
  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      parameter_name = $data_system.words.str
      parameter_value = actor.str
    when 1
      parameter_name = $data_system.words.dex
      parameter_value = actor.dex
    when 2
      parameter_name = $data_system.words.agi
      parameter_value = actor.agi
    when 3
      parameter_name = $data_system.words.int
      parameter_value = actor.int
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, 32, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)

点评

调用draw_actor_parameter(actor, x, y, type)时候,那个type改成3 就是str,4就是dex,5就是agi,6就是int。把不用的0 1 2 去掉,然后调整好xy坐标(主要是Y)就好了  发表于 2022-4-19 16:51
你的游戏可能用不上atk bdef和pdef,但是不建议你删掉。你可以不调用就好了。比如状态窗口  发表于 2022-4-19 16:50
你把这一段改回默认的就行  发表于 2022-4-19 16:45
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部