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

Project1

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

[已经解决] [已解决]Scene_Equip 刷新部分的一些疑问

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

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

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

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

x
本帖最后由 miantouchi 于 2019-11-14 20:48 编辑

class Scene_Equip 类当中refresh 几点疑问?
看了差不多2天吧,不知道是我笨还是太难了,太绕了有点。
问题一,hp和sp好像在刷新里面根本就没用到?只用了攻击、物防、法防这三个的描绘。
      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.hp = last_hp
      @actor.sp = last_sp
问题二,
我的疑问是为什么去掉,@actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)这一句后会出现默认的数值和后面的装备后数值是一样的

我看了下Window_EquipLeft的refresh里面,
   draw_actor_parameter(@actor, 4, 64, 0)#描绘能力值0,1,2 攻击、防御、魔法
    draw_actor_parameter(@actor, 4, 96, 1)
    draw_actor_parameter(@actor, 4, 128, 2)
应该是这三句话描绘的装备前的数值,
我注释掉的这句话是如何影响到的?

以下是分别两个类的源码

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Equip
  3. #------------------------------------------------------------------------------
  4. #  处理装备画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Equip
  8.   #--------------------------------------------------------------------------
  9.   # ● 刷新
  10.   #--------------------------------------------------------------------------
  11.   def refresh
  12.     # 设置物品窗口的可视状态
  13.     @item_window1.visible = (@right_window.index == 0)
  14.     @item_window2.visible = (@right_window.index == 1)
  15.     @item_window3.visible = (@right_window.index == 2)
  16.     @item_window4.visible = (@right_window.index == 3)
  17.     @item_window5.visible = (@right_window.index == 4)
  18.     # 获取当前装备中的物品
  19.     item1 = @right_window.item
  20.     # 设置当前的物品窗口到 @item_window
  21.     case @right_window.index
  22.     when 0
  23.       @item_window = @item_window1
  24.     when 1
  25.       @item_window = @item_window2
  26.     when 2
  27.       @item_window = @item_window3
  28.     when 3
  29.       @item_window = @item_window4
  30.     when 4
  31.       @item_window = @item_window5
  32.     end
  33.     # 右窗口被激活的情况下
  34.     if @right_window.active
  35.       # 删除变更装备后的能力
  36.       @left_window.set_new_parameters(nil, nil, nil)
  37.     end
  38.     # 物品窗口被激活的情况下
  39.     if @item_window.active
  40.       # 获取现在选中的物品
  41.       item2 = @item_window.item
  42.       # 变更装备
  43.       last_hp = @actor.hp
  44.       last_sp = @actor.sp
  45.       @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)
  46.       # 获取变更装备后的能力值
  47.       new_atk = @actor.atk
  48.       new_pdef = @actor.pdef
  49.       new_mdef = @actor.mdef
  50.       # 返回到装备
  51.       @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
  52.       @actor.hp = last_hp
  53.       @actor.sp = last_sp
  54.       # 描画左窗口
  55.       @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
  56.     end
  57.   end
  58.  
  59. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_EquipLeft
  3. #------------------------------------------------------------------------------
  4. #  装备画面的、显示角色能力值变化的窗口。
  5. #==============================================================================
  6.  
  7. class Window_EquipLeft < Window_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     actor : 角色
  11.   #--------------------------------------------------------------------------
  12.   def initialize(actor)
  13.     super(0, 64, 272, 192)
  14.     self.contents = Bitmap.new(width - 32, height - 32)
  15.     @actor = actor
  16.     refresh
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 刷新
  20.   #--------------------------------------------------------------------------
  21.   def refresh
  22.     self.contents.clear
  23.     draw_actor_name(@actor, 4, 0)         #描绘姓名 X、Y坐标
  24.     draw_actor_level(@actor, 4, 32)      
  25.     draw_actor_parameter(@actor, 4, 64, 0)#描绘能力值0,1,2 攻击、防御、魔法
  26.     draw_actor_parameter(@actor, 4, 96, 1)
  27.     draw_actor_parameter(@actor, 4, 128, 2)
  28.     #p @new_atk
  29.     if @new_atk != nil
  30.       self.contents.font.color = system_color
  31.       self.contents.draw_text(160, 64, 40, 32, "→", 1)
  32.       self.contents.font.color = normal_color
  33.       self.contents.draw_text(200, 64, 36, 32, @new_atk.to_s, 2)
  34.     end
  35.     if @new_pdef != nil
  36.       self.contents.font.color = system_color
  37.       self.contents.draw_text(160, 96, 40, 32, "→", 1)
  38.       self.contents.font.color = normal_color
  39.       self.contents.draw_text(200, 96, 36, 32, @new_pdef.to_s, 2)
  40.     end
  41.     if @new_mdef != nil
  42.       self.contents.font.color = system_color
  43.       self.contents.draw_text(160, 128, 40, 32, "→", 1)
  44.       self.contents.font.color = normal_color
  45.       self.contents.draw_text(200, 128, 36, 32, @new_mdef.to_s, 2)
  46.     end
  47.   end
  48.   #--------------------------------------------------------------------------
  49.   # ● 变更装备后的能力值设置
  50.   #     new_atk  : 变更装备后的攻击力
  51.   #     new_pdef : 变更装备后的物理防御
  52.   #     new_mdef : 变更装备后的魔法防御
  53.   #--------------------------------------------------------------------------
  54.   def set_new_parameters(new_atk, new_pdef, new_mdef)
  55.     if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
  56.       @new_atk = new_atk
  57.       @new_pdef = new_pdef
  58.       @new_mdef = new_mdef
  59.       refresh
  60.     end
  61.   end
  62. end


