查看: 4997|回复: 29

[已经解决] 还是脚本的问题(已经解决,谢谢6、11、16楼了)

[复制链接]
梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
发表于 2013-5-5 21:00:25 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 wwwcctvty 于 2013-5-10 22:13 编辑

[pre lang="ruby" line="1"]  def update
    if (Time.now).sec % 20 == 0
      恢复
     end
  end
  def 恢复
    for i in 0...$game_party.bsize
      actor = $game_party.actors
      if actor.hp < actor.maxhp
        actor.hp += 1
      end
    end
  end
[/pre]
请教下大大们。这样写错了没有?怎么现在20秒恢复的hp不是一点,有时是十几点,有时二十几点…………
{:2_263:}
目的:希望在地图上能够每几分钟回复1点HP
梦石
0
星屑
6373
在线时间
1162 小时
注册时间
2012-12-16
回帖
39
发表于 2013-5-5 22:23:47 | 显示全部楼层
在哪里调用的,还有你那个$game_party.bsize写错了,应该是$game_party.size吧。
回复

使用道具 举报

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
 楼主| 发表于 2013-5-5 22:40:11 来自手机 | 显示全部楼层
q86332682 发表于 2013-5-5 22:23 在哪里调用的,还有你那个$game_party.bsize写错了,应该是$game_party.size吧。

bsize是我定义的方法.在地图刷新中调用这里.已经能够调用了.只是回复的hp不是加1.而是加了十几二十.
回复

使用道具 举报

梦石
0
星屑
6373
在线时间
1162 小时
注册时间
2012-12-16
回帖
39
发表于 2013-5-5 23:32:34 | 显示全部楼层
wwwcctvty 发表于 2013-5-5 22:40
bsize是我定义的方法.在地图刷新中调用这里.已经能够调用了.只是回复的hp不是加1.而是加了十几二十. ...

把你写的方法以及调用的地方全部发出来。
回复

使用道具 举报

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
 楼主| 发表于 2013-5-6 12:00:15 | 显示全部楼层
q86332682 发表于 2013-5-5 23:32
把你写的方法以及调用的地方全部发出来。

[pre lang="ruby" line="1"]
#==============================================================================
# ■ Window_PlayTime
#------------------------------------------------------------------------------
#  菜单画面显示游戏时间的窗口。
#==============================================================================

