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

Project1

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

[已经解决] 走一步才刷新一下的脚本如何实现?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
跳转到指定楼层
1
发表于 2020-10-11 17:56:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想要实现一个,在行走时会消耗能源的功能。
而且是要直接反应在窗口上。窗口写好了。但是这个监听功能绑在帧更新上好像太浪费内存了。(一秒60次)
所以想角色行走一步监听一次。扣一次能源并在画面窗口显示出来。

PS 窗口,显示、描画的问题我都解决了。就是刷新要绑那里这个问题。多谢多谢。

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2020-10-11 18:03:31 | 只看该作者
if 记录变量 != 当前步数
    刷新
    记录变量 = 当前步数
end
回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
3
发表于 2020-10-11 18:26:41 | 只看该作者
本帖最后由 alexncf125 于 2020-10-11 21:12 编辑

參考一下下面的脚本好了,  跑步跑一步扣7次, 原地停留每10帧加1次
208行: return unless moving?
209行: return unless dash?
222行: return unless Graphics.frame_count % YES::DASH::RESTORE_AFTER == 0
RUBY 代码复制
  1. #==============================================================================
  2. #
  3. # ▼ Yami Engine Symphony - Dash Stamina
  4. # -- Last Updated: 2013.02.27
  5. # -- Level: Easy
  6. # -- Requires: n/a
  7. #
  8. #==============================================================================
  9.  
  10. $imported = {} if $imported.nil?
  11. $imported["YES-DashStamina"] = true
  12.  
  13. #==============================================================================
  14. # ▼ Updates
  15. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  16. # 2013.02.27 - Added recover method.
  17. #            - Added rest area feature.
  18. # 2012.11.18 - Fixed Enable Window option.
  19. # 2012.11.17 - Added recovery frames.
  20. #            - Added stamina variable.
  21. #            - Fixed recovery problem when holding Shift.
  22. # 2012.11.15 - Started and Finished Script.
  23. #
  24. #==============================================================================
  25. # ▼ Introduction
  26. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  27. # This script provides stamina feature for dashing on map. Dashing will comsume
  28. # stamina and be disable if run our of stamina.
  29. #
  30. #==============================================================================
  31. # ▼ Instructions
  32. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  33. # To install this script, open up your script editor and copy/paste this script
  34. # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
  35. #
  36. # -----------------------------------------------------------------------------
  37. # Script Calls - These commands are used with script calls.
  38. # -----------------------------------------------------------------------------
  39. # YES.recover_stamina
  40. # Fully recover stamina for player.
  41. #
  42. # YES.recover_stamina(X)
  43. # Recover X stamina for player.
  44. #
  45. #==============================================================================
  46. # ▼ Compatibility
  47. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  48. # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
  49. # it will run with RPG Maker VX without adjustments.
  50. #
  51. #==============================================================================
  52.  
  53. #==============================================================================
  54. # ■ Configuration
  55. #==============================================================================
  56.  
  57. module YES
  58.   module DASH
  59.  
  60.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  61.     # - General Settings -
  62.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  63.     STAMINA_DEFAULT    = 200    # Default Stamina for player.
  64.     STAMINA_PER_FRAME  = 1      # Default Stamina cost per frame while dashing.
  65.     MOVE_RESTORE       = false  # Set this to false to disable restoring
  66.                                 # stamina while moving.
  67.     RECOVER_FRAMES     = 120    # Start recovering after X frames.
  68.     STAMINA_RESTORE    = 1      # Restoring Stamina per X frames.
  69.     RESTORE_AFTER      = 10     # Restore Stamina after X frames.
  70.     REST_AREA_RATE     = 1      # Restore rate when standing on rest area.
  71.                                 # Set this to 1 to disable rest area function.
  72.     REST_AREA_REGION   = 19     # Region ID of rest area.
  73.  
  74.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  75.     # - Switches and Variables Settings -
  76.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  77.     STAMINA_VARIABLE   = 1100      # Variable to control stamina.
  78.     DISABLE_SWITCH     = 98      # Switch to toggle Stamina Feature.
  79.                                  # Set to true to disable Stamina Feature.
  80.  
  81.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  82.     # - Windows Settings -
  83.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  84.     ENABLE_WINDOW      = true   # Toggle stamina window.
  85.     AUTO_HIDE_WINDOW   = false   # Toggle auto-hide function for Stamina Window.
  86.     HIDE_AFTER_FRAMES  = 300    # Hide after X frames if not dashing.
  87.     STAMINA_TEXT       = "耐力"
  88.     WINDOW_WIDTH       = 180
  89.     BAR_COLORS         = { # Settings for stamina bar colors.
  90.       :color1          => 28,
  91.       :color2          => 29,
  92.     } # Do not remove this.
  93.  
  94.   end # DASH
  95. end # YES
  96.  
  97. #==============================================================================
  98. # ▼ Editting anything past this point may potentially result in causing
  99. # computer damage, incontinence, explosion of user's head, coma, death, and/or
  100. # halitosis so edit at your own risk.
  101. #==============================================================================
  102.  
  103. #==============================================================================
  104. # ■ Module Yami Engine Symphony
  105. #==============================================================================
  106.  
  107. module YES
  108.  
  109.   #--------------------------------------------------------------------------
  110.   # self.recover_stamina
  111.   #--------------------------------------------------------------------------
  112.   def self.recover_stamina(amount = :full)
  113.     $game_player.recover_stamina(amount)
  114.   end
  115.  
  116. end # YES
  117.  
  118. #==============================================================================
  119. # ■ Game_Player
  120. #==============================================================================
  121.  
  122. class Game_Player < Game_Character
  123.  
  124.   #--------------------------------------------------------------------------
  125.   # * Public Instance Variables
  126.   #--------------------------------------------------------------------------
  127.   attr_accessor :stamina_backup
  128.  
  129.   #--------------------------------------------------------------------------
  130.   # alias method: initialize
  131.   #--------------------------------------------------------------------------
  132.   alias dash_initialize initialize
  133.   def initialize
  134.     dash_initialize
  135.     #---
  136.     @stamina = YES::DASH::STAMINA_DEFAULT
  137.     $game_variables[YES::DASH::STAMINA_VARIABLE] = YES::DASH::STAMINA_DEFAULT
  138.     #---
  139.     @recover_frames = 0
  140.     @stamina_backup = {}
  141.   end
  142.  
  143.   #--------------------------------------------------------------------------
  144.   # new method: stamina
  145.   #--------------------------------------------------------------------------
  146.   def stamina
  147.     return @stamina
  148.   end
  149.  
  150.   #--------------------------------------------------------------------------
  151.   # new method: stamina_max
  152.   #--------------------------------------------------------------------------
  153.   def stamina_max
  154.     $game_variables[YES::DASH::STAMINA_VARIABLE]
  155.   end
  156.  
  157.   #--------------------------------------------------------------------------
  158.   # new method: stamina_rate
  159.   #--------------------------------------------------------------------------
  160.   def stamina_rate
  161.     stamina.to_f / stamina_max.to_f
  162.   end
  163.  
  164.   #--------------------------------------------------------------------------
  165.   # new method: stamina_cost
  166.   #--------------------------------------------------------------------------
  167.   def stamina_cost
  168.     [YES::DASH::STAMINA_PER_FRAME, @stamina].min
  169.   end
  170.  
  171.   #--------------------------------------------------------------------------
  172.   # new method: recover_stamina
  173.   #--------------------------------------------------------------------------
  174.   def recover_stamina(amount = :full)
  175.     if amount.is_a?(Integer)
  176.       @stamina += amount
  177.       correct_stamina
  178.     else
  179.       @stamina = stamina_max
  180.     end
  181.   end
  182.  
  183.   #--------------------------------------------------------------------------
  184.   # alias method: update
  185.   #--------------------------------------------------------------------------
  186.   alias dash_update update
  187.   def update
  188.     dash_update
  189.     update_dash_stamina
  190.     #---
  191.     correct_stamina
  192.     #---
  193.     update_stamina_recover
  194.   end
  195.  
  196.   #--------------------------------------------------------------------------
  197.   # new method: correct_stamina
  198.   #--------------------------------------------------------------------------
  199.   def correct_stamina
  200.     @stamina = stamina_max if @stamina > stamina_max
  201.     @stamina = 0 if @stamina < 0
  202.   end
  203.  
  204.   #--------------------------------------------------------------------------
  205.   # new method: update_dash_stamina
  206.   #--------------------------------------------------------------------------
  207.   def update_dash_stamina
  208.     return unless moving?
  209.     return unless dash?
  210.     @stamina = @stamina - stamina_cost
  211.     @stamina = 0 if @stamina < 0
  212.     @recover_frames = YES::DASH::RECOVER_FRAMES
  213.   end
  214.  
  215.   #--------------------------------------------------------------------------
  216.   # new method: update_stamina_recover
  217.   #--------------------------------------------------------------------------
  218.   def update_stamina_recover
  219.     @recover_frames -= 1
  220.     return if @recover_frames > 0
  221.     return if moving? && YES::DASH::MOVE_RESTORE
  222.     return unless Graphics.frame_count % YES::DASH::RESTORE_AFTER == 0
  223.     return correct_stamina if @stamina >= stamina_max
  224.     @stamina += stamina_recover
  225.     @stamina = stamina_max if @stamina > stamina_max
  226.   end
  227.  
  228.   #--------------------------------------------------------------------------
  229.   # alias method: dash?
  230.   #--------------------------------------------------------------------------
  231.   alias stamina_dash? dash?
  232.   def dash?
  233.     return false if @stamina <= 0 && !$game_switches[YES::DASH::DISABLE_SWITCH]
  234.     return stamina_dash?
  235.   end
  236.  
  237.   #--------------------------------------------------------------------------
  238.   # new method: stamina_recover
  239.   #--------------------------------------------------------------------------
  240.   def stamina_recover
  241.     YES::DASH::STAMINA_RESTORE * rest_area_rate
  242.   end
  243.  
  244.   #--------------------------------------------------------------------------
  245.   # new method: on_rest_area?
  246.   #--------------------------------------------------------------------------
  247.   def on_rest_area?
  248.     region_id == YES::DASH::REST_AREA_REGION
  249.   end
  250.  
  251.   #--------------------------------------------------------------------------
  252.   # new method: rest_area_rate
  253.   #--------------------------------------------------------------------------
  254.   def rest_area_rate
  255.     on_rest_area? ? YES::DASH::REST_AREA_RATE : 1
  256.   end
  257.  
  258. end # Game_Player
  259.  
  260. #==============================================================================
  261. # ■ Window_Stamina
  262. #==============================================================================
  263.  
  264. class Window_Stamina < Window_Base
  265.  
  266.   #--------------------------------------------------------------------------
  267.   # initialize
  268.   #--------------------------------------------------------------------------
  269.   def initialize
  270.     super(24, Graphics.height - 74, YES::DASH::WINDOW_WIDTH, 50)
  271.     @time = YES::DASH::HIDE_AFTER_FRAMES
  272.     refresh
  273.     #---
  274.     $game_player.stamina_backup[:x] ||= self.x
  275.     $game_player.stamina_backup[:time] ||= @time
  276.     self.x = $game_player.stamina_backup[:x]
  277.     @time = $game_player.stamina_backup[:time]
  278.   end
  279.  
  280.   #--------------------------------------------------------------------------
  281.   # refresh
  282.   #--------------------------------------------------------------------------
  283.   def refresh
  284.     return if @stamina && @stamina == $game_player.stamina
  285.     contents.clear
  286.     #---
  287.     draw_stamina_bar(0, 0, YES::DASH::WINDOW_WIDTH - 24)
  288.     #---
  289.     @stamina = $game_player.stamina
  290.   end
  291.  
  292.   #--------------------------------------------------------------------------
  293.   # stamina_bar_color1
  294.   #--------------------------------------------------------------------------
  295.   def stamina_bar_color1
  296.     text_color(YES::DASH::BAR_COLORS[:color1])
  297.   end
  298.  
  299.   #--------------------------------------------------------------------------
  300.   # stamina_bar_color2
  301.   #--------------------------------------------------------------------------
  302.   def stamina_bar_color2
  303.     text_color(YES::DASH::BAR_COLORS[:color2])
  304.   end
  305.  
  306.   #--------------------------------------------------------------------------
  307.   # draw_stamina_bar
  308.   #--------------------------------------------------------------------------
  309.   def draw_stamina_bar(x, y, width = 156)
  310.     draw_gauge(x, y, width,$game_player.stamina_rate, stamina_bar_color1, stamina_bar_color2)
  311.     change_color(system_color)
  312.     draw_text(x, y, contents.width, line_height, YES::DASH::STAMINA_TEXT)
  313.     draw_current_and_max_values(x, y, width, $game_player.stamina,
  314.       $game_player.stamina_max, normal_color, normal_color)
  315.   end
  316.  
  317.   #--------------------------------------------------------------------------
  318.   # update
  319.   #--------------------------------------------------------------------------
  320.   def update
  321.     super
  322.     update_hide
  323.     update_show
  324.     update_input
  325.     refresh
  326.     $game_switches[YES::DASH::DISABLE_SWITCH] ? self.hide : self.show
  327.     self.hide unless YES::DASH::ENABLE_WINDOW
  328.   end
  329.  
  330.   #--------------------------------------------------------------------------
  331.   # update_hide
  332.   #--------------------------------------------------------------------------
  333.   def update_hide
  334.     return unless YES::DASH::AUTO_HIDE_WINDOW
  335.     return if $game_player.dash?
  336.     @time -= 1
  337.     return unless @time <= 0
  338.     #---
  339.     self.x -= 9 if self.x > -self.width
  340.   end
  341.  
  342.   #--------------------------------------------------------------------------
  343.   # update_show
  344.   #--------------------------------------------------------------------------
  345.   def update_show
  346.     return unless YES::DASH::AUTO_HIDE_WINDOW
  347.     return unless @show
  348.     @time = YES::DASH::HIDE_AFTER_FRAMES
  349.     self.x += 8 if self.x < 24
  350.     @show = false if self.x >= 24
  351.   end
  352.  
  353.   #--------------------------------------------------------------------------
  354.   # update_input
  355.   #--------------------------------------------------------------------------
  356.   def update_input
  357.     return unless $game_player.dash?
  358.     return unless $game_player.moving?
  359.     @show = true
  360.   end
  361.  
  362.   #--------------------------------------------------------------------------
  363.   # dispose
  364.   #--------------------------------------------------------------------------
  365.   def dispose
  366.     $game_player.stamina_backup[:x] = self.x
  367.     $game_player.stamina_backup[:time] = @time
  368.     super
  369.   end
  370.  
  371. end # Window_Stamina
  372.  
  373. #==============================================================================
  374. # ■ Scene_Map
  375. #==============================================================================
  376.  
  377. class Scene_Map < Scene_Base
  378.  
  379.   #--------------------------------------------------------------------------
  380.   # alias method: create_all_windows
  381.   #--------------------------------------------------------------------------
  382.   alias dash_create_all_windows create_all_windows
  383.   def create_all_windows
  384.     dash_create_all_windows
  385.     create_dash_window
  386.   end
  387.  
  388.   #--------------------------------------------------------------------------
  389.   # new method: create_dash_window
  390.   #--------------------------------------------------------------------------
  391.   def create_dash_window
  392.     @stamina_window = Window_Stamina.new
  393.   end
  394.  
  395. end # Scene_Map
  396.  
  397. #==============================================================================
  398. #
  399. # ▼ End of File
  400. #
  401. #==============================================================================
