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

Project1

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

[有事请教] 有关于解释器战斗的程序问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4647
在线时间
281 小时
注册时间
2013-10-13
帖子
852
跳转到指定楼层
1
发表于 2026-1-24 00:08:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 kvkv97 于 2026-1-24 00:10 编辑

class Interpreter
  #--------------------------------------------------------------------------
  # ● 战斗处理
  #--------------------------------------------------------------------------
  def command_301
    # 如果不是无效的队伍
    if $data_troops[@parameters[0]] != nil
      # 设置中断战斗标志
      $game_temp.battle_abort = true
      # 设置战斗调用标志
      $game_temp.battle_calling = true
      $game_temp.battle_troop_id = @parameters[0]
      $game_temp.battle_can_escape = @parameters[1]
      $game_temp.battle_can_lose = @parameters[2]
      # 设置返回调用
      current_indent = @list[@index].indent
      $game_temp.battle_proc = Proc.new { |n| @branch[current_indent] = n}
    end
    # 推进索引
    @index += 1
    # 结束
    return false
  end

  #--------------------------------------------------------------------------
  # ● 胜利的情况下
  #--------------------------------------------------------------------------
  def command_601
    # 战斗结果为胜利的情况下
    if @branch[@list[@index].indent] == 0
      
      # 删除分支数据
      @branch.delete(@list[@index].indent)   
      # 继续
      return true
    end

    # 不符合条件的情况下 : 指令跳转
    return command_skip
  end
  #--------------------------------------------------------------------------
  # ● 逃跑的情况下
  #--------------------------------------------------------------------------
  def command_602
    # 战斗结果为逃跑的情况下
    if @branch[@list[@index].indent] == 1
      # 删除分支数据
      @branch.delete(@list[@index].indent)
      # 继续
      return true
    end
    # 不符合条件的情况下 : 指令跳转
    return command_skip
  end


设定的是队伍1,允许逃跑,没允许失败,这个的程序列表是:


  #  [#<R::EC:@p=[1,true,false],@i=0,c=301>,
  #   #<R::EC:@p=[],@i=0,c=601>,
  #   #<R::EC:@p=[],@i=1,c=0>
  #   #<R::EC:@p=[],@i=0,c=602>,
  #   #<R::EC:@p=[],@i=1,c=0>
  #   #<R::EC:@p=[],@i=0,c=604>,
  #   #<R::EC:@p=[],@i=0,c=0>]
上面是执行列表,1,执行@list[0].code ——>return command_301,里面有@index += 1和return false,中断循环,
                          2,场景转入战斗,胜利
                          3,执行@list[1].code ——>return command_601,里面有return true即是@index += 1,执行循环,执行@list[2].code ,那么这个是#<R::EC:@p=[],@i=1,c=0>
为什么这个跟P出来的结果不一样,P出来的是  执行#<R::EC:@p=[],@i=0,c=602>,而不是执行#<R::EC:@p=[],@i=1,c=0>,为什么?

Lv5.捕梦者

梦石
0
星屑
41773
在线时间
5970 小时
注册时间
2006-11-10
帖子
6962
2
发表于 2026-1-24 17:30:07 | 只看该作者
因为@i = 0 和 @i = 1 不在同一轴, 编辑器里表现上会往后缩一位 具体看F1

点评

@i = 1 表示它是在某些条件分歧下, 不满足条件自然就跳过咯, 所以默认情况下只执行@i = 0的指令  发表于 2026-1-26 09:43
能具体解释一下吗?还是不懂  发表于 2026-1-24 23:20
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-4 13:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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