Project1

标题: 请教——被卡住的日夜交替 [打印本页]

作者: kangxi0109    时间: 2011-8-30 22:39
标题: 请教——被卡住的日夜交替

    打开——测试——控制主角在地图中疯狂的,不间歇的跑——

    一般不会超过300步,卡住。

    特此请教。

测试.rar (199.34 KB, 下载次数: 41) dsu_plus_rewardpost_czw
作者: fux2    时间: 2011-8-30 23:01
本帖最后由 fux2 于 2011-8-30 23:02 编辑

给你一个以前写的昼夜系统吧.
精灵的昼夜.zip (364.44 KB, 下载次数: 56)
  1. # 创作 by fux2
  2. # 改良 by 精灵
  3. # 导航指令
  4. # mistmara(true/false)   默认:mistmara(false)       # 梦魇模式开/关
  5. # settime(小时,分钟)     默认:settime(0,0)          # 设定时间
  6. # show(1/0,1/0,1/0)      默认:show(1,1,1)           # 显示设置(图标,描述,时间)
  7. # setstop(false)     默认:setstop(true)             # 停止时间流动
  8. # setcount(数字)         默认:setcount(1)           # 每秒增加多少计数,默认60,现实的1秒等于游戏的1分

  9. #============================================================================
  10. # 之所以全部用全局变量是方便在存档的时候一起存进数据
  11.     $time_hour_now = 0                              # 设定当前时针
  12.     $time_minute_now = 0                            # 设定当前分针
  13.     $time_count = 60                                # 设置时间流逝速度[初始1,每秒加1]
  14.     $time_stop_count = 0                            # 备用时间流逝速度
  15.     $time_totalcount = 0                            # 设置总时间
  16.     $blink = false                                   # 秒针的闪烁
  17.     $time_icon = (($time_hour_now * 60 + $time_minute_now) / 90).to_i    # 储存图标时间
  18.     $Mistmara_mode = false                          # 梦魇模式开关
  19.     $time_disrc = "凌晨"                            # 时间描述
  20.     $checktime = 0                                  # 核对时间
  21.     $check_tone_time = []                           # 色调区间核对
  22.     $time_stop_hour = 0                             # 临时时间
  23.     $time_stop_minute = 0                           # 同上
  24.     $time_stop_totalcount = 0                       # 同上
  25.     $showtimer = [1,1,1]                            # 是否显示时钟(图标,描述,时间)
  26.    
  27. class Icon < Window_Base
  28.   # 时间描述模块,前7组时间段[起始时间,结束时间],中7组时间段描述,后7组时间段色调[[R,G,B,灰],时间]
  29.   TIME_BLOCK = [[0,5],[6,8],[9,10],[11,13],[14,16],[17,18],[19,21],[22,23],"凌晨","早上","上午","中午","下午","傍晚","晚上","深夜",[[-102,-102,17,0],120],[[-51,-51,0,0],120],[[-10,-10,20,0],120],[[0,0,0,0],120],[[17,17,0,0],120],[[0,0,-64,0],120],[[-32,-32,64,0],120],[[-68,-68,0,0],120]]
  30.   
  31.   def initialize
  32.     super(540,5,200,200)
  33.     self.opacity = 0
  34.     self.back_opacity = 0
  35.     self.contents_opacity = 255
  36.     self.contents = Bitmap.new(168, 168)
  37.   end
  38.   # 时间更改
  39.   def Time_Changed
  40.     unless $time_count == 0
  41.       if Graphics.frame_count / (Graphics.frame_rate / 2) != $checktime
  42.         $checktime = Graphics.frame_count / (Graphics.frame_rate/ 2)
  43.         if !$blink
  44.           $blink = true
  45.          if $time_totalcount + $time_count < 86400
  46.           $time_totalcount += $time_count
  47.          else
  48.           $time_totalcount = ($time_totalcount + $time_count) % 86400
  49.          end
  50.          $time_hour_now = $time_totalcount / 3600
  51.          $time_minute_now = ($time_totalcount % 3600) / 60
  52.         else
  53.         $blink = false
  54.         end
  55.        end
  56.      end
  57.   end
  58.   # 时间状态描述
  59.   def Get_time_disrc
  60.     if $Mistmara_mode
  61.       # 梦魇模式设置
  62.       $game_screen.start_tone_change(Tone.new(-136,-170,-102,153),10 * 2)
  63.       return "梦魇"
  64.     else
  65.       # 正常模式
  66.       for i in 0..7
  67.         if $time_hour_now >= TIME_BLOCK[i][0] && $time_hour_now <= TIME_BLOCK[i][1]
  68.           unless $check_tone_time == i
  69.             $game_screen.start_tone_change(Tone.new(TIME_BLOCK[i+16][0][0],TIME_BLOCK[i+16][0][1],TIME_BLOCK[i+16][0][2],TIME_BLOCK[i+16][0][3]),TIME_BLOCK[i+16][1].to_i * 2)
  70.           end
  71.           return TIME_BLOCK[i+8]
  72.         end
  73.       end
  74.     end
  75.   end
  76.   # 梦魇模式
  77.   def Mistmara_mode(statu)
  78.     if statu == true
  79.       $Mistmara_mode = true
  80.       $time_stop_hour, $time_stop_minute , $time_stop_totalcount = $time_hour_now, $time_minute_now, $time_totalcount
  81.       $blink = true
  82.     else
  83.       $Mistmara_mode = false
  84.     end
  85.   end
  86.   # 显示时钟以及文字
  87.   def Set_icon
  88.       self.Time_Changed
  89.       $time_icon = (($time_hour_now * 60 + $time_minute_now) / 90).to_i
  90.       $time_disrc = self.Get_time_disrc
  91.       self.contents.clear
  92.       self.contents.font.size = 20
  93.       if $Mistmara_mode
  94.         bitmap = Bitmap.new("Graphics/time/time_stop.png")
  95.         self.contents.draw_text(0,70,150,32,sprintf("%02d:%02d", $time_stop_hour, $time_stop_minute)) if $showtimer[2] == 1
  96.       else
  97.         bitmap = Bitmap.new("Graphics/time/time_#{$time_icon}.png")
  98.         if $blink
  99.         self.contents.draw_text(0,70,150,32,sprintf("%02d:%02d", $time_hour_now, $time_minute_now)) if $showtimer[2] == 1
  100.         else
  101.         self.contents.draw_text(0,70,150,32,sprintf("%02d %02d", $time_hour_now, $time_minute_now)) if $showtimer[2] == 1
  102.         end
  103.       end
  104.       src_rect = Rect.new(0, 0, 70, 70)
  105.       self.contents.blt(0, 0, bitmap, src_rect) if $showtimer[0] == 1
  106.       self.contents.draw_text(5,45,150,32,"#{$time_disrc}") if $showtimer[1] == 1
  107.   end
  108. end

  109. # 在地图描绘
  110. class Scene_Map

  111.   alias fux2 main
  112.   def main
  113.     @icon = Icon.new
  114.     fux2
  115.     @icon.dispose
  116.   end
  117.   
  118.   alias fux2update update
  119.   def update
  120.     @icon.Set_icon
  121.     fux2update
  122.   end
  123. end

  124. # 快捷指令
  125. class Interpreter
  126.   def mistmara(statu)
  127.     if statu == true
  128.       Icon.new.Mistmara_mode(true)
  129.     else
  130.       Icon.new.Mistmara_mode(false)
  131.     end
  132.     return
  133.   end
  134.   
  135.   def settime(hour,minute)
  136.     $time_hour_now = hour.to_i
  137.     $time_minute_now = minute.to_i
  138.     $time_totalcount = hour * 3600 + minute * 60
  139.   end
  140.   
  141.   def setstop(time_stop = true)
  142.    if time_stop
  143.      unless $time_count == 0
  144.      $time_stop_count = $time_count
  145.      $time_count = 0
  146.      $blink = true
  147.      end
  148.    else
  149.      $time_count = $time_stop_count
  150.    end
  151.   end
  152.   
  153.   def setcount(count)
  154.     $time_count = count.to_i
  155.   end
  156.   
  157.   def show(icon,statu,time)
  158.    $showtimer = [icon.to_i,statu.to_i,time.to_i]
  159.   end

  160. end
  161.    
复制代码

作者: 各种压力的猫君    时间: 2011-8-31 00:45
本帖最后由 各种压力的猫君 于 2011-8-31 00:53 编辑

表示自己怎么跑都没卡住 = = 1.03版 win7

左上角的事件你写法不对。正确的写法应该是自动执行,然后第二行不需要执行公共事件,改成暂时消除事件。
因为开关打开之时那个并行公共事件就已经开始工作了。

——难道是因为这个错误的写法导致循环事件越来越多而耗尽内存卡住 = = ?
作者: kangxi0109    时间: 2011-8-31 10:47
能用脚本解决就最好啦,在脚本中最好能够调用一些公共事件,以方便一些特殊变量的结算...因为昼夜交替系统是一个基本系统,还附庸有别的一些小系统。


kangxi0109于2011-8-31 18:03补充以下内容:
在下亦脚本盲耳...




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