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

Project1

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

[已经解决] 关于双计时问题

 关闭 [复制链接]

Lv3.寻梦者

风行者

梦石
0
星屑
2540
在线时间
6938 小时
注册时间
2011-10-2
帖子
2395

开拓者

跳转到指定楼层
1
发表于 2011-10-30 09:12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 幻风 于 2011-10-30 13:59 编辑

本人想做一个解救人质的游戏比如说援军40分钟会赶到,但是劫匪在人质身上绑了遥控炸弹30分钟后会自动爆炸,
那么就需要第一个计时器从主角接到任务开始计时30分钟,然后在解救人质的时候,人质身上绑定的是红外热感应炸弹,
主角一靠近,炸弹自爆装置启动,如果在规定时间内不拆除好炸弹,人质和主角就会被炸死,任务失败。
这里炸弹自爆时间也要用到计时器。但是2个计时器一起使用后一个会覆盖掉前一个,
这个问题怎么解决?如果有范例更好,求高手帮下忙,在下感激不尽。
初闻不知曲中意,再听已是曲中人。

Lv2.观梦者

梦石
0
星屑
508
在线时间
1478 小时
注册时间
2011-9-17
帖子
1316

开拓者贵宾

2
发表于 2011-10-30 11:42:01 | 只看该作者
当角色靠近炸弹的时候,用变量接受当前计时器的值,
然后计算出炸弹将要爆炸的时间点:即用另一个变量 = 刚才那个变量 - 等待时间
然后分歧,当计时器小于第二个变量的时候GAMEOVER
解除了的话,讲第二个变量变为0 (这是倒计时的情况)

点评

刚刚试了你的第二种方法,是会把第一个计时器覆盖掉的,好像不行啊。 还是麻烦你一下写个脚本吧。  发表于 2011-10-30 12:41
1改脚本,你要的话等下给你写一个 2 $game_system.timer = Graphics.frame_rate * x #单位为s $game_system.timer_working = true 直接给它赋值,通过计算应该可以完成吧   发表于 2011-10-30 11:58
那能不能让玩家看到这个变量值的变化呢? 就像计时器显示在屏幕上,感觉这样更加人性化些。也让玩家知道具体剩余时间。  发表于 2011-10-30 11:45
我帖子中要有是不HX的空白,请Ctrl + A
回复

使用道具 举报

Lv3.寻梦者

风行者

梦石
0
星屑
2540
在线时间
6938 小时
注册时间
2011-10-2
帖子
2395

开拓者

3
 楼主| 发表于 2011-10-30 12:44:45 | 只看该作者
iisnow 发表于 2011-10-30 11:42
当角色靠近炸弹的时候,用变量接受当前计时器的值,
然后计算出炸弹将要爆炸的时间点:即用另一个变量 = 刚 ...


根据你给的提示我用事件做了一个计时器,
但是就是不知道怎么在地图上显示出来。

点评

可是无法在地图上显示时间,我就为这个发愁ing。。。  发表于 2011-10-30 13:31
这个一个很好了!  发表于 2011-10-30 13:03
初闻不知曲中意,再听已是曲中人。
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
508
在线时间
1478 小时
注册时间
2011-9-17
帖子
1316

开拓者贵宾

4
发表于 2011-10-30 12:51:07 | 只看该作者
本帖最后由 iisnow 于 2011-10-30 13:34 编辑

工程、脚本做好了:
方法:
$scene.other_timer(time)
设置第二个时间
$scene.get
得到,第二个时间剩余(误差1s)
$scene.off
关闭第二个时间

