Project1

标题: 请教一个关于随时间流逝而让游戏色调不断变化方法~~~ [打印本页]

作者: trumpetong    时间: 2013-1-16 21:07
标题: 请教一个关于随时间流逝而让游戏色调不断变化方法~~~
首先  要感谢前几次提问时 帮助过我的人们~我的游戏也渐渐成型了~谢谢。
那么好 提问时间开始:
我的想法是 可不可以用公共事件做一个 进入游戏的10分钟里白天 10分钟过后  有5分钟的黄昏 5分钟的夜晚 5分钟的黎明    然后  让它们结合在一起循环? 是用变量么  还是用计时器??这两个东西  我总是搞不懂 所以只能在这里请教了   谢谢!

作者: 冰鎮史萊姆    时间: 2013-1-16 21:45

准确程度和机子卡不卡有关
另外转色时间调长一点更自然(自己研究吧!!)(只是我懒而已XD)
作者: tseyik    时间: 2013-1-16 22:02
本帖最后由 tseyik 于 2013-1-17 19:36 编辑

ゲーム内時間管理脚本
  1. #==============================================================================
  2. # ■ RGSS3 ゲーム内時間管理 Ver1.00 by 星潟
  3. #------------------------------------------------------------------------------
  4. # ゲーム内にゲーム内時間を追加すると共に
  5. #「夜明け」・「朝」・「昼」・「夕方」・「夜」・「深夜」の概念を追加します。
  6. # なお、時間経過はマップ上でのみ計算されます。
  7. # イベント中は時間経過を行わせないようにする機能等もあります。
  8. #
  9. # また、時間操作のイベントコマンド「スクリプト」で使用できるコマンドに
  10. #「time_control(a,b,c,d)」が追加されます。
  11. # aには"+"か"-"か"="の何れかを入れてください。
  12. # bには0から23までの数(時間)、
  13. # cには0から59までの数(分)、
  14. # dにも0から59までの数(秒)を入れてください。
  15. #
  16. # aに"+"を入れた場合、現在時間から指定した時間分、時間が経過します。
  17. # aに"-"を入れた場合、現在時間から指定した時間分、時間が巻戻ります。
  18. # ("+"と"-"で午前0時を跨いだ場合、日数変数を指定しているとその変数も変化します)
  19. # aに"="を入れた場合、現在時間を無視してその時間ぴったりに変更されます。
  20. #
  21. # 使用例
  22. # time_control("+",1,30,25)
  23. # 現在時間+1時間30分25秒
  24. #
  25. # time_control("-",1,30,25)
  26. # 現在時間+1時間30分25秒
  27. #
  28. # time_control("=",19,43,22)
  29. # 現在時間を19時43分22秒にする
  30. #
  31. #==============================================================================
  32. module TIME_SCHEDULE
  33.   
  34.   #フレーム更新毎の時間経過量
  35.   #100で1秒。6000で1分。360000で1時間。
  36.   PLUS    = 100
  37.   
  38.   #ゲーム開始時の1日の中の時間経過量(0~8639999で指定)
  39.   #経過量8640000到達で1日経過し、リセットされて0に戻る。
  40.   START   = 3600000
  41.   
  42.   #イベント実行中でも問答無用で時間を経過させるか?
  43.   #true 経過させる false 経過させない
  44.   INTPRT  = false
  45.   
  46.   #時間経過による色調変更を行うか
  47.   #true 行う false 行わない
  48.   COLOR = true
  49.   
  50.   #時間変化を強制停止するスイッチ番号の指定(増加も減少も無効化)
  51.   #0 強制停止機能の無効化 1~ 該当のスイッチがONの時、時間変化停止
  52.   SWITCH = 1000
  53.   
  54.   #時間経過による色調補正を実行しないマップの
  55.   #マップ名(表示しない方)に記入するキーワード。
  56.   MAP  = "UMD"
  57.   
  58.   #特定の変数に対し、常に時間帯の区分を代入し続けるか?
  59.   #0 代入しない 1~ 指定した数字のIDの変数に代入し続ける。
  60.   #代入された数字の対応は以下の通り
  61.   #0……夜明け
  62.   #1……朝
  63.   #2……昼
  64.   #3……夕方
  65.   #4……夜
  66.   #5……深夜
  67.   VAR1     = 4
  68.   
  69.   #特定の変数に対し、常に現在何時かを代入し続けるか?
  70.   #(0で機能を無効化)
  71.   VAR2     = 5
  72.   
  73.   #特定の変数に対し、常に現在何分かを代入し続けるか?
  74.   #(0で機能を無効化)
  75.   VAR3     = 6
  76.   
  77.   #特定の変数に対し、常に現在何秒かを代入し続けるか?
  78.   #(0で機能を無効化)
  79.   VAR4     = 7
  80.   
  81.   #ゲーム中にプレイヤーに見える形で日付を表す変数を用意していて
  82.   #なおかつ日数の経過で自動的に変数を変えたい場合、ここにその変数番号を記入
  83.   #(0で機能を無効化)
  84.   VAR5     = 8
  85.   
  86.   #色調変化速度(1~小数点以下で設定)
  87.   SPEED   = 0.1
  88.   
  89.   #夜明け時間設定(デフォルト 午前4時~)
  90.   Dawn    = 1440000
  91.   
  92.   #夜明け色調(R, G, B, alpha)
  93.   DaC     = [0, 0, 50, 100]
  94.   
  95.   #朝時間設定(デフォルト 午前5時30分~)
  96.   Morning = 1980000
  97.   
  98.   #朝色調(R, G, B, alpha)
  99.   MoC     = [0, 0, 0, 15]
  100.   
  101.   #昼時間設定(デフォルト 正午~)
  102.   Noon    = 4320000
  103.   
  104.   #昼色調(R, G, B, alpha)
  105.   NoC     = [0, 0, 0, 0]
  106.   
  107.   #夕方時間設定(デフォルト 午後16時30分~)
  108.   Evening = 5940000
  109.   
  110.   #夕方色調(R, G, B, alpha)
  111.   EvC     = [50, 0, 0, 150]
  112.   
  113.   #夜時間設定(デフォルト 午後18時30分~)
  114.   Night   = 6660000
  115.   
  116.   #夜色調(R, G, B, alpha)
  117.   NiC     = [0, 0, 50, 200]
  118.   
  119.   #深夜時間設定(デフォルト 深夜0時~)
  120.   MNight  = 0
  121.   
  122.   #深夜色調(R, G, B, alpha)
  123.   MNC     = [0, 0, 75, 225]
  124.   
  125. end
  126. #==============================================================================
  127. # ■ Game_Party
  128. #------------------------------------------------------------------------------
  129. #  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
  130. # スのインスタンスは $game_party で参照されます。
  131. #==============================================================================

  132. class Game_Party < Game_Unit
  133.   #--------------------------------------------------------------------------
  134.   # ● 公開インスタンス変数
  135.   #--------------------------------------------------------------------------
  136.   attr_accessor :time                    # 時間管理
  137.   attr_accessor :time_mode               # 時間帯データ
  138.   attr_accessor :day_red                 # R
  139.   attr_accessor :day_green               # G
  140.   attr_accessor :day_blue                # B
  141.   attr_accessor :day_alpha               # alpha
  142.   attr_accessor :daytimeview_force_change# ビューポート強制更新フラグ
  143.   #--------------------------------------------------------------------------
  144.   # ● オブジェクト初期化
  145.   #--------------------------------------------------------------------------
  146.   alias initialize_time initialize
  147.   def initialize
  148.     initialize_time
  149.     [url=home.php?mod=space&uid=134219]@Time[/url] = TIME_SCHEDULE::START
  150.     if [url=home.php?mod=space&uid=134219]@Time[/url] < TIME_SCHEDULE::Morning && @time >= TIME_SCHEDULE::Dawn
  151.       @time_mode = 0
  152.       dr = TIME_SCHEDULE::DaC[0]
  153.       dg = TIME_SCHEDULE::DaC[1]
  154.       db = TIME_SCHEDULE::DaC[2]
  155.       da = TIME_SCHEDULE::DaC[3]
  156.     elsif @time < TIME_SCHEDULE::Noon && @time >= TIME_SCHEDULE::Morning
  157.       @time_mode = 1
  158.       dr = TIME_SCHEDULE::MoC[0]
  159.       dg = TIME_SCHEDULE::MoC[1]
  160.       db = TIME_SCHEDULE::MoC[2]
  161.       da = TIME_SCHEDULE::MoC[3]
  162.     elsif @time < TIME_SCHEDULE::Evening && @time >= TIME_SCHEDULE::Noon
  163.       @time_mode = 2
  164.       dr = TIME_SCHEDULE::Noc[0]
  165.       dg = TIME_SCHEDULE::Noc[1]
  166.       db = TIME_SCHEDULE::Noc[2]
  167.       da = TIME_SCHEDULE::Noc[3]
  168.     elsif @time < TIME_SCHEDULE::Night && @time >= TIME_SCHEDULE::Evening
  169.       @time_mode = 3
  170.       dr = TIME_SCHEDULE::EvC[0]
  171.       dg = TIME_SCHEDULE::EvC[1]
  172.       db = TIME_SCHEDULE::EvC[2]
  173.       da = TIME_SCHEDULE::EvC[3]
  174.     elsif @time < TIME_SCHEDULE::MNight or @time >= TIME_SCHEDULE::Night
  175.       @time_mode = 4
  176.       dr = TIME_SCHEDULE::NiC[0]
  177.       dg = TIME_SCHEDULE::NiC[1]
  178.       db = TIME_SCHEDULE::NiC[2]
  179.       da = TIME_SCHEDULE::NiC[3]
  180.     elsif @time < TIME_SCHEDULE::Dawn or @time >= TIME_SCHEDULE::MNight
  181.       @time_mode = 5
  182.       dr = TIME_SCHEDULE::MNC[0]
  183.       dg = TIME_SCHEDULE::MNC[1]
  184.       db = TIME_SCHEDULE::MNC[2]
  185.       da = TIME_SCHEDULE::MNC[3]
  186.     end
  187.     @day_red = dr
  188.     @day_green = dg
  189.     @day_blue = db
  190.     @day_alpha = da
  191.   end
  192. end
  193. class Game_Map
  194.   #--------------------------------------------------------------------------
  195.   # ● フレーム更新
  196.   #     main : インタプリタ更新フラグ
  197.   #--------------------------------------------------------------------------
  198.   alias update_time update
  199.   def update(main = false)
  200.     update_time(main)
  201.     return if TIME_SCHEDULE::SWITCH > 0 && $game_switches[TIME_SCHEDULE::SWITCH] == true
  202.     return if TIME_SCHEDULE::INTPRT == false && @interpreter.running?
  203.     ts_update_base
  204.   end
  205.   def ts_update_base
  206.     $game_party.time += TIME_SCHEDULE::PLUS
  207.     if $game_party.time >= 8640000
  208.       $game_variables[TIME_SCHEDULE::VAR5] += 1 if TIME_SCHEDULE::VAR5 > 0
  209.       $game_party.time = 0
  210.     end
  211.     ts_update
  212.   end
  213.   def ts_update
  214.     time_data = $game_party.time
  215.     if time_data < TIME_SCHEDULE::Morning && time_data >= TIME_SCHEDULE::Dawn
  216.       if $game_party.time_mode != 0
  217.         $game_party.time_mode = 0
  218.       end
  219.     elsif time_data < TIME_SCHEDULE::Noon && time_data >= TIME_SCHEDULE::Morning
  220.       if $game_party.time_mode != 1
  221.         $game_party.time_mode = 1
  222.       end
  223.     elsif time_data < TIME_SCHEDULE::Evening && time_data >= TIME_SCHEDULE::Noon
  224.       if $game_party.time_mode != 2
  225.         $game_party.time_mode = 2
  226.       end
  227.     elsif time_data < TIME_SCHEDULE::Night && time_data >= TIME_SCHEDULE::Evening
  228.       if $game_party.time_mode != 3
  229.         $game_party.time_mode = 3
  230.       end
  231.     elsif time_data < TIME_SCHEDULE::MNight or time_data >= TIME_SCHEDULE::Night
  232.       if $game_party.time_mode != 4
  233.         $game_party.time_mode = 4
  234.       end
  235.     elsif time_data < TIME_SCHEDULE::Dawn or time_data >= TIME_SCHEDULE::MNight
  236.       if $game_party.time_mode != 5
  237.         $game_party.time_mode = 5
  238.       end
  239.     end
  240.     $game_variables[TIME_SCHEDULE::VAR1] = $game_party.time_mode if TIME_SCHEDULE::VAR1 > 0
  241.     $game_variables[TIME_SCHEDULE::VAR2] = $game_party.time / 100 / 60 / 60 if TIME_SCHEDULE::VAR2 > 0
  242.     $game_variables[TIME_SCHEDULE::VAR3] = $game_party.time / 100 / 60 % 60 if TIME_SCHEDULE::VAR3 > 0
  243.     $game_variables[TIME_SCHEDULE::VAR4] = $game_party.time / 100 % 60 if TIME_SCHEDULE::VAR4 > 0
  244.   end
  245. end
  246. class Spriteset_Map
  247.   #--------------------------------------------------------------------------
  248.   # ● ビューポートの作成
  249.   #--------------------------------------------------------------------------
  250.   alias create_viewports_daytime create_viewports
  251.   def create_viewports
  252.     create_viewports_daytime
  253.     create_daytime_viewports
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 時間経過で変化するビューポートの作成
  257.   #--------------------------------------------------------------------------
  258.   def create_daytime_viewports
  259.     @viewport_daytime = Viewport.new
  260.     @viewport_daytime.z = 150
  261.     return if TIME_SCHEDULE::COLOR == false
  262.     @viewport_daytime.color.set($game_party.day_red, $game_party.day_green, $game_party.day_blue, $game_party.day_alpha)
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● ビューポートの解放
  266.   #--------------------------------------------------------------------------
  267.   alias dispose_viewports_daytime dispose_viewports
  268.   def dispose_viewports
  269.     dispose_viewports_daytime
  270.     @viewport_daytime.dispose
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● 天候の更新
  274.   #--------------------------------------------------------------------------
  275.   alias update_weather_daytime update_weather
  276.   def update_weather
  277.     update_weather_daytime
  278.     update_daytime
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 時間による画面の更新
  282.   #--------------------------------------------------------------------------
  283.   def update_daytime
  284.     return if TIME_SCHEDULE::COLOR == false
  285.     if $data_mapinfos[$game_map.map_id].name.include?(TIME_SCHEDULE::MAP)
  286.       @viewport_daytime.color.set(0, 0, 0, 0)
  287.       $game_party.daytimeview_force_change = true
  288.       return
  289.     end
  290.     dacd = TIME_SCHEDULE::DaC
  291.     mocd = TIME_SCHEDULE::MoC
  292.     nocd = TIME_SCHEDULE::NoC
  293.     evcd = TIME_SCHEDULE::EvC
  294.     nicd = TIME_SCHEDULE::NiC
  295.     mncd = TIME_SCHEDULE::MNC
  296.     spd = TIME_SCHEDULE::SPEED
  297.     case $game_party.time_mode
  298.     when 0
  299.       rdn = dacd[0]
  300.       gdn = dacd[1]
  301.       bdn = dacd[2]
  302.       adn = dacd[3]
  303.     when 1
  304.       rdn = mocd[0]
  305.       gdn = mocd[1]
  306.       bdn = mocd[2]
  307.       adn = mocd[3]
  308.     when 2
  309.       rdn = nocd[0]
  310.       gdn = nocd[1]
  311.       bdn = nocd[2]
  312.       adn = nocd[3]
  313.     when 3
  314.       rdn = evcd[0]
  315.       gdn = evcd[1]
  316.       bdn = evcd[2]
  317.       adn = evcd[3]
  318.     when 4
  319.       rdn = nicd[0]
  320.       gdn = nicd[1]
  321.       bdn = nicd[2]
  322.       adn = nicd[3]
  323.     when 5
  324.       rdn = mncd[0]
  325.       gdn = mncd[1]
  326.       bdn = mncd[2]
  327.       adn = mncd[3]
  328.     end
  329.     if $game_party.daytimeview_force_change == true
  330.       @viewport_daytime.color.set(rdn, gdn, bdn, adn)
  331.       $game_party.daytimeview_force_change = false
  332.     else
  333.       rdo = @viewport_daytime.color.red
  334.       gdo = @viewport_daytime.color.green
  335.       bdo = @viewport_daytime.color.blue
  336.       ado = @viewport_daytime.color.alpha
  337.       if rdo > rdn
  338.         rd = rdo - spd
  339.       elsif rdo < rdn
  340.         rd = rdo + spd
  341.       else
  342.         rd = rdo
  343.       end
  344.       if gdo > gdn
  345.         gd = gdo - spd
  346.       elsif rdo < gdn
  347.         gd = gdo + spd
  348.       else
  349.         gd = gdo
  350.       end
  351.       if bdo > bdn
  352.         bd = bdo - spd
  353.       elsif bdo < bdn
  354.         bd = bdo + spd
  355.       else
  356.         bd = bdo
  357.       end
  358.       if ado > adn
  359.         ad = ado - spd
  360.       elsif rdo < adn
  361.         ad = ado + spd
  362.       else
  363.         ad = ado
  364.       end
  365.       $game_party.day_red = rd
  366.       $game_party.day_green = gd
  367.       $game_party.day_blue = bd
  368.       $game_party.day_alpha = ad
  369.       @viewport_daytime.color.set(rd, gd, bd, ad)
  370.     end
  371.   end
  372. end
  373. class Game_Interpreter
  374.   def time_control(n1,n2,n3,n4)
  375.     return if TIME_SCHEDULE::SWITCH > 0 && $game_switches[TIME_SCHEDULE::SWITCH] == true
  376.     tcd = tcd(n2,n3,n4)
  377.     if n1 == "+"
  378.       data = tcd + $game_party.time
  379.       if data >= 8640000
  380.         data = data - 8640000
  381.         $game_variables[TIME_SCHEDULE::VAR5] += 1 if TIME_SCHEDULE::VAR5 > 0
  382.       end
  383.     elsif n1 == "-"
  384.       data = $game_party.time - tcd
  385.       if 0 > data
  386.         data = data + 8640000
  387.         $game_variables[TIME_SCHEDULE::VAR5] -= 1 if TIME_SCHEDULE::VAR5 > 0
  388.       end
  389.     elsif n1 == "="
  390.       data = tcd
  391.     else
  392.       return
  393.     end
  394.     $game_party.time = data
  395.     $game_map.ts_update
  396.     $game_party.daytimeview_force_change = true
  397.   end
  398.   def tcd(nd1,nd2,nd3)
  399.     data = 0
  400.     data += nd1 * 60 * 60 * 100
  401.     data += nd2 * 60 * 100
  402.     data += nd3 * 100
  403.     return data
  404.   end
  405. end
