Project1

标题: 请教用第6号变量控制一个纵向进度条的方法(fill_rect) [打印本页]

作者: taeckle    时间: 2022-5-26 19:45
标题: 请教用第6号变量控制一个纵向进度条的方法(fill_rect)
本帖最后由 taeckle 于 2022-5-28 17:33 编辑

大家好,我想在默认脚本基础上制作一个纵向跑的进度条,进度条设置为红色, 宽度设置为30px始终保持不变, 高度最大500px(对应100%满进度), 进度条从下往上跑, 位置在左下方就行,最后也是最重要的是进度条进度随第6号变量变化而变化(当然第六号变量只会在0-100这个范围内变化,对应的是进度0%至100%),

现在我想达到的目的很简单, 进入这个进度条场景($Scene=Scene_Jindutiao.new)后先保证第6号变量是0, 只要每按一下回车键第6号变量会增加10, 且进度条垂直上升10%,下面附上我自己写的代码,还请大神指点指点,多谢了 :
  1. class Doujiu_Huihe < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(110, 200, 80, 56)
  7.     self.contents = Bitmap.new(width - 32, height - 32)
  8.     self.visible = true   
  9.   end  
  10.    
  11.   def update(num=0)
  12.     self.contents.clear   
  13.     self.contents.font.size=23     
  14.     self.contents.font.color = Color.new(120, 255, 128, 255)
  15.     self.contents.draw_text(0, 0, 32, 32, num.to_s,1)
  16.   end  
  17. end  

  18. class Scene_Jindutiao
  19.   def main
  20.    #生成背景图片
  21.    @background_pic = Sprite.new
  22.    @background_pic.bitmap = RPG::Cache.picture("进度图.png")
  23.    #生成回合数
  24.    @round_index=0
  25.    #生成回合数窗口   
  26.    @round_window= Doujiu_Huihe.new
  27.    @round_window.back_opacity = 0
  28.    @round_window.opacity = 0   
  29.    @round_window.x = 288
  30.    @round_window.y = 343
  31.    @round_window.update(@round_index)   
  32.    #生成纵向进度条
  33.    @tipsy_1 = Sprite.new
  34.    @tipsy_1.bitmap = Bitmap.new(8,340)
  35.    @tipsy_1.bitmap.fill_rect(0,20,7,340,Color.new(255,215,0))
  36.    @tipsy_1.x = 39
  37.    @tipsy_1.y = 454
  38.    @tipsy_1.ox = @tipsy_1.bitmap.width  
  39.    @tipsy_1.oy = @tipsy_1.bitmap.height
  40.    @tipsy_1.zoom_x = 1
  41.    @tipsy_1.zoom_y = 0
  42.    #生成命令窗口
  43.    s1 = "提升进度"
  44.    s2 = "使用特技"
  45.    s3 = "投降认输"
  46.    @command_window = Window_Command.new(130, [s1, s2, s3])
  47.    @command_window.index=0   
  48.    @command_window.opacity = 128     
  49.    @command_window.back_opacity = 150
  50.    @command_window.x = 265
  51.    @command_window.y = 150

  52.    
  53.    Graphics.transition
  54.    # 主循环
  55.    loop do
  56.      # 刷新游戏画面
  57.      Graphics.update
  58.      # 刷新输入信息
  59.      Input.update
  60.      # 刷新画面
  61.      update
  62.      # 如果画面切换的话就中断循环
  63.      if $scene != self
  64.        break
  65.      end
  66.    end         
  67.     # 准备过渡
  68.     Graphics.freeze
  69.     @background_pic.bitmap.dispose   
  70.     @background_pic.dispose   
  71.     @command_window.dispose
  72.     @round_window.dispose
  73.     @tipsy_1.bitmap.dispose
  74.     @tipsy_1.dispose        
  75.   end   
  76.    
  77.   def update
  78.     @command_window.update
  79.     @round_window.update(@round_index)   
  80.    
  81.    
  82.     if Input.trigger?(Input::B)
  83.      # 演奏取消 SE
  84.      $game_system.se_play($data_system.cancel_se)
  85.      # 切换到地图画面
  86.      $scene = Scene_Map.new
  87.      return
  88.     end  
  89.     if Input.trigger?(Input::C)
  90.       # 命令窗口的光标位置的分支
  91.      case @command_window.index
  92.       when 0
  93.        $game_variables[6]=10

  94.        if (@tipsy_1.zoom_y*100).round+$game_variables[6] >= 100
  95.        @tipsy_1.zoom_y = 1
  96.        elsif (@tipsy_1.zoom_y*100).round < 100
  97.        @tipsy_1.zoom_y += $game_variables[6]*0.01
  98.        end

  99.        @round_index+=1   
  100.       when 1  

  101.       when 2  # 退出
  102.        $game_system.se_play($data_system.cancel_se)
  103.        $scene = Scene_Map.new
  104.       return
  105.      end
  106.     end   
  107.   end
  108.   
  109. end   