由于对Sprit……类的研究不多,脚本很粗糙
脚本:

  1. class Scene_Map
  2.   def other_timer(time)
  3.     @spriteset.other_timer(time)
  4.   end
  5.   
  6.   def get
  7.     return @spriteset.get_time
  8.   end
  9.   
  10.   def off
  11.     @spriteset.off
  12.   end
  13.   
  14.    
  15. end

  16. class Spriteset_Map
  17.   def other_timer(time)
  18.     @timer_sprite.show_other(time)
  19.   end
  20.   
  21.   def get_time
  22.     return @timer_sprite.get_other
  23.   end
  24.   
  25.   def off
  26.    @timer_sprite.off
  27. end

  28. end

  29. class Sprite_Timer < Sprite
  30.   def initialize
  31.     super
  32.     self.bitmap = Bitmap.new(88, 48)
  33.     self.bitmap.font.name = "Arial"
  34.     self.bitmap.font.size = 32
  35.     self.x = 640 - self.bitmap.width
  36.     self.y = 0
  37.     self.z = 500
  38.     @other = Sprite_Timer_Other.new
  39.     update
  40.   end
  41.   
  42.   def dispose
  43.     if self.bitmap != nil
  44.       self.bitmap.dispose
  45.     end
  46.     if @other.bitmap != nil
  47.       @other.dispose
  48.     end
  49.     super
  50.   end
  51.   
  52.   def update
  53.     super
  54.     self.visible = $game_system.timer_working
  55.     @other.update
  56.     if $game_system.timer / Graphics.frame_rate != @total_sec
  57.       self.bitmap.clear
  58.       @total_sec = $game_system.timer / Graphics.frame_rate
  59.       min = @total_sec / 60
  60.       sec = @total_sec % 60
  61.       text = sprintf("%02d:%02d", min, sec)
  62.       self.bitmap.font.color.set(255, 255, 255)
  63.       self.bitmap.draw_text(self.bitmap.rect, text, 1)
  64.     end
  65.   end
  66.   
  67.   def show_other(time)
  68.     @other.show(time)
  69.   end
  70.   
  71.   def get_other
  72.     return @other.get_time
  73.   end
  74.   
  75.   def off
  76.     @other.showing = false
  77.     @other.time = -1
  78.     $game_time_space = -1
  79.   end
  80.   
  81. end

  82. class Sprite_Timer_Other < Sprite

  83.   attr_accessor :showing
  84.   attr_accessor :time
  85.   def initialize
  86.     super
  87.     self.bitmap = Bitmap.new(88, 48)
  88.     self.bitmap.font.name = "Arial"
  89.     self.bitmap.font.size = 32
  90.     self.x = 640 - self.bitmap.width
  91.     self.y = 40
  92.     self.z = 500
  93.     if $game_time_space == nil
  94.       @showing = false
  95.       $game_time_space = 0
  96.       @time = -1
  97.     else
  98.       if $game_time_space < 0
  99.         @showing = false
  100.         @time = -1
  101.       else
  102.         @showing = true
  103.         @time = $game_system.timer - $game_time_space
  104.       end
  105.     end
  106.     update
  107.   end

  108.   def dispose
  109.     if self.bitmap != nil
  110.       self.bitmap.dispose
  111.     end
  112.     super
  113.   end
  114.   
  115.   def update
  116.     super
  117.     if @time <= 0
  118.       self.visible = @showing
  119.       @showing = false
  120.       $game_time_space = -1
  121.       return
  122.     end
  123.     @time = $game_system.timer - $game_time_space
  124.     self.visible = @showing
  125.     if @time / Graphics.frame_rate != @total_sec
  126.       self.bitmap.clear
  127.       @total_sec = @time / Graphics.frame_rate
  128.       min = @total_sec / 60
  129.       sec = @total_sec % 60
  130.       text = sprintf("%02d:%02d", min, sec)
  131.       self.bitmap.font.color.set(255, 255, 255)
  132.       self.bitmap.draw_text(self.bitmap.rect, text, 1)
  133.     end
  134.   end
  135.   
复制代码
Project4_i.rar (252.22 KB, 下载次数: 12)


改好了~
再试试……

Project4.rar

252.88 KB, 下载次数: 11

点评

不用谢啦~大家都是新人,只是我关注的是脚本,你喜欢的是事件而已,一起努力吧  发表于 2011-10-30 14:24
刚刚试验了一下超赞,完美的说。特别加50经验,谢谢了。  发表于 2011-10-30 14:00
改好了,消失只需要一句话: $game_timer.timer_working = false 就行了 我的那个第二个用: $scene.off  发表于 2011-10-30 13:36
唉,看来我真的要好好学习脚本知识了,以前做R剧没感觉什么,现在想做好一点的RPG问题遇到好多啊。 还有一个问题就是时间到了如何让计时器消失。   发表于 2011-10-30 13:28
因为没有用全局变量……我再改改吧~  发表于 2011-10-30 13:11
我帖子中要有是不HX的空白,请Ctrl + A
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 23:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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