复制代码

作者: j433463    时间: 2013-1-17 00:34
本帖最后由 j433463 于 2013-1-17 00:40 编辑

事件基本就像冰镇史莱姆的写法,不过楼主的设定有点奇怪,
黄昏和黎明的时间与夜晚一样长?

如果我自己的游戏,我会设白天十分钟,黄昏与黎明各两分钟,夜晚六分钟,
甚至黄昏黎明都只有一分钟,夜晚八分钟,而总共二十分钟刚好把一小时整除,
一小时刚好三昼夜,那就可以写成这样了:



若不计较一两秒的反应误差,等待帧数甚至可以从 10 提高到 60,
对游戏运行应该会减低影响。

怛我这例子中时间用的是 Time.new 即现实时间,并不是游戏时间,
因为这样子方便调桌面小时钟的分钟数来进行测试(有后台运行脚本的情况下),
所以真要用,那个算式还得改一改。
作者: 664299301    时间: 2013-1-17 17:06
本帖最后由 664299301 于 2013-1-17 17:16 编辑

喵,不是很难。首先要用公共事件名字随便,设置为并行处理,绑定哪个开关自己定。(前提是游戏进行时开关必须打开)然后在内容中调夜晚,如果时间比较多可以调好点时间不多可以调差点。调色按钮那里。

差点:调循环,循环白天然后等待XXX(X=你的秒数)调色中午等待XXX到了黄昏。等待,到了晚上,又等。

好点:就是在调色按钮中算出早上于中午的差距,然后分几步完成。这样看起来正常一点。不会马上天就黑了。

完美:这个更麻烦。就是自己一个一个点去调。方法无法用语言表达= =。自己摸索下吧。不是电脑无图。如果要图的话,点评或给点经验吧。打字好累。有电脑会把完美公布的。。。(切记不要按等待到结束
作者: trumpetong    时间: 2013-1-20 16:25
谢谢大家的帮助。。时间已经搞好了~~~~~~~!。。5555{:2_267:}




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