Lv5.捕梦者

梦石
0
星屑
37784
在线时间
5396 小时
注册时间
2006-11-10
帖子
6546
2
发表于 2019-11-14 20:07:41 | 只看该作者
本帖最后由 灯笼菜刀王 于 2019-11-14 20:11 编辑



这里每次刷新, 都是经过了 装备上B, 记录增减数值, 装备回A 的过程

所以, 你第一个问题的答案就是 : 这里是为了换回装备后还原为原本的HP SP, 避免因为内部更换装备而导致HP SP的剩余值出现变化, 并不是为了描绘

第二个问题的答案是 : 你把装备B的句子注释掉了, 结果就是一直是装备A的情况, 那自然能力值就没变化啦

知道这个场景的工作流程你应该就能看懂了吧

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
miantouchi + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

3
 楼主| 发表于 2019-11-14 20:42:34 | 只看该作者
本帖最后由 miantouchi 于 2019-11-14 20:44 编辑
灯笼菜刀王 发表于 2019-11-14 20:07
这里每次刷新, 都是经过了 装备上B, 记录增减数值, 装备回A 的过程

所以, 你第一个问题的答案 ...


我今天还纳闷呢,这代码闹着玩呢,
比方我手上是铜剑,包里是铁剑,
装备铁剑,然后又装备上铜剑。
来来回回和没处理一样,经过你提醒
这个过程纯粹是为了记录装备后的数值。
然后把装备后的值描绘出来,被装备的原始武器还没有改变,就达到了,光标移动能自动显示对比的数值了。
现在一看看是我思路跟不上趟
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14106
在线时间
2141 小时
注册时间
2019-1-24
帖子
1121

R考场第七期纪念奖

4
 楼主| 发表于 2019-11-14 21:23:57 | 只看该作者
灯笼菜刀王 发表于 2019-11-14 20:07
这里每次刷新, 都是经过了 装备上B, 记录增减数值, 装备回A 的过程

所以, 你第一个问题的答案 ...

对了还有一个问题
def equip(equip_type, id)
    case equip_type
    when 0  # 武器
      if id == 0 or $game_party.weapon_number(id) > 0
        $game_party.gain_weapon(@weapon_id, 1)
        @weapon_id = id
        $game_party.lose_weapon(id, 1)
      end
end
其中,id == 0 or $game_party.weapon_number(id) > 0这句话不太明白
比方我现在装备的铜剑id==1,物品栏是铁剑id==2
id != 0 ,后面的 $game_party.weapon_number(id)为什么要用这个判断?
1.队伍武器数量也就是id>0何必写那么长呢?
直接id==0 or id >0得了
2.$game_party.weapon_number(id)是队伍所持id这个武器数量,包含人物身上装备的吗?

点评

哈哈,我就理解个字面啊,不过你这么说,我就明白了。  发表于 2019-11-14 23:11
你都知道是为了判断包里有没有这个道具了, 那还问为啥? 要装备的时候自然要先判断包里有没有这东西啦, 而id==0是表示卸下的时候  发表于 2019-11-14 23:01
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-24 17:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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