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

Project1

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

[已经解决] [艾薇脚本学习]Scene_Battle中主回合更新问题

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
49
在线时间
286 小时
注册时间
2009-8-5
帖子
566
跳转到指定楼层
1
发表于 2009-10-29 22:11:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 艾薇 于 2009-10-30 09:14 编辑

最近一直潜心研究RPGMakerXP代码部分,不懂的好多哦。
我的问题如下:
问题位置:Scene_Battle4中update_phase4_step2


问题代码:
    # 如果不是强制行动
    unless @active_battler.current_action.forcing
      # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # 设置行动为攻击
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
    end

问题描述:
我主要是不明白这段话:

      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end

据我理解,当当前行动对象不是强制行动对象并且该对象被限制为不能行动,则清除行动强制对像的战斗者并转移至主回合步骤1……

问题是当前行动对象被限制为不能行动,和临时数据中设置的forcing_battler有啥关系呀……扯不上么…… 不懂,望解答~~

PS:如果找到了答案,如何关闭问题我也不知道撒,有知道的人请解答,3Q


======================我是开心的分割线====================

总结:

根据后知后觉君和紫苏君和我本人,基本判定在unless嵌套下的第二个if该语句90%概率是多余的。

以上。

让你们不应征,人家已经娶到老婆的口胡~~
--------------------------------------------------
作者blog(此人到处安家落户,其实东西都一样么==主号在百度):
点击我,我是度娘博客链接
点击我,我是网易博客链接
点击我,我是新浪博客链接

最近启动的RpgMakerXp人物立绘(头像)补完计划(不知何时才会有时间有心情画……)=》我是链接,查看作者龟速进度请戳我

曾经的作者初中到大学的进化过程=》我是链接,查看作者历史渣作请猛戳我

Lv1.梦旅人

梦石
0
星屑
49
在线时间
286 小时
注册时间
2009-8-5
帖子
566
9
 楼主| 发表于 2009-10-30 09:11:16 | 只看该作者
本帖最后由 艾薇 于 2009-10-30 19:11 编辑

谢谢后知后觉君和紫苏君。看样子是多余的概率有99%。我就当它多余的吧,标记一下,以后看完相关类,再回来看看。最终再确认1%,吼吼\(^o^)/~
以后有其他问题还请多多关照。

PS:不会结贴。麻烦哪位指个路呀~~吼吼

让你们不应征,人家已经娶到老婆的口胡~~
--------------------------------------------------
作者blog(此人到处安家落户,其实东西都一样么==主号在百度):
点击我,我是度娘博客链接
点击我,我是网易博客链接
点击我,我是新浪博客链接

最近启动的RpgMakerXp人物立绘(头像)补完计划(不知何时才会有时间有心情画……)=》我是链接,查看作者龟速进度请戳我

曾经的作者初中到大学的进化过程=》我是链接,查看作者历史渣作请猛戳我
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
8
发表于 2009-10-30 08:06:34 | 只看该作者
这两者是不同的——
@active_battler.current_action.forcing 这个变量标记了 @active_battler 当前是否强制行动;
$game_temp.forcing_battler 则是当前强制且立即行动的战斗者对象~
从楼上后知的代码中就不难看出,$game_temp.forcing_battler 所标记的战斗者是 Game_BattleAction#forcing 所标记的战斗者的一个子集,所以在一回合中,强制行动命令执行后,Game_BattleAction#clear 调用之前的任何时候“BattleAction#forcing 不为真 => $game_temp.forcing_battler 为空”这个引理都为真,这样清空立即行动的战斗者看来这一句确实是多余的~

参考:
http://rpg.blue/viewthread.php?tid=120946
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6865
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

7
发表于 2009-10-29 23:54:26 | 只看该作者
这个就要从头看了
    # 强制行动的战斗者存在的情况下
    if $game_temp.forcing_battler != nil
      # 在头部添加后移动
      @action_battlers.delete($game_temp.forcing_battler)
      @action_battlers.unshift($game_temp.forcing_battler)
    end
    # 未行动的战斗者不存在的情况下 (全员已经行动)
    if @action_battlers.size == 0
      # 开始同伴命令回合
      start_phase2
      return
    end
    # 初始化动画 ID 和公共事件 ID
    @animation1_id = 0
    @animation2_id = 0
    @common_event_id = 0
    # 未行动的战斗者移动到序列的头部
    @active_battler = @action_battlers.shift

