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

Project1

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

[已经解决] 请教用第6号变量控制一个纵向进度条的方法(fill_rect)

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
跳转到指定楼层
1
发表于 2022-5-26 19:45:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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   
复制代码


Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
2
发表于 2022-5-26 21:14:47 | 只看该作者
本帖最后由 enghao_lim 于 2022-5-26 21:17 编辑
  1.       # 按下 C 键的情况下
  2.    if Input.trigger?(Input::C)
  3.      $game_variables[6]+=10
  4. refresh() #<= 把刷新加在这里
  5.    end
复制代码

无测试,目测只是没有调用刷新。

点评

报告大神,测试无效..  发表于 2022-5-26 21:20
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2022-5-26 21:36:27 | 只看该作者
本帖最后由 guoxiaomi 于 2022-5-26 21:42 编辑

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

建议调大window本身的宽和高,或者试着设置window_skin = nil,后者不保证有用。

点评

多谢大神指点!  发表于 2022-5-26 22:27
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
4
发表于 2022-5-26 22:31:12 | 只看该作者
这代码写得……挺好的反面案例
楼上说的问题都有 ,再者Windows#y => 500 早就超出画面了……
你还不如直接Sprite好了, 除了Bitmap#fill_rect,还可以Sprite#zoom_y进行缩放也可以达到你想要的效果

点评

我在论坛的代码基本上都是反面教材.....  发表于 2022-5-26 22:33
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
5
 楼主| 发表于 2022-5-26 22:56:01 | 只看该作者
本帖最后由 taeckle 于 2022-5-27 05:36 编辑
guoxiaomi 发表于 2022-5-26 21:36
可以再回去看看RGSS中各种Window类里对self.contents的定义(以及F1),会发现contents的宽和高比window各 ...


报告大神,我们按照你提示的把进度条搞出来了,但是目前的问题是按了回车键进度条只能下降不能上升啊..
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4721
在线时间
387 小时
注册时间
2012-11-8
帖子
276
6
发表于 2022-5-27 13:55:33 | 只看该作者
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,高度在增大,所以往下跑

点评

那要怎么才能往下跑啊?改成负数?  发表于 2022-5-27 16:50
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4721
在线时间
387 小时
注册时间
2012-11-8
帖子
276
7
发表于 2022-5-28 10:10:07 | 只看该作者
qq634488405 发表于 2022-5-27 13:55
#描绘纵向进度条
   self.contents.fill_rect(x+1, 100, 10,5*$game_variables[6], Color.new(255, 0, ...

负数不知道会怎样。。可以同步变更y坐标和高度

评分

参与人数 1+1 收起 理由
taeckle + 1 大神威武!

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

8
发表于 2022-5-28 19:40:26 | 只看该作者
Doujiu_Huihe的那个方法用refresh更好点,Window_Base类其实是有update方法的,你这样做就覆盖掉了,虽然没啥问题。你也可以参照Window_Help,写一个set_xxx方法。

点评

f1里提到了,窗口类定义的update方法管理窗口光标的闪烁和刷新暂停标记。refresh方法没有特殊意义只是命名习惯  发表于 2022-5-29 13:06
大神请问下叫做refresh的方法主要是用来干什么的?有什么特别之处?跟叫做update的方法就什么区别呢?  发表于 2022-5-29 03:08

评分

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

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
9
 楼主| 发表于 2022-5-31 16:24:06 | 只看该作者
这个帖子问题解决了!我们要申请精品帖子!

点评

本区已经很多年没有设置过精品帖子了  发表于 2022-5-31 20:15
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 14:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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