复制代码



作者: enghao_lim    时间: 2022-5-26 21:14
本帖最后由 enghao_lim 于 2022-5-26 21:17 编辑
  1.       # 按下 C 键的情况下
  2.    if Input.trigger?(Input::C)
  3.      $game_variables[6]+=10
  4. refresh() #<= 把刷新加在这里
  5.    end
复制代码

无测试,目测只是没有调用刷新。
作者: guoxiaomi    时间: 2022-5-26 21:36
本帖最后由 guoxiaomi 于 2022-5-26 21:42 编辑

可以再回去看看RGSS中各种Window类里对self.contents的定义(以及F1),会发现contents的宽和高比window各少32。这是因为window要绘制边界。

建议调大window本身的宽和高,或者试着设置window_skin = nil,后者不保证有用。
作者: RPGzh500223    时间: 2022-5-26 22:31
这代码写得……挺好的反面案例
楼上说的问题都有 ,再者Windows#y => 500 早就超出画面了……
你还不如直接Sprite好了, 除了Bitmap#fill_rect,还可以Sprite#zoom_y进行缩放也可以达到你想要的效果
作者: taeckle    时间: 2022-5-26 22:56
本帖最后由 taeckle 于 2022-5-27 05:36 编辑
guoxiaomi 发表于 2022-5-26 21:36
可以再回去看看RGSS中各种Window类里对self.contents的定义(以及F1),会发现contents的宽和高比window各 ...


报告大神,我们按照你提示的把进度条搞出来了,但是目前的问题是按了回车键进度条只能下降不能上升啊..
作者: qq634488405    时间: 2022-5-27 13:55
taeckle 发表于 2022-5-26 22:56
报告大神,我们按照你提示的把进度条搞出来了,但是目前的问题是按了回车键进度条只能下降不能上升啊..{: ...

   #描绘纵向进度条
   self.contents.fill_rect(x+1, 100, 10,5*$game_variables[6], Color.new(255, 0, 0))
因为你这进度条左上角坐标(x+1,100),宽度10,高度5*变量6,高度在增大,所以往下跑
作者: qq634488405    时间: 2022-5-28 10:10
qq634488405 发表于 2022-5-27 13:55
#描绘纵向进度条
   self.contents.fill_rect(x+1, 100, 10,5*$game_variables[6], Color.new(255, 0, ...

负数不知道会怎样。。可以同步变更y坐标和高度
作者: guoxiaomi    时间: 2022-5-28 19:40
Doujiu_Huihe的那个方法用refresh更好点,Window_Base类其实是有update方法的,你这样做就覆盖掉了,虽然没啥问题。你也可以参照Window_Help,写一个set_xxx方法。
作者: taeckle    时间: 2022-5-31 16:24
这个帖子问题解决了!我们要申请精品帖子!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1