じ☆ve冰风 发表于 2024-4-20 01:34:02

【无用脚本】Debuger调试器(阉割版1.0)

因为自己设计游戏时候需要经常调试脚本,之前调试都是使用默认的p或print方法进行查看,真的受不了他的窗口弹出,激活和置顶机制,所以优化了一种 “船新” 的Debuger调试器。该版本还属于测试阶段,有问题欢迎反馈,常年更新。
    什么是阉割版?   答:有很多其它次要功能没有加入,代码没有优化。
    有没有正式版?   答:随缘制作,目前不想做,因为工程暂时没用到,欢迎有能力的人将它完善。

使用方法
    将调试器插入脚本编辑器顶端,在后面使用一个全局变量来创建一个debuger对象,具体如下图:
   
   

    当我们需要观察输出时,可以这样:
   

    它的显示效果如下图:
   
   

    在显示的时候,您可以使用方向键来控制画面,毕竟信息比较多,一次性显示不完。
    当您想退出输出界面时,您可以按下Esc键退出。

代码区:

#--------------------------------------------------------------------------
# 作者:Daviant(蚂蚁)
#--------------------------------------------------------------------------
class Debuger
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
def initialize
    @time = Graphics.frame_count # 获取刷新次数
    @p = 0 # Y轴偏移
    @px = 0 # X轴偏移
    @line = 0 # 当前行
    @col = 0 # 当前列
    @f = 16 # 字体大小
end
#--------------------------------------------------------------------------
# ● 创建
#--------------------------------------------------------------------------
def create
    dispose # 先把之前的状态全部释放
    @sprite = Sprite.new
    @bitmap = Bitmap.new(6400, 6400*2)
    @content = Bitmap.new(640, 480)
    @content.fill_rect(0, 0, 640, 480, Color.new(0,0,0, 150))
    @sprite.bitmap = @content
    @bitmap.font.color = Color.new(0,255,0) #初始化颜色
    @bitmap.font.size = @f
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
    if @sprite
      @sprite.dispose
    end
    if @bitmap
      @bitmap.dispose
      @content.dispose
    end
end
#--------------------------------------------------------------------------
# ● 写文本到Debuger
# text      : 输出内容
#--------------------------------------------------------------------------
def write( text )
      while ((c = text.slice!(/./m)) != nil )
      if c == "\n"
          @line = @line + 1
          @col = 0
      elsif c == "\001"
          # 这里可以扩展颜色管理
          @bitmap.font.bold = false
          @bitmap.font.color = Color.new(0,255,0)
      elsif c == "\002" # 内容样式
          @bitmap.font.bold = false
          @bitmap.font.color = Color.new(0,174,192)
      elsif c == "\003" # 内容样式2
          @bitmap.font.bold = false
          @bitmap.font.color = Color.new(237,144,243)
      elsif c == "\004" # 属性样式
          @bitmap.font.bold = false
          @bitmap.font.color = Color.new(243,220,144)
      elsif c == "\005" # 方法样式
          @bitmap.font.color = Color.new(243,150,144)
          @bitmap.font.bold = true
      else
          if c > 33 && c < 128
            @bitmap.draw_text(@col, (@line-1)*@f, 640, @f, c)
            @col = @col + @f/2
          else
            @bitmap.draw_text(@col, (@line-1)*@f, 640, @f, c)
            @col = @col + @f
          end
      end
      end
end
#--------------------------------------------------------------------------
# ● 输出
# vars      : 要观察的信息变量
# f         : 字体大小
#--------------------------------------------------------------------------
def log( vars, f = 22 )
    # 初始化
    @p = 0
    @px = 0
    @line = 0
    @col = 0
    @f = f
    create
    # 创建信息
    message = "\n"
    message = message + "\001所属类: \002"+vars.class.to_s+"\n"
    message = message + "\001内容: \003"+vars.to_s + "\n"
    t = vars.methods
    i = 0
    attrs = []
    attrsM = ""
    metsM = ""
    mets = []
    logic = false
    for i in 0...t.length
      # 获取属性表
      c = t      logic = c> 64 && c < 91
      logic = logic || c> 96 && c < 124
      logic = logic || c> 127
      if logic && c == 61
         # p c.to_s + "" + c.to_s
         #p c
          attrs.push(c.slice(0, c.length - 1))
          tmp = " "
          tmp = eval("vars."+attrs).to_s
          attrsM = attrsM + "   \004" + attrs + ":\002"+ tmp +"\n"
      else
            mets.push(c)
      end
      end
      # 获取方法表
      for i in 0...attrs.length
      mets.delete(attrs)
      end
      for i in 0...mets.length
      metsM = metsM + "   \002[ \005"+mets+" \002]\n"
      end
    # 拼接信息
    message = message + "\001属性: \002共"+attrs.length.to_s+"个 \n"
    message = message + attrsM + "\n"
    message = message + "\001方法:\002共"+mets.length.to_s+"个 \n"
    message = message + metsM + "\n\001"
    # 写出
    write( message )
    @content.blt(0, 0, @bitmap, Rect.new(@px*@f/2,@p*24,640,480))
    @sprite.z = 10000
    Graphics.transition
    # 等待操作
    wait
end
#--------------------------------------------------------------------------
# ● 等待
#--------------------------------------------------------------------------
def wait
    loop do
      Graphics.update
      Input.update
      if Input.press?(Input::UP)
      @p = @p - 1
      @content.fill_rect(0, 0, 640, 480, Color.new(0,0,0, 150))
      @content.blt(0, 0, @bitmap, Rect.new(@px*@f/4,@p*6,640,480))
      end
      if Input.press?(Input::DOWN)
      @p = @p + 1
      @content.fill_rect(0, 0, 640, 480, Color.new(0,0,0, 150))
      @content.blt(0, 0, @bitmap, Rect.new(@px*@f/4,@p*6,640,480))
      end
      
      if Input.press?(Input::LEFT)
      @px = @px + 1
      @content.fill_rect(0, 0, 640, 480, Color.new(0,0,0, 150))
      @content.blt(0, 0, @bitmap, Rect.new(@px*@f/4,@p*6,640,480))
      end
      if Input.press?(Input::RIGHT)
      @px = @px - 1
      @content.fill_rect(0, 0, 640, 480, Color.new(0,0,0, 150))
      @content.blt(0, 0, @bitmap, Rect.new(@px*@f/4,@p*6,640,480))
      end
      if Input.trigger?(Input::B)
      dispose
      break
      end
    end
end
end




代码API手册
⚪write    【将文本写出到debuger界面。该方法需要与wait一起使用】
      参数1:str字符串文本
      返回:空

⚪log    【输出你的输入信息】
      参数1:要观察的对象
      参数2:可选参数。字体大小,默认22
      返回:空

⚪wait    【等待渲染】
      返回:空

脚本附件下载



             本帖来自P1论坛作者antilmid,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=477662若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 【无用脚本】Debuger调试器(阉割版1.0)