class Window_PlayTime < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 210, 120)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.size = 17
    self.contents.font.color = Color.new(0,0,0,255)
    self.z = 300
    self.opacity = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    time = Time.now
    text = time.strftime("%x   %X")
    self.contents.draw_text(0,18,130,32,text,1)
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.draw_text(4, 0, 160, 32, "日期与游戏时间")
    self.contents.draw_text(0, 36, 130, 32, text, 1)
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
    if @total_sec % 300 == 0
      恢复
    end
  end
  def 恢复
    for i in 0...$game_party.size
      actor = $game_party.actors
      if actor.hp <= actor.maxhp
        actor.hp += 1
      end
    end
  end
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  处理地图画面的类。
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成活动块
    @spriteset = Spriteset_Map.new
    # 生成信息窗口
    @message_window = Window_Message.new
    #######################################
    @tiem = Window_PlayTime.new
    #######################################
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放活动块
    @spriteset.dispose
    ############################
    @tiem.dispose
    #################################
    # 释放信息窗口
    @message_window.dispose
    # 标题画面切换中的情况下
    if $scene.is_a?(Scene_Title)
      # 淡入淡出画面
      Graphics.transition
      Graphics.freeze
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    ##################################
    @tiem.update
    ######################################
    # 循环
    loop do
      # 按照地图、实例、主角的顺序刷新
      # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
      #  的机会的重要因素)
      $game_map.update
      $game_system.map_interpreter.update
      $game_player.update
      # 系统 (计时器)、画面刷新
      $game_system.update
      $game_screen.update
      # 如果主角在场所移动中就中断循环
      unless $game_temp.player_transferring
        break
      end
      # 执行场所移动
      transfer_player
      # 处理过渡中的情况下、中断循环
      if $game_temp.transition_processing
        break
      end
    end
    # 刷新活动块
    @spriteset.update
    # 刷新信息窗口
    @message_window.update
    # 游戏结束的情况下
    if $game_temp.gameover
      # 切换的游戏结束画面
      $scene = Scene_Gameover.new
      return
    end
    # 返回标题画面的情况下
    if $game_temp.to_title
      # 切换到标题画面
      $scene = Scene_Title.new
      return
    end
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      # 执行过渡
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    # 显示信息窗口中的情况下
    if $game_temp.message_window_showing
      return
    end
    # 遇敌计数为 0 且、且遇敌列表不为空的情况下
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      # 不是在事件执行中或者禁止遇敌中
      unless $game_system.map_interpreter.running? or
             $game_system.encounter_disabled
        # 确定队伍
        n = rand($game_map.encounter_list.size)
        troop_id = $game_map.encounter_list[n]
        # 队伍有效的话
        if $data_troops[troop_id] != nil
          # 设置调用战斗标志
          $game_temp.battle_calling = true
          $game_temp.battle_troop_id = troop_id
          $game_temp.battle_can_escape = true
          $game_temp.battle_can_lose = false
          $game_temp.battle_proc = nil
        end
      end
    end
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 不是在事件执行中或菜单禁止中
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
        # 设置菜单调用标志以及 SE 演奏
        $game_temp.menu_calling = true
        $game_temp.menu_beep = true
      end
    end
    # 调试模式为 ON 并且按下 F9 键的情况下
    if $DEBUG and Input.press?(Input::F9)
      # 设置调用调试标志
      $game_temp.debug_calling = true
    end
    # 不在主角移动中的情况下
    unless $game_player.moving?
      # 执行各种画面的调用
      if $game_temp.battle_calling
        call_battle
      elsif $game_temp.shop_calling
        call_shop
      elsif $game_temp.name_calling
        call_name
      elsif $game_temp.menu_calling
        call_menu
      elsif $game_temp.save_calling
        call_save
      elsif $game_temp.debug_calling
        call_debug
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 调用战斗
  #--------------------------------------------------------------------------
  def call_battle
    # 清除战斗调用标志
    $game_temp.battle_calling = false
    # 清除菜单调用标志
    $game_temp.menu_calling = false
    $game_temp.menu_beep = false
    # 生成遇敌计数
    $game_player.make_encounter_count
    # 记忆地图 BGM 、停止 BGM
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # 演奏战斗开始 SE
    $game_system.se_play($data_system.battle_start_se)
    # 演奏战斗 BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到战斗画面
    $scene = Scene_Battle.new
  end
  #--------------------------------------------------------------------------
  # ● 调用商店
  #--------------------------------------------------------------------------
  def call_shop
    # 清除商店调用标志
    $game_temp.shop_calling = false
    # 矫正主角姿势
    $game_player.straighten
    # 切换到商店画面
    $scene = Scene_Shop.new
  end
  #--------------------------------------------------------------------------
  # ● 调用名称输入
  #--------------------------------------------------------------------------
  def call_name
    # 清除调用名称输入标志
    $game_temp.name_calling = false
    # 矫正主角姿势
    $game_player.straighten
    # 切换到名称输入画面
    $scene = Scene_Name.new
  end
  #--------------------------------------------------------------------------
  # ● 调用菜单
  #--------------------------------------------------------------------------
  def call_menu
    # 清除菜单调用标志
    $game_temp.menu_calling = false
    # 已经设置了菜单 SE 演奏标志的情况下
    if $game_temp.menu_beep
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 清除菜单演奏 SE 标志
      $game_temp.menu_beep = false
    end
    # 矫正主角姿势
    $game_player.straighten
    # 切换到菜单画面
    $scene = Scene_Menu.new
  end
  #--------------------------------------------------------------------------
  # ● 调用存档
  #--------------------------------------------------------------------------
  def call_save
    # 矫正主角姿势
    $game_player.straighten
    # 切换到存档画面
    $scene = Scene_Save.new
  end
  #--------------------------------------------------------------------------
  # ● 调用调试
  #--------------------------------------------------------------------------
  def call_debug
    # 清除调用调试标志
    $game_temp.debug_calling = false
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到调试画面
    $scene = Scene_Debug.new
  end
  #--------------------------------------------------------------------------
  # ● 主角的场所移动
  #--------------------------------------------------------------------------
  def transfer_player
    # 清除主角场所移动调试标志
    $game_temp.player_transferring = false
    # 移动目标与现在的地图有差异的情况下
    if $game_map.map_id != $game_temp.player_new_map_id
      # 设置新地图
      $game_map.setup($game_temp.player_new_map_id)
    end
    # 设置主角位置
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    # 设置主角朝向
    case $game_temp.player_new_direction
    when 2  # 下
      $game_player.turn_down
    when 4  # 左
      $game_player.turn_left
    when 6  # 右
      $game_player.turn_right
    when 8  # 上
      $game_player.turn_up
    end
    # 矫正主角姿势
    $game_player.straighten
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 在生成活动块
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      # 执行过渡
      Graphics.transition(20)
    end
    # 执行地图设置的 BGM、BGS 的自动切换
    $game_map.autoplay
    # 设置画面
    Graphics.frame_reset
    # 刷新输入信息
    Input.update
  end
end
[/pre]
回复

使用道具 举报

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
回帖
5038

贵宾

发表于 2013-5-6 13:53:04 | 显示全部楼层
  1. for i in 0...$game_party.size
复制代码

评分

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

查看全部评分

我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

梦石
0
星屑
6373
在线时间
1162 小时
注册时间
2012-12-16
回帖
39
发表于 2013-5-6 15:11:13 | 显示全部楼层
好吧,我想到问题所在了,一秒种可以刷新很多次了
回复

使用道具 举报

梦石
0
星屑
6373
在线时间
1162 小时
注册时间
2012-12-16
回帖
39
发表于 2013-5-6 15:25:10 | 显示全部楼层
你可以加一个变量来记录刷新次数,判定刷新次数来刷新,你这个每次满足条件的情况,只刷新一次,那么变量值为1的时候刷新,没有满足刷新条件的情况,则清除变量的值。
回复

使用道具 举报

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
 楼主| 发表于 2013-5-6 16:25:01 | 显示全部楼层
亿万星辰 发表于 2013-5-6 13:53

{:2_43:} 改成size。效果也是一次回复10-30点HP
回复

使用道具 举报

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
 楼主| 发表于 2013-5-6 16:26:29 | 显示全部楼层
q86332682 发表于 2013-5-6 15:25
你可以加一个变量来记录刷新次数,判定刷新次数来刷新,你这个每次满足条件的情况,只刷新一次,那么变量值 ...

{:2_263:} 应该怎样写呀?请教教我
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部