回复 支持 1 反对 0

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
34720
在线时间
6739 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

4
发表于 2020-10-11 19:01:38 | 只看该作者
那就只有在数值变动时才重绘窗口啊
存一个当前已经绘制了的值(如果窗口dispose了就置nil,防止再开时不绘制)
如果当前值和已经绘制了的值相同,就不重绘

效率损耗都是在绘制上的,其他数值更新没啥
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
5
 楼主| 发表于 2020-10-11 19:03:47 | 只看该作者
灯笼菜刀王 发表于 2020-10-11 18:03
if 记录变量 != 当前步数
    刷新
    记录变量 = 当前步数

我试了下这个脚本。虽然可能没有描绘那么多次了。
但是我 p 了那个反映到窗口的数值,还是一秒60次在那儿蹦………
那电脑内存根本就没少多少事嘛!
也许在 class Scene_Base
#--------------------------------------------------------------------------
  # ● 更新所有窗口
  #--------------------------------------------------------------------------
  def update_all_windows
    instance_variables.each do |varname|
      ivar = instance_variable_get(varname)
      ivar.update if ivar.is_a?(Window)
    end
  end
即使是没有 update 的 继承 Window_Base 的新建窗口中,吊在那里准备描画的数值同样被1秒60次的调用。
我试著把 refresh 去掉都不行。
好吧,电脑这点996实在太过九牛一毛了,我们人类就不要瞎费心了。

点评

会拖累的是重复描绘窗口, 而你是步数产生变化的时候才需要更新, 那 当新步数 != 旧步数时刷新, 然后让它们一致, 这样就可以避免持续描绘窗口了  发表于 2020-10-11 19:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
6
 楼主| 发表于 2020-10-11 19:09:23 | 只看该作者
alexncf125 发表于 2020-10-11 18:26
參考一下好了,  下面的脚本跑步跑一步会扣7次, 原地停留每10帧加1次
208行: return unless moving?
209行:  ...

非常感谢,我只是想优化一下运算的内存,真的没想要弄个几百行的脚本。
我有自知之明,搞不定的就放著不管。再次感谢。

点评

所以说是拿来參考嘛  发表于 2020-10-11 19:16
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
7
发表于 2020-10-11 19:18:53 | 只看该作者
alianlord 发表于 2020-10-11 19:09
非常感谢,我只是想优化一下运算的内存,真的没想要弄个几百行的脚本。
我有自知之明,搞不定的就放著不 ...

或者你可以这样写
  1. class Game_Party
  2.   alias update_increase_steps increase_steps
  3.   def increase_steps
  4.     你要執行的內容
  5.     update_increase_steps
  6.   end
  7. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 04:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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