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

Project1

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

[已经过期] 怎么做一个XP的计时器

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
10 小时
注册时间
2011-1-23
帖子
13
跳转到指定楼层
1
发表于 2011-2-6 16:50:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2011-2-6 18:38:25 | 只看该作者
事件-计时器操作
更改画面色调

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2011-2-6 18:54:04 | 只看该作者
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆昼夜切り替え - KGC_DayNight◆
  3. #_/----------------------------------------------------------------------------
  4. #_/  ゲーム中に昼夜の概念を作成します。
  5. #_/  Makes the concept of day and night in the game.
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11.   # ◆旧式のメソッドを使用可能にする
  12.   #  どうしても昔のまま使いたい場合だけ true。
  13.   DAYNIGHT_ENABLE_OLD_METHOD = false

  14.   # ◆昼夜切り替え方式
  15.   #  0:時間経過  1:歩数  2:現実時間(微妙)
  16.   DAYNIGHT_METHOD = 0

  17.   # ◆イベント中は時間を止める
  18.   #  DAYNIGHT_METHOD で「時間経過」使用時のみ有効
  19.   DAYNIGHT_EVENT_STOP = true
  20.   # ◆戦闘時は、背景のみ色調を適用する
  21.   DAYNIGHT_TONE_BACK_ONLY = true

  22.   # ◆日付が変わる状態
  23.   #  ここで指定した状態になったとき、日数を加算する。
  24.   #  初期状態の場合  0:昼  1:夕方  2:夜  3:朝
  25.   # ※現実時間の場合、現実と同じ日数にはならないので注意。
  26.   DAYNIGHT_PASS_PHASE = 3

  27.   # ◆状態切り替え時のフェード時間【単位:フレーム】
  28.   #  省略時もこの値を使用します。
  29.   DAYNIGHT_DURATION = 300

  30.   # ◆曜日名(あまり意味は無い)
  31.   DAYNIGHT_WEEK_NAME = ["日", "月", "火", "水", "木", "金", "土"]

  32.   # ★☆以下の3項目は全て同じ要素数にしてください☆★
  33.   # 処理の都合上、最初を昼にするとベター
  34.   ### ** Please make all of the following 3 items the same number. **

  35.   # ◆昼夜の名称(あまり意味は無い)
  36.   DAYNIGHT_NAME = ["晨", "午", "夜", "朝"]

  37.   # ◆昼夜の色調(よく分からない場合はこのまま)
  38.   DAYNIGHT_TONE = [Tone.new(0, 0, 0),
  39.     Tone.new(-32, -96, -96),
  40.     Tone.new(-128, -128, -32),
  41.     Tone.new(-48, -48, -16)]

  42.   # ◆昼夜切り替え時間(次の状態へ移るまでの期間)
  43.   #  切り替え方式が時間の場合は秒、歩数の場合は歩数そのまま。
  44.   #  戦闘中は切り替え時間が10倍(1/10の速度)
  45.   #  現実時間の場合、次の状態へ切り替える時刻(24時間方式)
  46.   DAYNIGHT_TIME = [30, 10, 25, 10]

  47.   # DAYNIGHT_TIME = [16, 20, 6, 10]
  48.   # ↑現実時間用のサンプル。試す場合はコメントを解除。
  49.   #   The sample of Real time.
  50. end

  51. #### DAYNIGHT_METHOD
  52. ### Method of change day and night.
  53. # 0..Passage of time.  1..Number of steps.  2..Real time.(imperfection)

  54. #### DAYNIGHT_EVENT_STOP
  55. ### Time is stopped when event is running.
  56. # When DAYNIGHT_METHOD is 0, this is effective.

  57. #### DAYNIGHT_PASS_PHASE
  58. ### Phase which date is changed.
  59. # 0..Day   1..Evening  2..Night  3..Morning

  60. #### DAYNIGHT_DURATION
  61. ### Duration which phase is changed. {Unit : frame}
  62. # When duration is omitted, this value is applied.

  63. #### DAYNIGHT_WEEK_NAME
  64. ### The day of the week names. (Not so significant.)
  65. #DAYNIGHT_WEEK_NAME = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

  66. #### DAYNIGHT_NAME
  67. ### Day and night name. (Not so significant.)
  68. #DAYNIGHT_NAME = ["Day", "Evening", "Night", "Morning"]

  69. #### DAYNIGHT_TONE
  70. ### Tone of day and night.
  71. # (If you don't understanding well, please leave this as it is.)
  72. #### DAYNIGHT_TONE_BACK_ONLY
  73. ### In battle, it applies tone of day and night to background.

  74. #### DAYNIGHT_TIME
  75. ### Necessary period until changing for the next phase.
  76. #  Passage of time -- sec.
  77. #  Number of steps -- steps.
  78. #  Real time -------- time when phase is changed.
  79. # In battle, time progress speed becomes 1/10.

  80. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  81. $imported = {} if $imported == nil
  82. $imported["DayNight"] = true

  83. module DayNight
  84.   #--------------------------------------------------------------------------
  85.   # ● 変数初期化
  86.   #--------------------------------------------------------------------------
  87.   def self._init_var_
  88.     $game_system.daynight_count = 0 if $game_system.daynight_count == nil
  89.     $game_system.daynight_phase = 0 if $game_system.daynight_phase == nil
  90.     $game_system.daynight_pass_days = 0 if $game_system.daynight_pass_days == nil
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 現在の状態
  94.   #--------------------------------------------------------------------------
  95.   def self.now
  96.     # 現在の状態を返す
  97.     return $game_system.daynight_phase
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 状態名取得
  101.   #--------------------------------------------------------------------------
  102.   def self.now_name
  103.     # 現在の状態名を返す
  104.     return KGC::DAYNIGHT_NAME[self.now]
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 昼夜手動切り替え
  108.   #     phase     : 切り替え後の状態INDEX
  109.   #     duration  : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  110.   #     pass_days : 経過させる日数  (省略時:0)
  111.   #--------------------------------------------------------------------------
  112.   def self.change(phase, duration = KGC::DAYNIGHT_DURATION, pass_days = 0)
  113.     # カウント初期化
  114.     $game_system.daynight_count = 0
  115.     # フェーズ更新
  116.     $game_system.daynight_phase = phase
  117.     # 手動切り替え有効
  118.     $game_temp.manual_daynight_change = duration
  119.     # 日数経過
  120.     $game_system.daynight_pass_days += pass_days
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 次の状態へ移行
  124.   #     duration : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  125.   #--------------------------------------------------------------------------
  126.   def self.change_next(duration = KGC::DAYNIGHT_DURATION)
  127.     $game_screen.change_daynight_next(duration)
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 現在の曜日
  131.   #--------------------------------------------------------------------------
  132.   def self.now_week
  133.     # 現在の曜日を返す
  134.     if KGC::DAYNIGHT_METHOD == 2
  135.       return Time.now.wday
  136.     else
  137.       return $game_system.daynight_pass_days % KGC::DAYNIGHT_WEEK_NAME.size
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 曜日名取得
  142.   #--------------------------------------------------------------------------
  143.   def self.now_week_name
  144.     # 現在の曜日名を返す
  145.     return KGC::DAYNIGHT_WEEK_NAME[self.now_week]
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● デフォルトの状態(0, 0, 0)に戻す
  149.   #     duration : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  150.   #--------------------------------------------------------------------------
  151.   def self.set_default(duration = KGC::DAYNIGHT_DURATION)
  152.     $game_screen.set_daynight_default(duration)
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 現在の状態を適用
  156.   #     duration : 切り替え時間(フレーム)  (省略時 : KGC::DAYNIGHT_DURATION)
  157.   #--------------------------------------------------------------------------
  158.   def self.apply(duration = KGC::DAYNIGHT_DURATION)
  159.     $game_screen.apply_daynight(duration)
  160.   end
  161. end

  162. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  163. #==============================================================================
  164. # ■ Game_Temp
  165. #==============================================================================

  166. class Game_Temp
  167.   attr_accessor :manual_daynight_change
  168.   #--------------------------------------------------------------------------
  169.   # ● オブジェクト初期化
  170.   #--------------------------------------------------------------------------
  171.   alias initialize_KGC_DayNight initialize
  172.   def initialize
  173.     # 元の処理を実行
  174.     initialize_KGC_DayNight

  175.     @manual_daynight_change = false
  176.   end
  177. end

  178. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  179. #==============================================================================
  180. # ■ Game_System
  181. #==============================================================================

  182. class Game_System
  183.   attr_accessor :daynight_count, :daynight_phase, :daynight_pass_days,
  184.     :daynight_change, :daynight_change_battle
  185.   #--------------------------------------------------------------------------
  186.   # ● オブジェクト初期化
  187.   #--------------------------------------------------------------------------
  188.   alias initialize_KGC_DayNight initialize
  189.   def initialize
  190.     initialize_KGC_DayNight

  191.     @daynight_count = @daynight_phase = @daynight_pass_days = 0
  192.     @daynight_change = true
  193.     @daynight_change_battle = true
  194.   end
  195. end

  196. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  197. #==============================================================================
  198. # ■ Game_Screen
  199. #==============================================================================

  200. class Game_Screen
  201.   attr_reader :daynight_tone
  202.   #--------------------------------------------------------------------------
  203.   # ● オブジェクト初期化
  204.   #--------------------------------------------------------------------------
  205.   alias initialize_KGC_DayNight initialize
  206.   def initialize
  207.     # 元の処理を実行
  208.     initialize_KGC_DayNight

  209.     # とりあえず現在の状態に設定
  210.     @default_tone = Tone.new(0, 0, 0)
  211.     @tone = KGC::DAYNIGHT_TONE[$game_system.daynight_phase].clone
  212.     @daynight_tone = @tone.clone
  213.     # 移動判定用座標
  214.     @x = @y = 0
  215.     # フレーム更新用カウント初期化
  216.     @frame_count = Graphics.frame_count
  217.     @daynight_tone_duration = 0
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 色調の取得
  221.   #--------------------------------------------------------------------------
  222.   def tone
  223.     if $game_temp.in_battle && KGC::DAYNIGHT_TONE_BACK_ONLY
  224.       return @default_tone
  225.     else
  226.       return @tone
  227.     end
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 色調変更の開始
  231.   #     tone     : 色調
  232.   #     duration : 時間
  233.   #--------------------------------------------------------------------------
  234.   alias start_tone_change_KGC_DayNight start_tone_change
  235.   def start_tone_change(tone, duration)
  236.     start_tone_change_KGC_DayNight(tone, duration)

  237.     @daynight_tone_target = tone.clone
  238.     @daynight_tone_duration = duration
  239.     if @daynight_tone_duration == 0
  240.       @daynight_tone = @daynight_tone_target.clone
  241.     end
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● フレーム更新
  245.   #--------------------------------------------------------------------------
  246.   alias update_KGC_DayNight update
  247.   def update
  248.     update_KGC_DayNight

  249.     if @daynight_tone_duration >= 1
  250.       d = @daynight_tone_duration
  251.       @daynight_tone.red =
  252.         (@daynight_tone.red * (d - 1) + @daynight_tone_target.red) / d
  253.       @daynight_tone.green =
  254.         (@daynight_tone.green * (d - 1) + @daynight_tone_target.green) / d
  255.       @daynight_tone.blue =
  256.         (@daynight_tone.blue * (d - 1) + @daynight_tone_target.blue) / d
  257.       @daynight_tone.gray =
  258.         (@daynight_tone.gray * (d - 1) + @daynight_tone_target.gray) / d
  259.       @daynight_tone_duration -= 1
  260.     end

  261.     # 昼夜切り替え判定
  262.     if (!$game_temp.in_battle && $game_system.daynight_change) ||
  263.         ($game_temp.in_battle && $game_system.daynight_change &&
  264.         $game_system.daynight_change_battle)
  265.       case KGC::DAYNIGHT_METHOD
  266.       when 0  # 時間判定
  267.         update_daynight_pass_time
  268.       when 1  # 歩数判定
  269.         update_daynight_step
  270.       when 2  # 現実時間
  271.         update_daynight_real_time
  272.       end
  273.     end
  274.     # 手動切り替えが行われた場合
  275.     if $game_temp.manual_daynight_change != nil
  276.       # 色調切り替え
  277.       start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
  278.         KGC::DAYNIGHT_DURATION)
  279.       # 手動切り替え解除
  280.       $game_temp.manual_daynight_change = nil
  281.     end
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 更新 : 時間経過
  285.   #--------------------------------------------------------------------------
  286.   def update_daynight_pass_time
  287.     # カウント増加量計算
  288.     inc_count = Graphics.frame_count - @frame_count
  289.     # 加算量がおかしい場合は戻る
  290.     if inc_count >= 100
  291.       @frame_count = Graphics.frame_count
  292.       return
  293.     end
  294.     # イベント中は戻る
  295.     if KGC::DAYNIGHT_EVENT_STOP && $game_system.map_interpreter.running?
  296.       @frame_count = Graphics.frame_count
  297.       return
  298.     end
  299.     # カウント加算
  300.     if $game_temp.in_battle
  301.       inc_count /= 10.0
  302.       $game_system.daynight_count += inc_count
  303.     else
  304.       $game_system.daynight_count += inc_count
  305.     end
  306.     # カウントを戻す
  307.     @frame_count = Graphics.frame_count
  308.     # 状態移行判定
  309.     count = $game_system.daynight_count / Graphics.frame_rate
  310.     if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
  311.       # 次の状態へ移行
  312.       change_daynight_next
  313.     end
  314.   end
  315.   private :update_daynight_pass_time
  316.   #--------------------------------------------------------------------------
  317.   # ● 更新 : 歩数
  318.   #--------------------------------------------------------------------------
  319.   def update_daynight_step
  320.     # 移動判定
  321.     if @x != $game_player.x || @y != $game_player.y
  322.       # 座標更新
  323.       @x = $game_player.x
  324.       @y = $game_player.y
  325.       # カウント加算
  326.       $game_system.daynight_count += 1
  327.       # 状態移行判定
  328.       count = $game_system.daynight_count
  329.       if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
  330.         # 次の状態へ移行
  331.         change_daynight_next
  332.       end
  333.     end
  334.   end
  335.   private :update_daynight_step
  336.   #--------------------------------------------------------------------------
  337.   # ● 更新 : 現実時間
  338.   #--------------------------------------------------------------------------
  339.   def update_daynight_real_time
  340.     # 現在の時間を取得
  341.     time = Time.now
  342.     # 状態移行判定
  343.     time1 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
  344.     time2 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase - 1]
  345.     if time2 != nil && time1 < time2
  346.       change = time.hour < time2 && time1 <= time.hour
  347.     else
  348.       change = time1 <= time.hour
  349.     end
  350.     if change
  351.       # 次の状態へ移行
  352.       change_daynight_next
  353.     end
  354.   end
  355.   private :update_daynight_real_time
  356.   #--------------------------------------------------------------------------
  357.   # ● 次の状態へ移行
  358.   #--------------------------------------------------------------------------
  359.   def change_daynight_next(duration = KGC::DAYNIGHT_DURATION)
  360.     $game_system.daynight_count = 0
  361.     $game_system.daynight_phase += 1
  362.     # 最後の状態に達した場合
  363.     if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
  364.       # 最初の状態に戻す
  365.       $game_system.daynight_phase = 0
  366.     end
  367.     # 日数経過判定
  368.     if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
  369.       $game_system.daynight_pass_days += 1
  370.     end
  371.     # 色調切り替え
  372.     start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
  373.       duration)
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ● デフォルトの状態(0, 0, 0)に戻す
  377.   #--------------------------------------------------------------------------
  378.   def set_daynight_default(duration)
  379.     start_tone_change(Tone.new(0, 0, 0), duration)
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 現在の状態を適用
  383.   #--------------------------------------------------------------------------
  384.   def apply_daynight(duration)
  385.     start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase], duration)
  386.   end
  387.   if KGC::DAYNIGHT_ENABLE_OLD_METHOD
  388.   #--------------------------------------------------------------------------
  389.   # ● デフォルトの状態(0, 0, 0)に戻す
  390.   #     duration : 切り替え時間(フレーム)  (省略時:40)
  391.   #--------------------------------------------------------------------------
  392.   def daynight_default(duration = KGC::DAYNIGHT_DURATION)
  393.     start_tone_change(Tone.new(0, 0, 0), duration)
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● 現在の状態を適用
  397.   #     duration : 切り替え時間(フレーム)  (省略時:40)
  398.   #--------------------------------------------------------------------------
  399.   def daynight_apply(duration = KGC::DAYNIGHT_DURATION)
  400.     start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase], duration)
  401.   end
  402.   end
  403. end

  404. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  405. #==============================================================================
  406. # ■ Game_Map
  407. #==============================================================================

  408. class Game_Map
  409.   #--------------------------------------------------------------------------
  410.   # ● エンカウントリストの取得
  411.   #--------------------------------------------------------------------------
  412.   alias encounter_list_KGC_DayNight encounter_list
  413.   def encounter_list
  414.     # 元の処理を実行
  415.     list = encounter_list_KGC_DayNight.dup

  416.     # 出現条件判定
  417.     list.each_index { |i|
  418.       appear = false
  419.       troop = $data_troops[list[i]]
  420.       # 出現条件が無い場合は次へ
  421.       next unless troop.name =~ /\[DN((?:[ ]*[\-]?\d+(?:,[ ]*)?)+)\]/i
  422.       # 出現条件を適用
  423.       $1.split(/,/).each { |dn|
  424.         dn.gsub!(/[ ]/) {""}
  425.         appear |= dn[0, 1] == "-" ?
  426.           $game_system.daynight_phase != dn.to_i.abs :
  427.           $game_system.daynight_phase == dn.to_i
  428.       }
  429.       list[i] = nil unless appear
  430.     }
  431.     return list.compact
  432.   end
  433. end

  434. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  435. #==============================================================================
  436. # ■ Spriteset_Battle
  437. #==============================================================================

  438. if KGC::DAYNIGHT_TONE_BACK_ONLY
  439. class Spriteset_Battle
  440.   #--------------------------------------------------------------------------
  441.   # ● フレーム更新
  442.   #--------------------------------------------------------------------------
  443.   alias update_KGC_DayNight update
  444.   def update
  445.     update_KGC_DayNight

  446.     @battleback_sprite.tone = $game_screen.daynight_tone
  447.   end
  448. end
  449. end

  450. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  451. #==============================================================================
  452. # ■ Scene_Map
  453. #==============================================================================

  454. class Scene_Map
  455.   #--------------------------------------------------------------------------
  456.   # ● メイン処理
  457.   #--------------------------------------------------------------------------
  458.   alias main_KGC_DayNight main
  459.   def main
  460.     DayNight._init_var_

  461.     main_KGC_DayNight
  462.   end
  463. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 12:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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