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

Project1

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

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

[复制链接]

Lv2.观梦者

梦石
0
星屑
371
在线时间
120 小时
注册时间
2012-11-20
帖子
64
跳转到指定楼层
1
发表于 2015-4-28 19:23:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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


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

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

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

评分

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

查看全部评分

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
2
发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
3
发表于 2015-4-28 20:35:18 | 只看该作者
这个是脚本中关于地图上计时器绘制

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Sprite_Timer
  3. #------------------------------------------------------------------------------
  4. #  显示计时器用的活动块。监视 $game_system 、活动块状态
  5. # 自动变化。
  6. #==============================================================================
  7.  
  8. class Sprite_Timer < Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super
  14.     self.bitmap = Bitmap.new(88, 48)
  15.     self.bitmap.font.name = "Arial"
  16.     self.bitmap.font.size = 32
  17.     self.x = 640 - self.bitmap.width
  18.     self.y = 0
  19.     self.z = 500
  20.     update
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 释放
  24.   #--------------------------------------------------------------------------
  25.   def dispose
  26.     if self.bitmap != nil
  27.       self.bitmap.dispose
  28.     end
  29.     super
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 刷新画面
  33.   #--------------------------------------------------------------------------
  34.   def update
  35.     super
  36.     # 设置计时器执行中为可见
  37.     self.visible = $game_system.timer_working
  38.     # 如果有必要再次描绘计时器
  39.     if $game_system.timer / Graphics.frame_rate != @total_sec
  40.       # 清除窗口内容
  41.       self.bitmap.clear
  42.       # 计算总计秒数
  43.       @total_sec = $game_system.timer / Graphics.frame_rate             #这一句就是时间变量除以每秒帧数,算出时间。
  44.       # 生成计时器显示用字符串
  45.       min = @total_sec / 60
  46.       sec = @total_sec % 60
  47.       text = sprintf("%02d:%02d", min, sec)
  48.       # 描绘计时器
  49.       self.bitmap.font.color.set(255, 255, 255)
  50.       self.bitmap.draw_text(self.bitmap.rect, text, 1)
  51.     end
  52.   end
  53. end



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

举个例子。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Sprite_Timer 2
  3. #------------------------------------------------------------------------------
  4. #  显示计时器用的活动块。监视 $game_system 、活动块状态
  5. # 自动变化。
  6. #==============================================================================
  7.  
  8. class Sprite_Timer2 < Sprite
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super
  14.     self.bitmap = Bitmap.new(88, 48)
  15.     self.bitmap.font.name = "Arial"
  16.     self.bitmap.font.size = 32
  17.     self.x = 640 - self.bitmap.width  * 2           
  18.     self.y = 0  +64                                            #y坐标64
  19.     self.z = 500
  20.     update
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 释放
  24.   #--------------------------------------------------------------------------
  25.   def dispose
  26.     if self.bitmap != nil
  27.       self.bitmap.dispose
  28.     end
  29.     super
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 刷新画面
  33.   #--------------------------------------------------------------------------
  34.   def update
  35.     super
  36.     # 设置计时器执行中为可见
  37.     self.visible = $d                                    
  38.     # 如果有必要再次描绘计时器
  39.     if $s / Graphics.frame_rate != @total_sec
  40.       # 清除窗口内容
  41.       self.bitmap.clear
  42.       # 计算总计秒数
  43.       @total_sec = $s / Graphics.frame_rate             #这一句就是时间变量除以每秒帧数,算出时间。
  44.       # 生成计时器显示用字符串
  45.       min = @total_sec / 60
  46.       sec = @total_sec % 60
  47.       text = sprintf("%02d:%02d", min, sec)
  48.       # 描绘计时器
  49.       self.bitmap.font.color.set(255, 255, 255)
  50.       self.bitmap.draw_text(self.bitmap.rect, text, 1)
  51.     end
  52.   end
  53. end


然后在这三句后面各加上一句,
    # 生成计时器块
    @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 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33079
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

4
发表于 2015-4-28 22:37:30 | 只看该作者
嘛~,LZ的这个点子不错
明天做个多组,多功能计时器
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

梦石
0
星屑
2315
在线时间
5539 小时
注册时间
2011-1-10
帖子
6619

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

5
发表于 2015-4-28 23:57:33 | 只看该作者
事件的话用变量计时。等待20帧对应的变量+1,大于一定值重置为0并取消效果
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33079
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

6
发表于 2015-4-29 10:28:49 | 只看该作者

点评

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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 23:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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