强制行动的人会在每个回合最开始就行动
而在解释器的强制行动里找到这样几行
        # 设置强制标志
        battler.current_action.forcing = true
        # 行动有效并且是 [立即执行] 的情况下
        if battler.current_action.valid? and @parameters[5] == 1
          # 设置强制对像的战斗者
          $game_temp.forcing_battler = battler

角色的强制行动标志和$game_temp的是同时设置 的
根据逻辑判断角色是强制行动那就必然是和$game_temp指向的同一个人
但是既然都unless了又干嘛还要清楚一次
这个答案没找到
或许是在某个角落里.或许这一行是多余的- -
要把脚本全部看完记熟了才晓得- -











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
286 小时
注册时间
2009-8-5
帖子
566
6
 楼主| 发表于 2009-10-29 23:38:46 | 只看该作者
呃,貌似在进入主回合步骤2刷新前,执行事件解释器,可能将当前行动者设为forcing_battler
但是这样又衍生了一个问题:
@active_battler.current_action.forcing=false难道$game_temp.forcing_battler = nil
不应该为空么??
前者表示当前行动者不是强制行动,后者表示没有强制行动者
如果强制行动者就是当前行动者,两者应该是统一的呀呀呀呀呀呀
我混乱了……

让你们不应征,人家已经娶到老婆的口胡~~
--------------------------------------------------
作者blog(此人到处安家落户,其实东西都一样么==主号在百度):
点击我,我是度娘博客链接
点击我,我是网易博客链接
点击我,我是新浪博客链接

最近启动的RpgMakerXp人物立绘(头像)补完计划(不知何时才会有时间有心情画……)=》我是链接,查看作者龟速进度请戳我

曾经的作者初中到大学的进化过程=》我是链接,查看作者历史渣作请猛戳我
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
286 小时
注册时间
2009-8-5
帖子
566
5
 楼主| 发表于 2009-10-29 23:18:14 | 只看该作者
这个unless~~~end就是这2个if的大前提——明白。就是不明白为什么不判断  $game_temp.forcing_battler 中存的是不是当前行动者就清了……= =

让你们不应征,人家已经娶到老婆的口胡~~
--------------------------------------------------
作者blog(此人到处安家落户,其实东西都一样么==主号在百度):
点击我,我是度娘博客链接
点击我,我是网易博客链接
点击我,我是新浪博客链接

最近启动的RpgMakerXp人物立绘(头像)补完计划(不知何时才会有时间有心情画……)=》我是链接,查看作者龟速进度请戳我

曾经的作者初中到大学的进化过程=》我是链接,查看作者历史渣作请猛戳我
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6865
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

4
发表于 2009-10-29 22:57:19 | 只看该作者
# 如果不是强制行动
    unless @active_battler.current_action.forcing
上面这一行满足的时候才会进行下面的内容.根据语法  unless~~end.你找找看这个unless对应的end是哪一个?
      # 限制为 [敌人为普通攻击] 或 [我方为普通攻击] 的情况下
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # 设置行动为攻击
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
这个end是上面那个if的end
      # 限制为 [不能行动] 的情况下
      if @active_battler.restriction == 4
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil
        # 移至步骤 1
        @phase4_step = 1
        return
      end
这个end是第二个if的end
    end
最后这个end才是unless的end
那2个if是在unless~~~end之间所以这个unless~~~end就是这2个if的大前提











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
286 小时
注册时间
2009-8-5
帖子
566
3
 楼主| 发表于 2009-10-29 22:40:15 | 只看该作者
unless @active_battler.current_action.forcing
不是表示的是当前行动对象不是强制行动对象么……
而且,  执行下面这句的时候,也没有判断是不是当前行动者被强制行动,直接就清了   
        # 清除行动强制对像的战斗者
        $game_temp.forcing_battler = nil

呃,偶太愚钝了,还望解释的详细些~~~

让你们不应征,人家已经娶到老婆的口胡~~
--------------------------------------------------
作者blog(此人到处安家落户,其实东西都一样么==主号在百度):
点击我,我是度娘博客链接
点击我,我是网易博客链接
点击我,我是新浪博客链接

最近启动的RpgMakerXp人物立绘(头像)补完计划(不知何时才会有时间有心情画……)=》我是链接,查看作者龟速进度请戳我

曾经的作者初中到大学的进化过程=》我是链接,查看作者历史渣作请猛戳我
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6865
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

2
发表于 2009-10-29 22:29:18 | 只看该作者
事件指令里有个是 强制行动
如果当前行动者就是这个被强制行动的话.
状态附加的限制效果就无效了











你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-29 10:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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