查看: 2766|回复: 5

[已经解决] 游戏内如何设置多个计时器

[复制链接]
梦石
0
星屑
371
在线时间
120 小时
注册时间
2012-11-20
回帖
48
发表于 2015-4-28 19:23:49 | 显示全部楼层 |阅读模式

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

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

×
用事件里面的计时器做了一些功能
如:领取双倍经验,1小时后结束
变身学习新技能,持续30分钟


然而问题来了,两个计时器互相冲突,
好吧,其实这俩就是一个计时器在工作

当变身计时器剩余5分钟的时候  领一下双倍经验  然后计时器又1小时了

有没有能存在多个计时器的脚本  XP的
谢谢了

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2015-4-28 19:54:57 | 显示全部楼层
Game_System 中

  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 计时器减 1
    if @timer_working and @timer > 0
      @timer -= 1
    end
  end
是关于计时器加减的,如要多个计时器,在这块做变量的加减就可以,当然,需要配上一个开关操作

点评

两个计时器能同时在画面中显示么  发表于 2015-4-28 20:09
回复

使用道具 举报

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2015-4-28 20:35:18 | 显示全部楼层
这个是脚本中关于地图上计时器绘制

[pre lang="ruby"]
#==============================================================================
# ■ Sprite_Timer
#------------------------------------------------------------------------------
#  显示计时器用的活动块。监视 $game_system 、活动块状态
# 自动变化。
#==============================================================================

class Sprite_Timer < Sprite
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super
    self.bitmap = Bitmap.new(88, 48)
    self.bitmap.font.name = "Arial"
    self.bitmap.font.size = 32
    self.x = 640 - self.bitmap.width
    self.y = 0
    self.z = 500
    update
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    if self.bitmap != nil
      self.bitmap.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super
    # 设置计时器执行中为可见
    self.visible = $game_system.timer_working
    # 如果有必要再次描绘计时器
    if $game_system.timer / Graphics.frame_rate != @total_sec
      # 清除窗口内容
      self.bitmap.clear
      # 计算总计秒数
      @total_sec = $game_system.timer / Graphics.frame_rate             #这一句就是时间变量除以每秒帧数,算出时间。
      # 生成计时器显示用字符串
      min = @total_sec / 60
      sec = @total_sec % 60
      text = sprintf("%02d:%02d", min, sec)
      # 描绘计时器
      self.bitmap.font.color.set(255, 255, 255)
      self.bitmap.draw_text(self.bitmap.rect, text, 1)
    end
  end
end
[/pre]


Spriteset_Map 是绘制地图的
这个里面有三句关于计时器的
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 释放计时器块
    @timer_sprite.dispose
释放(就是删除的意思吧)
    # 刷新计时器块
    @timer_sprite.update
刷新,就是让计时器动

举个例子。

[pre lang="ruby"]
#==============================================================================
# ■ Sprite_Timer 2
#------------------------------------------------------------------------------
#  显示计时器用的活动块。监视 $game_system 、活动块状态
# 自动变化。
#==============================================================================

class Sprite_Timer2 < Sprite
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super
    self.bitmap = Bitmap.new(88, 48)
    self.bitmap.font.name = "Arial"
    self.bitmap.font.size = 32
    self.x = 640 - self.bitmap.width  * 2           
    self.y = 0  +64                                            #y坐标64
    self.z = 500
    update
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    if self.bitmap != nil
      self.bitmap.dispose
    end
    super
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super
    # 设置计时器执行中为可见
    self.visible = $d                                    
    # 如果有必要再次描绘计时器
    if $s / Graphics.frame_rate != @total_sec
      # 清除窗口内容
      self.bitmap.clear
      # 计算总计秒数
      @total_sec = $s / Graphics.frame_rate             #这一句就是时间变量除以每秒帧数,算出时间。
      # 生成计时器显示用字符串
      min = @total_sec / 60
      sec = @total_sec % 60
      text = sprintf("%02d:%02d", min, sec)
      # 描绘计时器
      self.bitmap.font.color.set(255, 255, 255)
      self.bitmap.draw_text(self.bitmap.rect, text, 1)
    end
  end
end
[/pre]

然后在这三句后面各加上一句,
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new

    # 释放计时器块
    @timer_sprite.dispose

    # 刷新计时器块
    @timer_sprite.update

各变成

    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    @timer_sprite2 =Sprite_Timer2.new
    # 释放计时器块
    @timer_sprite.dispose
    @timer_sprite2.dispose
    # 刷新计时器块
    @timer_sprite.update
    @timer_sprite2.update

然后Game_System中
  def initialize
    @map_interpreter = Interpreter.new(0, true)
    @battle_interpreter = Interpreter.new(0, false)
    @timer = 0
    @timer_working = false
    @save_disabled = false
    @menu_disabled = false
    @encounter_disabled = false
    @message_position = 2
    @message_frame = 0
    @save_count = 0
    @magic_number = 0
    $s=0                #修改
    $d=true         #修改
  end

  def update
    # 计时器减 1
    $s +=1 if $d ==true      #修改
    if @timer_working and @timer > 0
      @timer -= 1
    end
  end


于是,当$d=true时就开始计时 $s值改变,一个计时器就做出来了。


点评

额,而且是越来越大的。。。  发表于 2015-4-28 20:36

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2015-4-28 22:37:30 | 显示全部楼层
嘛~,LZ的这个点子不错
明天做个多组,多功能计时器
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
2310
在线时间
5539 小时
注册时间
2011-1-10
回帖
6353

青铜编剧史诗剧作家剧作品鉴家

发表于 2015-4-28 23:57:33 | 显示全部楼层
事件的话用变量计时。等待20帧对应的变量+1,大于一定值重置为0并取消效果
回复

使用道具 举报

梦石
0
星屑
34462
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2015-4-29 10:28:49 | 显示全部楼层

点评

感谢,功能很强大,素材也很美观,我想办法调下显示位置就好  发表于 2015-4-29 19:38

评分

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

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部