Project1

标题: 关于双计时问题 [打印本页]

作者: 幻风    时间: 2011-10-30 09:12
标题: 关于双计时问题
本帖最后由 幻风 于 2011-10-30 13:59 编辑

本人想做一个解救人质的游戏比如说援军40分钟会赶到,但是劫匪在人质身上绑了遥控炸弹30分钟后会自动爆炸,
那么就需要第一个计时器从主角接到任务开始计时30分钟,然后在解救人质的时候,人质身上绑定的是红外热感应炸弹,
主角一靠近,炸弹自爆装置启动,如果在规定时间内不拆除好炸弹,人质和主角就会被炸死,任务失败。
这里炸弹自爆时间也要用到计时器。但是2个计时器一起使用后一个会覆盖掉前一个,
这个问题怎么解决?如果有范例更好,求高手帮下忙,在下感激不尽。dsu_plus_rewardpost_czw
作者: iisnow    时间: 2011-10-30 11:42
当角色靠近炸弹的时候,用变量接受当前计时器的值,
然后计算出炸弹将要爆炸的时间点:即用另一个变量 = 刚才那个变量 - 等待时间
然后分歧,当计时器小于第二个变量的时候GAMEOVER
解除了的话,讲第二个变量变为0 (这是倒计时的情况)
作者: 幻风    时间: 2011-10-30 12:44
iisnow 发表于 2011-10-30 11:42
当角色靠近炸弹的时候,用变量接受当前计时器的值,
然后计算出炸弹将要爆炸的时间点:即用另一个变量 = 刚 ...


根据你给的提示我用事件做了一个计时器,
但是就是不知道怎么在地图上显示出来。
作者: iisnow    时间: 2011-10-30 12:51
本帖最后由 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






欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1