Project1

标题: 关于vx的烛光系统 [打印本页]

作者: 精灵使者    时间: 2008-6-11 09:45
标题: 关于vx的烛光系统
有没有高人能做一个vx的烛光系统呢?
xp似乎有烛光系统,vx也想用……
精灵做游戏的时候遇到了些麻烦。 [LINE]1,#dddddd[/LINE]此贴于 2008-6-12 9:23:15 被版主snstar2006提醒,请楼主看到后对本贴做出回应。 [LINE]1,#dddddd[/LINE]本贴由论坛斑竹精灵使者结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者: oyanjing    时间: 2008-6-11 16:44
嗯嗯,我也想在VX里用,我很菜,不能说什么,帮顶一下

个人觉得,游戏里多了昼夜,在发展剧情上很有开拓滴说
作者: 雪流星    时间: 2008-6-11 16:50
LS你是要晝夜系統還是燭光系統?
晝夜系統置頂帖裡面已經有了
作者: 精灵使者    时间: 2008-6-11 18:02
以下引用snstar2006于2008-6-11 8:50:56的发言:

LS你是要晝夜系統還是燭光系統?
晝夜系統置頂帖裡面已經有了

烛光系统和昼夜系统是完全不一个系统的啊。
昼夜系统其实事件就可以做。
另外,如果有任务系统的话,麻烦流星给我一下(做游戏要用)
作者: 雪流星    时间: 2008-6-11 18:20
以下引用精灵使者于2008-6-11 10:02:10的发言:
烛光系统和昼夜系统是完全不一个系统的啊。
昼夜系统其实事件就可以做。
另外,如果有任务系统的话,麻烦流星给我一下(做游戏要用)


置頂置頂
拜託看看置頂orz <(_ _)>

作者: 精灵使者    时间: 2008-6-11 18:21
置顶啊。
我去看看。
这两个如果都有的话我就拿来用了。
作者: 雪流星    时间: 2008-6-11 19:19
精靈你說的燭光系統是要哪個版本?
http://rpg.blue/web/htm/news865.htm
作者: yangff    时间: 2008-6-11 19:23
以前有XP的( 66 )VX也能用,现在因为回档米了
作者: 越前リョーマ    时间: 2008-6-11 19:44
我比较喜欢第一种。
作者: 精灵使者    时间: 2008-6-11 22:10
我的剧情可能需要主角烛光和事件烛光两种- -
不知道纯事件可以不可以做。
换句话说,某柳的那个版本和星辰的版本(两个烛光)都可以的……
作者: oyanjing    时间: 2008-6-11 22:44
这都是XP的呀,不用改就能在vx上使用吗?
昼夜系统呢?
作者: 越前リョーマ    时间: 2008-6-11 22:46
以下引用oyanjing于2008-6-11 14:44:48的发言:

这都是XP的呀,不用改就能在vx上使用吗?
昼夜系统呢?

不能哦……
作者: oyanjing    时间: 2008-6-11 22:55


嗯嗯,那位大大帮忙把烛光系统改一下,随便把昼夜系统也做进去吧,我好一起学呢

嗯嗯,是VX版本的

嗯嗯
作者: 越前リョーマ    时间: 2008-6-11 23:00
以下引用oyanjing于2008-6-11 14:55:27的发言:



嗯嗯,那位大大帮忙把烛光系统改一下,随便把昼夜系统也做进去吧,我好一起学呢

嗯嗯,是VX版本的

嗯嗯

昼夜的话我有哦。
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 昼夜转换 - KGC_DayNight ◆ VX ◆
  3. #_/    ◇ Last update : 2008/03/08 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  游戏中制作昼夜的概念。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ 定做项目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11. module DayNight
  12.   # ◆ 昼夜转换的方式
  13.   #  0..事件经过  1..步数  2..现实时间(微妙)
  14.   METHOD = 1

  15.   # ◆对这边在保存入阶段的变量的号码这儿指定了
  16.   #  想翻译的文章的变量,容纳现在的阶段。请力量做。
  17.   PHASE_VARIABLE     = 11
  18.   # ◆ 保存日数的变量的号码
  19.   #  对在这里指定了的变量,容纳流逝了的日数。
  20.   PASS_DAYS_VARIABLE = 12

  21.   # ◆ 活动中不变更阶段
  22.   STOP_ON_EVENT = true
  23.   # ◆ 战斗的时候,只背景适用色调
  24.   #  要false 的话,夜晚成为哪里的话的事。
  25.   TONE_BACK_ONLY_IN_BATTLE = true

  26.   # ◆ "名称"各阶段的设定
  27.   #各阶段,色调(Tone),转换时间。
  28.   # 这个格式作成。也能增加。
  29.   # 阶段,不过,在不习惯的时候不推荐。
  30.   # 阶段的名字。
  31.   #名字自己没有意义。
  32.   #[色调]
  33.   #画面全体的颜色。
  34.   # 不太明白的情况请别变更。到转移为止的到。
  35.   #[转换时间]
  36.   #下面的阶段时间。
  37.   #转换方式是时间流逝的情况秒,是步数的情况是步数就那样。
  38.   #现实时间的情况,转换到下面的状态的时刻(24小时方式)。
  39.   PHASE = [
  40.     ["昼",   Tone.new(   0,    0,   0), 300],  # フェーズ 0
  41.     ["夕方", Tone.new( -32,  -96, -96), 100],  # フェーズ 1
  42.     ["夜",   Tone.new(-128, -128, -32), 250],  # フェーズ 2
  43.     ["朝",   Tone.new( -48,  -48, -16), 100],  # フェーズ 3
  44.   ]  # ← これは消さないこと!

  45.   # 現実時間のときは、
  46.   #  ["昼",   Tone.new(  0,   0,   0), 16],  # フェーズ 0 (16時に夕方)
  47.   #  ["夕方", Tone.new(  0, -96, -96), 20],  # フェーズ 1 (20時に夜)
  48.   #  ["夜",   Tone.new(-96, -96, -64),  6],  # フェーズ 2 (6時に朝)
  49.   #  ["朝",   Tone.new(-48, -48, -16), 10],  # フェーズ 3 (10時に昼)
  50.   # このような感じ。

  51.   # ◆ 日付が変わるフェーズ
  52.   #  ここで指定したフェーズになったとき、日数を加算する。
  53.   #  初期状態の場合  0..昼  1..夕方  2..夜  3..朝
  54.   # ※ 現実時間の場合、現実と同じ日数にはならないので注意。
  55.   PASS_DAY_PHASE = 3

  56.   # ◆ 状態切り替え時のフェード時間 (フレーム)
  57.   #  省略時もこの値を使用します。
  58.   PHASE_DURATION = 60

  59.   # ◆ 曜日名
  60.   #  初日は先頭から始まり、最後の曜日まで行くと最初の曜日に戻る。
  61.   #  曜日自体に意味はありません。
  62.   # ※ 現実時間を使用する場合は 7 個にしてください。
  63.   WEEK_NAME = ["日", "月", "火", "水", "木", "金", "土"]
  64. end
  65. end

  66. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  67. $imported = {} if $imported == nil
  68. $imported["DayNight"] = true

  69. if $data_mapinfos == nil
  70.   $data_mapinfos = load_data("Data/MapInfos.rvdata")
  71. end

  72. module KGC::DayNight
  73.   METHOD_TIME  = 0  # 時間経過
  74.   METHOD_STEP  = 1  # 歩数
  75.   METHOD_RTIME = 2  # 現実時間

  76.   # 正規表現
  77.   module Regexp
  78.     # マップ情報
  79.     module MapInfo
  80.       # 遷移を止める
  81.       DAYNIGHT_STOP = /\[DN_STOP\]/i
  82.       # 昼夜エフェクト無効
  83.       DAYNIGHT_VOID = /\[DN_VOID\]/i
  84.     end

  85.     # 敵グループ
  86.     module Troop
  87.       # 出現フェーズ
  88.       APPEAR_PHASE = /\[DN((?:[ ]*[\-]?\d+(?:[ ]*,)?)+)\]/i
  89.     end
  90.   end

  91.   #--------------------------------------------------------------------------
  92.   # ○ 敵グループ出現判定
  93.   #     troop : 判定対象の敵グループ
  94.   #     phase : 判定するフェーズ
  95.   #--------------------------------------------------------------------------
  96.   def self.troop_appear?(troop, phase = $game_system.daynight_phase)
  97.     # 出現判定
  98.     unless troop.appear_daynight_phase.empty?
  99.       return false unless troop.appear_daynight_phase.include?(phase)
  100.     end
  101.     # 非出現判定
  102.     unless troop.nonappear_daynight_phase.empty?
  103.       return false if troop.nonappear_daynight_phase.include?(phase)
  104.     end

  105.     return true
  106.   end
  107. end

  108. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  109. #==============================================================================
  110. # □ KGC::Commands
  111. #==============================================================================

  112. module KGC::Commands
  113.   module_function
  114.   #--------------------------------------------------------------------------
  115.   # ○ 昼夜切り替えを停止
  116.   #--------------------------------------------------------------------------
  117.   def stop_daynight
  118.     $game_system.daynight_change_enabled = false
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ○ 昼夜切り替えを起動
  122.   #--------------------------------------------------------------------------
  123.   def start_daynight
  124.     $game_system.daynight_change_enabled = true
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ○ 現在のフェーズ名を取得
  128.   #--------------------------------------------------------------------------
  129.   def get_daynight_name
  130.     return KGC::DayNight::PHASE[get_daynight_phase][0]
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ○ 現在の曜日を取得
  134.   #     variable_id : 代入する変数 ID
  135.   #--------------------------------------------------------------------------
  136.   def get_daynight_week(variable_id = 0)
  137.     if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
  138.       week = Time.now.wday
  139.     else
  140.       days = $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE]
  141.       week = (days % KGC::DayNight::WEEK_NAME.size)
  142.     end

  143.     if variable_id > 0
  144.       $game_variables[variable_id] = week
  145.     end
  146.     return week
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ○ 現在の曜日名を取得
  150.   #--------------------------------------------------------------------------
  151.   def get_daynight_week_name
  152.     return KGC::DayNight::WEEK_NAME[get_daynight_week]
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ○ フェーズ切り替え
  156.   #     phase     : 切り替え後のフェーズ
  157.   #     duration  : 切り替え時間(フレーム)
  158.   #     pass_days : 経過させる日数  (省略時: 0)
  159.   #--------------------------------------------------------------------------
  160.   def change_daynight_phase(phase,
  161.       duration = KGC::DayNight::PHASE_DURATION,
  162.       pass_days = 0)
  163.     $game_temp.manual_daynight_duration = duration
  164.     $game_system.daynight_counter = 0
  165.     $game_system.daynight_phase = phase
  166.     $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += pass_days
  167.     $game_map.need_refresh = true
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ○ 次のフェーズへ遷移
  171.   #     duration : 切り替え時間(フレーム)
  172.   #--------------------------------------------------------------------------
  173.   def transit_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
  174.     $game_screen.transit_daynight_phase(duration)
  175.     $game_map.need_refresh = true
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ○ デフォルトの色調に戻す
  179.   #     duration : 切り替え時間(フレーム)
  180.   #--------------------------------------------------------------------------
  181.   def set_daynight_default(duration = KGC::DayNight::PHASE_DURATION)
  182.     $game_screen.set_daynight_default(duration)
  183.     $game_map.need_refresh = true
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ○ 現在のフェーズを復元
  187.   #     duration : 切り替え時間(フレーム)
  188.   #--------------------------------------------------------------------------
  189.   def restore_daynight_phase(duration = KGC::DayNight::PHASE_DURATION)
  190.     $game_screen.restore_daynight_phase(duration)
  191.     $game_map.need_refresh = true
  192.   end
  193. end

  194. class Game_Interpreter
  195.   include KGC::Commands
  196. end

  197. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  198. #==============================================================================
  199. # ■ RPG::MapInfo
  200. #==============================================================================

  201. class RPG::MapInfo
  202.   #--------------------------------------------------------------------------
  203.   # ● マップ名取得
  204.   #--------------------------------------------------------------------------
  205.   def name
  206.     return @name.gsub(/\[.*\]/) { "" }
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ○ オリジナルマップ名取得
  210.   #--------------------------------------------------------------------------
  211.   def original_name
  212.     return @name
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ○ 昼夜切り替え停止
  216.   #--------------------------------------------------------------------------
  217.   def daynight_stop
  218.     return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_STOP
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ○ 昼夜エフェクト無効
  222.   #--------------------------------------------------------------------------
  223.   def daynight_void
  224.     return @name =~ KGC::DayNight::Regexp::MapInfo::DAYNIGHT_VOID
  225.   end
  226. end

  227. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  228. #==============================================================================
  229. # ■ RPG::Area
  230. #==============================================================================

  231. unless $@
  232. class RPG::Area
  233.   #--------------------------------------------------------------------------
  234.   # ○ エンカウントリストの取得
  235.   #--------------------------------------------------------------------------
  236.   alias encounter_list_KGC_DayNight encounter_list
  237.   def encounter_list
  238.     list = encounter_list_KGC_DayNight.clone

  239.     # 出現条件判定
  240.     list.each_index { |i|
  241.       list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
  242.     }
  243.     return list.compact
  244.   end
  245. end
  246. end

  247. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  248. #==============================================================================
  249. # ■ RPG::Troop
  250. #==============================================================================

  251. class RPG::Troop
  252.   #--------------------------------------------------------------------------
  253.   # ○ 昼夜切り替えのキャッシュ生成
  254.   #--------------------------------------------------------------------------
  255.   def create_daynight_cache
  256.     @__appear_daynight_phase = []
  257.     @__nonappear_daynight_phase = []

  258.     # 出現するフェーズ
  259.     if @name =~ KGC::DayNight::Regexp::Troop::APPEAR_PHASE
  260.       $1.scan(/[\-]?\d+/).each { |num|
  261.         phase = num.to_i
  262.         if phase < 0
  263.           # 出現しない
  264.           @__nonappear_daynight_phase << phase.abs
  265.         else
  266.           # 出現する
  267.           @__appear_daynight_phase << phase
  268.         end
  269.       }
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ○ 出現するフェーズ
  274.   #--------------------------------------------------------------------------
  275.   def appear_daynight_phase
  276.     create_daynight_cache if @__appear_daynight_phase == nil
  277.     return @__appear_daynight_phase
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ○ 出現しないフェーズ
  281.   #--------------------------------------------------------------------------
  282.   def nonappear_daynight_phase
  283.     create_daynight_cache if @__nonappear_daynight_phase == nil
  284.     return @__nonappear_daynight_phase
  285.   end
  286. end

  287. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  288. #==============================================================================
  289. # ■ Game_Temp
  290. #==============================================================================

  291. class Game_Temp
  292.   #--------------------------------------------------------------------------
  293.   # ● 公開インスタンス変数
  294.   #--------------------------------------------------------------------------
  295.   attr_accessor :manual_daynight_duration # 手動フェーズ変更フラグ
  296.   #--------------------------------------------------------------------------
  297.   # ● オブジェクト初期化
  298.   #--------------------------------------------------------------------------
  299.   alias initialize_KGC_DayNight initialize
  300.   def initialize
  301.     initialize_KGC_DayNight

  302.     @manual_daynight_duration = nil
  303.   end
  304. end

  305. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  306. #==============================================================================
  307. # ■ Game_System
  308. #==============================================================================

  309. class Game_System
  310.   #--------------------------------------------------------------------------
  311.   # ● 公開インスタンス変数
  312.   #--------------------------------------------------------------------------
  313.   attr_writer   :daynight_counter         # フェーズ遷移カウンタ
  314.   attr_writer   :daynight_change_enabled  # 昼夜切り替え有効
  315.   #--------------------------------------------------------------------------
  316.   # ● オブジェクト初期化
  317.   #--------------------------------------------------------------------------
  318.   alias initialize_KGC_DayNight initialize
  319.   def initialize
  320.     initialize_KGC_DayNight

  321.     @daynight_counter = 0
  322.     @daynight_change_enabled = true
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ○ フェーズ遷移カウンタを取得
  326.   #--------------------------------------------------------------------------
  327.   def daynight_counter
  328.     @daynight_counter = 0 if @daynight_counter == nil
  329.     return @daynight_counter
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ○ 現在のフェーズを取得
  333.   #--------------------------------------------------------------------------
  334.   def daynight_phase
  335.     return $game_variables[KGC::DayNight::PHASE_VARIABLE]
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ○ 現在のフェーズを変更
  339.   #--------------------------------------------------------------------------
  340.   def daynight_phase=(value)
  341.     $game_variables[KGC::DayNight::PHASE_VARIABLE] = value
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ○ 昼夜切り替え有効フラグを取得
  345.   #--------------------------------------------------------------------------
  346.   def daynight_change_enabled
  347.     @daynight_change_enabled = 0 if @daynight_change_enabled == nil
  348.     return @daynight_change_enabled
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ○ フェーズ進行
  352.   #--------------------------------------------------------------------------
  353.   def progress_daynight_phase
  354.     self.daynight_phase += 1
  355.     if self.daynight_phase >= KGC::DayNight::PHASE.size
  356.       self.daynight_phase = 0
  357.     end
  358.     $game_map.need_refresh = true
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ○ 現在のフェーズオブジェクトを取得
  362.   #--------------------------------------------------------------------------
  363.   def daynight_phase_object
  364.     return KGC::DayNight::PHASE[daynight_phase]
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ○ 以前のフェーズオブジェクトを取得
  368.   #--------------------------------------------------------------------------
  369.   def previous_daynight_phase_object
  370.     return KGC::DayNight::PHASE[daynight_phase - 1]
  371.   end
  372. end

  373. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  374. #==============================================================================
  375. # ■ Game_Screen
  376. #==============================================================================

  377. class Game_Screen
  378.   #--------------------------------------------------------------------------
  379.   # ● 公開インスタンス変数
  380.   #--------------------------------------------------------------------------
  381.   attr_reader   :daynight_tone            # 昼夜の色調
  382.   #--------------------------------------------------------------------------
  383.   # ● クリア
  384.   #--------------------------------------------------------------------------
  385.   alias clear_KGC_DayNight clear
  386.   def clear
  387.     clear_KGC_DayNight

  388.     clear_daynight
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ○ 昼夜切り替え用変数をクリア
  392.   #--------------------------------------------------------------------------
  393.   def clear_daynight
  394.     @default_tone = Tone.new(0, 0, 0)

  395.     # 移動判定用座標初期化
  396.     @daynight_x = 0
  397.     @daynight_y = 0

  398.     # フレーム更新用カウント初期化
  399.     @frame_count = Graphics.frame_count
  400.     @daynight_tone_duration = 0

  401.     apply_daynight
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ○ 昼夜の色調を適用
  405.   #--------------------------------------------------------------------------
  406.   def apply_daynight
  407.     return if $game_map == nil

  408.     # 切り替えを無効化するマップの場合
  409.     if $game_map.daynight_void?
  410.       if @daynight_tone_changed
  411.         # 初期の色調に戻す
  412.         @tone = @default_tone.clone
  413.         @daynight_tone_changed = false
  414.       end
  415.       @daynight_tone = @tone.clone
  416.       return
  417.     end

  418.     # フェーズがおかしければ修復
  419.     if $game_system.daynight_phase_object == nil
  420.       $game_system.daynight_phase = 0
  421.     end

  422.     # 現在の色調を適用
  423.     @tone = $game_system.daynight_phase_object[1].clone
  424.     @daynight_tone = @tone.clone

  425.     # 現実時間遷移の場合
  426.     if KGC::DayNight::METHOD == KGC::DayNight::METHOD_RTIME
  427.       time = Time.now
  428.       # マッチするフェーズに遷移
  429.       KGC::DayNight::PHASE.each_with_index { |phase, i|
  430.         if phase[2] <= time.hour
  431.           start_tone_change(phase[1], 1)
  432.           $game_system.daynight_phase = i
  433.           break
  434.         end
  435.       }
  436.     end

  437.     @daynight_tone_changed = true
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ○ 色調の取得
  441.   #--------------------------------------------------------------------------
  442.   def tone
  443.     if $game_temp.in_battle && KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
  444.       return @default_tone
  445.     else
  446.       return @tone
  447.     end
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● 色調変更の開始
  451.   #     tone     : 色調
  452.   #     duration : 時間
  453.   #--------------------------------------------------------------------------
  454.   alias start_tone_change_KGC_DayNight start_tone_change
  455.   def start_tone_change(tone, duration)
  456.     duration = [duration, 1].max
  457.     start_tone_change_KGC_DayNight(tone, duration)

  458.     @daynight_tone_target = tone.clone
  459.     @daynight_tone_duration = duration
  460.   end
  461.   #--------------------------------------------------------------------------
  462.   # ● フレーム更新
  463.   #--------------------------------------------------------------------------
  464.   alias update_KGC_DayNight update
  465.   def update
  466.     update_KGC_DayNight

  467.     update_daynight_transit
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 色調の更新
  471.   #--------------------------------------------------------------------------
  472.   alias update_tone_KGC_DayNight update_tone
  473.   def update_tone
  474.     update_tone_KGC_DayNight

  475.     if @daynight_tone_duration >= 1
  476.       d = @daynight_tone_duration
  477.       target = @daynight_tone_target
  478.       @daynight_tone.red = (@daynight_tone.red * (d - 1) + target.red) / d
  479.       @daynight_tone.green = (@daynight_tone.green * (d - 1) + target.green) / d
  480.       @daynight_tone.blue = (@daynight_tone.blue * (d - 1) + target.blue) / d
  481.       @daynight_tone.gray = (@daynight_tone.gray * (d - 1) + target.gray) / d
  482.       @daynight_tone_duration -= 1
  483.     end
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ○ フェーズ遷移の更新
  487.   #--------------------------------------------------------------------------
  488.   def update_daynight_transit
  489.     # 手動切り替えが行われた場合
  490.     if $game_temp.manual_daynight_duration
  491.       start_tone_change($game_system.daynight_phase_object[1],
  492.         $game_temp.manual_daynight_duration)
  493.       $game_temp.manual_daynight_duration = nil
  494.       @daynight_tone_changed = true
  495.     end

  496.     return unless $game_system.daynight_change_enabled  # 切り替えを
  497.     return if $game_map.daynight_stop?                  # 停止中

  498.     if KGC::DayNight::STOP_ON_EVENT
  499.       interpreter = ($game_temp.in_battle ? $game_troop.interpreter :
  500.         $game_map.interpreter)
  501.       return if interpreter.running?                    # イベント実行中
  502.     end

  503.     case KGC::DayNight::METHOD
  504.     when KGC::DayNight::METHOD_TIME   # 時間
  505.       update_daynight_pass_time
  506.     when KGC::DayNight::METHOD_STEP   # 歩数
  507.       update_daynight_step
  508.     when KGC::DayNight::METHOD_RTIME  # 現実時間
  509.       update_daynight_real_time
  510.     end
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ○ 遷移 : 時間経過
  514.   #--------------------------------------------------------------------------
  515.   def update_daynight_pass_time
  516.     # カウント増加量計算
  517.     inc_count = Graphics.frame_count - @frame_count
  518.     # 加算量がおかしい場合は戻る
  519.     if inc_count >= 100
  520.       @frame_count = Graphics.frame_count
  521.       return
  522.     end
  523.     # カウント加算
  524.     $game_system.daynight_counter += inc_count
  525.     @frame_count = Graphics.frame_count

  526.     # 状態遷移判定
  527.     count = $game_system.daynight_counter / Graphics.frame_rate
  528.     if count >= $game_system.daynight_phase_object[2]
  529.       transit_daynight_next
  530.     end
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ○ 遷移 : 歩数
  534.   #--------------------------------------------------------------------------
  535.   def update_daynight_step
  536.     # 移動していなければ戻る
  537.     return if @daynight_x == $game_player.x && @daynight_y == $game_player.y

  538.     @daynight_x = $game_player.x
  539.     @daynight_y = $game_player.y
  540.     # カウント加算
  541.     $game_system.daynight_counter += 1
  542.     # 状態遷移判定
  543.     count = $game_system.daynight_counter
  544.     if count >= $game_system.daynight_phase_object[2]
  545.       transit_daynight_next
  546.     end
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # ○ 遷移 : 現実時間
  550.   #--------------------------------------------------------------------------
  551.   def update_daynight_real_time
  552.     time = Time.now
  553.     # 状態遷移判定
  554.     time1 = $game_system.daynight_phase_object[2]
  555.     transit = (time1 <= time.hour)
  556.     if $game_system.previous_daynight_phase_object != nil
  557.       time2 = $game_system.previous_daynight_phase_object[2]
  558.       if time1 < time2
  559.         transit &= (time.hour < time2)
  560.       end
  561.     end

  562.     if transit
  563.       transit_daynight_next
  564.     end
  565.   end
  566.   #--------------------------------------------------------------------------
  567.   # ○ 次の状態へ遷移
  568.   #     duration : 遷移時間
  569.   #--------------------------------------------------------------------------
  570.   def transit_daynight_next(duration = KGC::DayNight::PHASE_DURATION)
  571.     $game_system.daynight_counter = 0
  572.     $game_system.progress_daynight_phase
  573.     # 日数経過判定
  574.     if $game_system.daynight_phase == KGC::DayNight::PASS_DAY_PHASE
  575.       $game_variables[KGC::DayNight::PASS_DAYS_VARIABLE] += 1
  576.     end
  577.     # 色調切り替え
  578.     start_tone_change($game_system.daynight_phase_object[1], duration)
  579.     @daynight_tone_changed = true
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ○ デフォルトの状態(0, 0, 0)に戻す
  583.   #     duration : 遷移時間
  584.   #--------------------------------------------------------------------------
  585.   def set_daynight_default(duration)
  586.     start_tone_change(@default_tone, duration)
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ○ 現在のフェーズを復元
  590.   #     duration : 遷移時間
  591.   #--------------------------------------------------------------------------
  592.   def restore_daynight_phase(duration)
  593.     start_tone_change($game_system.daynight_phase_object[1], duration)
  594.     @daynight_tone_changed = true
  595.   end
  596. end

  597. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  598. #==============================================================================
  599. # ■ Game_Map
  600. #==============================================================================

  601. class Game_Map
  602.   #--------------------------------------------------------------------------
  603.   # ● セットアップ
  604.   #     map_id : マップ ID
  605.   #--------------------------------------------------------------------------
  606.   alias setup_KGC_DayNight setup
  607.   def setup(map_id)
  608.     setup_KGC_DayNight(map_id)

  609.     @screen.apply_daynight
  610.   end
  611.   #--------------------------------------------------------------------------
  612.   # ○ 昼夜切り替えを停止するか
  613.   #--------------------------------------------------------------------------
  614.   def daynight_stop?
  615.     info = $data_mapinfos[map_id]
  616.     return false if info == nil
  617.     return (info.daynight_stop || info.daynight_void)
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ○ 昼夜切り替えが無効か
  621.   #--------------------------------------------------------------------------
  622.   def daynight_void?
  623.     info = $data_mapinfos[map_id]
  624.     return false if info == nil
  625.     return info.daynight_void
  626.   end
  627.   #--------------------------------------------------------------------------
  628.   # ● エンカウントリストの取得
  629.   #--------------------------------------------------------------------------
  630.   alias encounter_list_KGC_DayNight encounter_list
  631.   def encounter_list
  632.     list = encounter_list_KGC_DayNight.clone

  633.     # 出現条件判定
  634.     list.each_index { |i|
  635.       list[i] = nil unless KGC::DayNight.troop_appear?($data_troops[list[i]])
  636.     }
  637.     return list.compact
  638.   end
  639. end

  640. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  641. #==============================================================================
  642. # ■ Spriteset_Battle
  643. #==============================================================================

  644. if KGC::DayNight::TONE_BACK_ONLY_IN_BATTLE
  645. class Spriteset_Battle
  646.   #--------------------------------------------------------------------------
  647.   # ● バトルバックスプライトの作成
  648.   #--------------------------------------------------------------------------
  649.   alias create_battleback_KGC_DayNight create_battleback
  650.   def create_battleback
  651.     create_battleback_KGC_DayNight

  652.     if @battleback_sprite.wave_amp == 0
  653.       @battleback_sprite.tone = $game_troop.screen.daynight_tone
  654.     end
  655.   end
  656.   #--------------------------------------------------------------------------
  657.   # ● バトルフロアスプライトの作成
  658.   #--------------------------------------------------------------------------
  659.   alias create_battlefloor_KGC_DayNight create_battlefloor
  660.   def create_battlefloor
  661.     create_battlefloor_KGC_DayNight

  662.     @battlefloor_sprite.tone = $game_troop.screen.daynight_tone
  663.   end
  664. end
  665. end

  666. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  667. #==============================================================================
  668. # ■ Scene_Map
  669. #==============================================================================

  670. class Scene_Map < Scene_Base
  671.   #--------------------------------------------------------------------------
  672.   # ● 開始処理
  673.   #--------------------------------------------------------------------------
  674.   alias start_KGC_DayNight start
  675.   def start
  676.     $game_map.screen.clear_daynight

  677.     start_KGC_DayNight
  678.   end
  679. end
复制代码

作者: oyanjing    时间: 2008-6-11 23:16



晕,我没看清,我以为你发的是烛光系统,呵呵,没看到是昼夜系统,谢了,收下实验去,不懂再来问大大们~~
作者: Beside    时间: 2008-6-12 00:53
以下引用精灵使者于2008-6-11 14:10:01的发言:

我的剧情可能需要主角烛光和事件烛光两种- -
不知道纯事件可以不可以做。
换句话说,某柳的那个版本和星辰的版本(两个烛光)都可以的……


[本贴由作者于 2008-6-11 14:10:41 最后编辑]

事件上的烛光纯事件就可以吧?事件位置又不变

作者: yangff    时间: 2008-6-12 01:33
简单的我有一个
不过只有角色
问题就在于screen_x得到的事件的坐标是不变的 {/gg}
  1. $角色开灯的开光 = 1
  2. #==============================================================================
  3. # ■ Game_Player
  4. #------------------------------------------------------------------------------
  5. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  6. # 本类的实例请参考 $game_player。
  7. #==============================================================================

  8. class Game_Player < Game_Character
  9.   #--------------------------------------------------------------------------
  10.   # ● 常量
  11.   #--------------------------------------------------------------------------
  12.   CENTER_X = (544 / 2 - 16) * 8     # 画面中央 X 座标 * 8
  13.   CENTER_Y = (416 / 2 - 16) * 8     # 画面中央 Y 座标 * 8
  14.   #--------------------------------------------------------------------------
  15.   # ● 定义实例变量
  16.   #--------------------------------------------------------------------------
  17.   attr_reader   :vehicle_type       # 目前乘坐交通工具类型
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #--------------------------------------------------------------------------
  21.   def initialize
  22.     super
  23.     @vehicle_type = -1
  24.     @vehicle_getting_on = false     # 乘坐交通工具标志
  25.     @vehicle_getting_off = false    # 离开交通工具标志
  26.     @transferring = false           # 场所移动标志
  27.     @new_map_id = 0                 # 目标地图 ID
  28.     @new_x = 0                      # 目标 X 座标
  29.     @new_y = 0                      # 目标 Y 座标
  30.     @new_direction = 0              # 移动後方向
  31.     @walking_bgm = nil              # 记忆用行走时 BGM
  32. #   @light = Sprite.new             #烛光
  33. #   @light.bitmap = Cache.picture("light.png") #烛光
  34. #   @light.opacity = 0              #烛光
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 判断是否停止
  38.   #--------------------------------------------------------------------------
  39.   def stopping?
  40.     return false if @vehicle_getting_on
  41.     return false if @vehicle_getting_off
  42.     return super
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # ● 场所移动准备
  46.   #     map_id    : 地图 ID
  47.   #     x         : X 座标
  48.   #     y         : Y 座标
  49.   #     direction : 移动後面向
  50.   #--------------------------------------------------------------------------
  51.   def reserve_transfer(map_id, x, y, direction)
  52.     @transferring = true
  53.     @new_map_id = map_id
  54.     @new_x = x
  55.     @new_y = y
  56.     @new_direction = direction
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 判断是否准备场所移动
  60.   #--------------------------------------------------------------------------
  61.   def transfer?
  62.     return @transferring
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 执行场所移动
  66.   #--------------------------------------------------------------------------
  67.   def perform_transfer
  68.     return unless @transferring
  69.     @transferring = false
  70.     set_direction(@new_direction)
  71.     if $game_map.map_id != @new_map_id
  72.       $game_map.setup(@new_map_id)     # 移动到另一地图
  73.     end
  74.     moveto(@new_x, @new_y)
  75.     @walking_bgm = $game_map.map.bgm
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 判断地图是否可以通行
  79.   #     x:X 座标
  80.   #     y:Y 座标
  81.   #--------------------------------------------------------------------------
  82.   def map_passable?(x, y)
  83.     case @vehicle_type
  84.     when 0  # 小型船
  85.       return $game_map.boat_passable?(x, y)
  86.     when 1  # 大型船
  87.       return $game_map.ship_passable?(x, y)
  88.     when 2  # 飞船
  89.       return true
  90.     else    # 行走
  91.       return $game_map.passable?(x, y)
  92.     end
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 判断行走通行度
  96.   #     x:X 座标
  97.   #     y:Y 座标
  98.   #--------------------------------------------------------------------------
  99.   def can_walk?(x, y)
  100.     last_vehicle_type = @vehicle_type   # 移除交通工具类型
  101.     @vehicle_type = -1                  # 暂时设置为行走
  102.     result = passable?(x, y)            # 判断是否可以通行
  103.     @vehicle_type = last_vehicle_type   # 回复交通工具类型
  104.     return result
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 判断飞船降落通行度
  108.   #     x:X 座标
  109.   #     y:Y 座标
  110.   #--------------------------------------------------------------------------
  111.   def airship_land_ok?(x, y)
  112.     unless $game_map.airship_land_ok?(x, y)
  113.       return false    # 指定地图图块无法降落
  114.     end
  115.     unless $game_map.events_xy(x, y).empty?
  116.       return false    # 不可降落于事件之上
  117.     end
  118.     return true       # 可以降落
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ● 判断是否在交通工具上
  122.   #--------------------------------------------------------------------------
  123.   def in_vehicle?
  124.     return @vehicle_type >= 0
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 判断是否在飞船之上
  128.   #--------------------------------------------------------------------------
  129.   def in_airship?
  130.     return @vehicle_type == 2
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 判断是否奔跑中
  134.   #--------------------------------------------------------------------------
  135.   def dash?
  136.     return false if @move_route_forcing
  137.     return false if $game_map.disable_dash?
  138.     return false if in_vehicle?
  139.     return Input.press?(Input::A)
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● 判断是否是游戏测试通行状态
  143.   #--------------------------------------------------------------------------
  144.   def debug_through?
  145.     return false unless $TEST
  146.     return Input.press?(Input::CTRL)
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 设置地图画面座标为画面中央
  150.   #     x:X 座标
  151.   #     y:Y 座标
  152.   #--------------------------------------------------------------------------
  153.   def center(x, y)
  154.     display_x = x * 256 - CENTER_X                    # 计算座标
  155.     unless $game_map.loop_horizontal?                 # 非横向回圈的场合
  156.       max_x = ($game_map.width - 17) * 256            # 计算最大值
  157.       display_x = [0, [display_x, max_x].min].max     # 校正座标
  158.     end
  159.     display_y = y * 256 - CENTER_Y                    # 计算座标
  160.     unless $game_map.loop_vertical?                   # 非横向回圈的场合
  161.       max_y = ($game_map.height - 13) * 256           # 计算最大值
  162.       display_y = [0, [display_y, max_y].min].max     # 校正座标
  163.     end
  164.     $game_map.set_display_pos(display_x, display_y)   # 改变地图位置
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 移动至指定位置
  168.   #     x:X 座标
  169.   #     y:Y 座标
  170.   #--------------------------------------------------------------------------
  171.   def moveto(x, y)
  172.     super
  173.     center(x, y)                                      # 居中对齐
  174.     make_encounter_count                              # 初始化遇敌
  175.     if in_vehicle?                                    # 在交通工具中的场合
  176.       vehicle = $game_map.vehicles[@vehicle_type]     # 获取交通工具
  177.       vehicle.refresh                                 # 刷新交通工具
  178.     end
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 增加步数
  182.   #--------------------------------------------------------------------------
  183.   def increase_steps
  184.     super
  185.     return if @move_route_forcing
  186.     return if in_vehicle?
  187.     $game_party.increase_steps
  188.     $game_party.on_player_walk
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 设置遇敌计数
  192.   #--------------------------------------------------------------------------
  193.   def encounter_count
  194.     return @encounter_count
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 初始化遇敌计数
  198.   #--------------------------------------------------------------------------
  199.   def make_encounter_count
  200.     if $game_map.map_id != 0
  201.       n = $game_map.encounter_step
  202.       @encounter_count = rand(n) + rand(n) + 1  # 好比掷两个骰子
  203.     end
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 判断是否在地图区域中
  207.   #     area : 区域数据(RPG::Area)
  208.   #--------------------------------------------------------------------------
  209.   def in_area?(area)
  210.     return false if area == nil
  211.     return false if $game_map.map_id != area.map_id
  212.     return false if @x < area.rect.x
  213.     return false if @y < area.rect.y
  214.     return false if @x >= area.rect.x + area.rect.width
  215.     return false if @y >= area.rect.y + area.rect.height
  216.     return true
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 生成遇敌队伍
  220.   #--------------------------------------------------------------------------
  221.   def make_encounter_troop_id
  222.     encounter_list = $game_map.encounter_list.clone
  223.     for area in $data_areas.values
  224.       encounter_list += area.encounter_list if in_area?(area)
  225.     end
  226.     if encounter_list.empty?
  227.       make_encounter_count
  228.       return 0
  229.     end
  230.     return encounter_list[rand(encounter_list.size)]
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 刷新
  234.   #--------------------------------------------------------------------------
  235.   def refresh
  236.     if $game_party.members.size == 0
  237.       @character_name = ""
  238.       @character_index = 0
  239.     else
  240.       actor = $game_party.members[0]   # 获取队伍第一人
  241.       @character_name = actor.character_name
  242.       @character_index = actor.character_index
  243.     end
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● 判断同位置事件是否被触发
  247.   #     triggers : 触发数组
  248.   #--------------------------------------------------------------------------
  249.   def check_event_trigger_here(triggers)
  250.     return false if $game_map.interpreter.running?
  251.     result = false
  252.     for event in $game_map.events_xy(@x, @y)
  253.       if triggers.include?(event.trigger) and event.priority_type != 1
  254.         event.start
  255.         result = true if event.starting
  256.       end
  257.     end
  258.     return result
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● 确认前方事件是否被触发
  262.   #     triggers : 触发数组
  263.   #--------------------------------------------------------------------------
  264.   def check_event_trigger_there(triggers)
  265.     return false if $game_map.interpreter.running?
  266.     result = false
  267.     front_x = $game_map.x_with_direction(@x, @direction)
  268.     front_y = $game_map.y_with_direction(@y, @direction)
  269.     for event in $game_map.events_xy(front_x, front_y)
  270.       if triggers.include?(event.trigger) and event.priority_type == 1
  271.         event.start
  272.         result = true
  273.       end
  274.     end
  275.     if result == false and $game_map.counter?(front_x, front_y)
  276.       front_x = $game_map.x_with_direction(front_x, @direction)
  277.       front_y = $game_map.y_with_direction(front_y, @direction)
  278.       for event in $game_map.events_xy(front_x, front_y)
  279.         if triggers.include?(event.trigger) and event.priority_type == 1
  280.           event.start
  281.           result = true
  282.         end
  283.       end
  284.     end
  285.     return result
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ● 判断接触事件是否被触发
  289.   #     x:X 座标
  290.   #     y:Y 座标
  291.   #--------------------------------------------------------------------------
  292.     def check_event_trigger_touch(x, y)
  293.     x -=  $game_map.width if $game_map.loop_horizontal? and x == $game_map.width
  294.     y -=  $game_map.height if $game_map.loop_vertical? and y == $game_map.height
  295.     return false if $game_map.interpreter.running?
  296.     result = false
  297.     for event in $game_map.events_xy(x, y)
  298.       if [1,2].include?(event.trigger) and event.priority_type == 1
  299.         event.start
  300.         result = true
  301.       end
  302.     end
  303.     return result
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 方向键移动处理
  307.   #--------------------------------------------------------------------------
  308.   def move_by_input
  309.     return unless movable?
  310.     return if $game_map.interpreter.running?
  311.     case Input.dir4
  312.     when 2;  move_down
  313.     when 4;  move_left
  314.     when 6;  move_right
  315.     when 8;  move_up
  316.     end
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 可以行动判定
  320.   #--------------------------------------------------------------------------
  321.   def movable?
  322.     return false if moving?                     # 正在移动
  323.     return false if @move_route_forcing         # 强制移动路线
  324.     return false if @vehicle_getting_on         # 正在乘上交通工具
  325.     return false if @vehicle_getting_off        # 正在乘上交通工具
  326.     return false if $game_message.visible       # 正在显示讯息
  327.     return false if in_airship? and not $game_map.airship.movable?
  328.     return true
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 更新画面
  332.   #--------------------------------------------------------------------------
  333.   def update
  334.     last_real_x = @real_x
  335.     last_real_y = @real_y
  336.     last_moving = moving?
  337.     move_by_input
  338.     super
  339.     update_scroll(last_real_x, last_real_y)
  340.     update_vehicle
  341.     update_nonmoving(last_moving)
  342.     if $game_switches[$角色开灯的开光]
  343. #      @light.opacity = 255 if @light.opacity == 0
  344.       if ((@oldx != screen_x) or (@oldy != screen_y)) or $evmove
  345.         $evmove = false
  346.         @oldx = screen_x#@x* 32
  347.         @oldy = screen_y#@y* 32
  348.    #     if (@oldx - (2*32) <= 0) or (@oldy - (2*32) <= 0)
  349.     #      $scene.light(@oldx,@oldy,160,160)
  350.       #    @light.x = @oldx - (2*32)
  351.       #    @light.y = 0#@oldy
  352.     #    else
  353.           $scene.light(@oldx-(2*32),@oldy-(3*32),160,160)
  354.       #    @light.x = @oldx-(2*32)
  355.       #    @light.y = @oldy-(2*32)
  356.         #p @light.y
  357.      #   end
  358.       end
  359.     else
  360.       $scene.light if @oldx!=0
  361.       @oldx = 0 if @oldx!=0
  362.       @oldy = 0 if @oldy!=0
  363.       #@light.opacity = 0 if @light.opacity == 255
  364.       
  365.     end
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # ● 更新滚动
  369.   #--------------------------------------------------------------------------
  370.   def update_scroll(last_real_x, last_real_y)
  371.     ax1 = $game_map.adjust_x(last_real_x)
  372.     ay1 = $game_map.adjust_y(last_real_y)
  373.     ax2 = $game_map.adjust_x(@real_x)
  374.     ay2 = $game_map.adjust_y(@real_y)
  375.     if ay2 > ay1 and ay2 > CENTER_Y
  376.       $game_map.scroll_down(ay2 - ay1)
  377.     end
  378.     if ax2 < ax1 and ax2 < CENTER_X
  379.       $game_map.scroll_left(ax1 - ax2)
  380.     end
  381.     if ax2 > ax1 and ax2 > CENTER_X
  382.       $game_map.scroll_right(ax2 - ax1)
  383.     end
  384.     if ay2 < ay1 and ay2 < CENTER_Y
  385.       $game_map.scroll_up(ay1 - ay2)
  386.     end
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 更新交通工具
  390.   #--------------------------------------------------------------------------
  391.   def update_vehicle
  392.     return unless in_vehicle?
  393.     vehicle = $game_map.vehicles[@vehicle_type]
  394.     if @vehicle_getting_on                    # 正在乘上?
  395.       if not moving?
  396.         @direction = vehicle.direction        # 更改方向
  397.         @move_speed = vehicle.speed           # 更改移动速度
  398.         @vehicle_getting_on = false           # 结束乘上操作
  399.         @transparent = true                   # 透明状态
  400.       end
  401.     elsif @vehicle_getting_off                # 正在离开?
  402.       if not moving? and vehicle.altitude == 0
  403.         @vehicle_getting_off = false          # 结束乘上操作
  404.         @vehicle_type = -1                    # 清除交通工具类型
  405.         @transparent = false                  # 移除透明状态
  406.       end
  407.     else                                      # 正在交通工具之上
  408.       vehicle.sync_with_player                # 与角色同步移动
  409.     end
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ● 非移动中更新
  413.   #     last_moving : 之前是否正在移动
  414.   #--------------------------------------------------------------------------
  415.   def update_nonmoving(last_moving)
  416.     return if $game_map.interpreter.running?
  417.     return if moving?
  418.     return if check_touch_event if last_moving
  419.     if not $game_message.visible and Input.trigger?(Input::C)
  420.       return if get_on_off_vehicle
  421.       return if check_action_event
  422.     end
  423.     update_encounter if last_moving
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 更新遇敌
  427.   #--------------------------------------------------------------------------
  428.   def update_encounter
  429.     return if $TEST and Input.press?(Input::CTRL)   # 测试游戏中
  430.     return if in_vehicle?                           # 乘坐交通工具中
  431.     if $game_map.bush?(@x, @y)                      # 在草木繁茂处
  432.       @encounter_count -= 2                         # 将遇敌计数减2
  433.     else                                            # 否则
  434.       @encounter_count -= 1                         # 将遇敌计数减1
  435.     end
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 判断事件是否由接触触发(重叠)
  439.   #--------------------------------------------------------------------------
  440.   def check_touch_event
  441.     return false if in_airship?
  442.     return check_event_trigger_here([1,2])
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● 判断事件是否由确认键触发
  446.   #--------------------------------------------------------------------------
  447.   def check_action_event
  448.     return false if in_airship?
  449.     return true if check_event_trigger_here([0])
  450.     return check_event_trigger_there([0,1,2])
  451.   end
  452.   #--------------------------------------------------------------------------
  453.   # ● 上下交通工具
  454.   #--------------------------------------------------------------------------
  455.   def get_on_off_vehicle
  456.     return false unless movable?
  457.     if in_vehicle?
  458.       return get_off_vehicle
  459.     else
  460.       return get_on_vehicle
  461.     end
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 乘上交通工具
  465.   #    以角色非在交通工具之上为前提
  466.   #--------------------------------------------------------------------------
  467.   def get_on_vehicle
  468.     front_x = $game_map.x_with_direction(@x, @direction)
  469.     front_y = $game_map.y_with_direction(@y, @direction)
  470.     if $game_map.airship.pos?(@x, @y)       # 判断角色是否与飞船重叠
  471.       get_on_airship
  472.       return true
  473.     elsif $game_map.ship.pos?(front_x, front_y)   # 判断前方是否有大型船
  474.       get_on_ship
  475.       return true
  476.     elsif $game_map.boat.pos?(front_x, front_y)   # 判断前方是否有小型船
  477.       get_on_boat
  478.       return true
  479.     end
  480.     return false
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 乘上小型船
  484.   #--------------------------------------------------------------------------
  485.   def get_on_boat
  486.     @vehicle_getting_on = true        # 乘上交通工具标志
  487.     @vehicle_type = 0                 # 设置交通工具类型
  488.     force_move_forward                # 向前一步
  489.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  490.     $game_map.boat.get_on             # 上船处理
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● 乘上大型船
  494.   #--------------------------------------------------------------------------
  495.   def get_on_ship
  496.     @vehicle_getting_on = true        # 乘上交通工具标志
  497.     @vehicle_type = 1                 # 设置交通工具类型
  498.     force_move_forward                # 向前一步
  499.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  500.     $game_map.ship.get_on             # 上船处理
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● 乘上飞船
  504.   #--------------------------------------------------------------------------
  505.   def get_on_airship
  506.     @vehicle_getting_on = true        # 乘上交通工具标志
  507.     @vehicle_type = 2                 # 设置交通工具类型
  508.     @through = true                   # 允许穿透
  509.     @walking_bgm = RPG::BGM::last     # 记忆行走 BGM
  510.     $game_map.airship.get_on          # 上船处理
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● 离开交通工具
  514.   #    以角色在交通工具之上为前提
  515.   #--------------------------------------------------------------------------
  516.   def get_off_vehicle
  517.     if in_airship?                                # 在飞船之上
  518.       return unless airship_land_ok?(@x, @y)      # 判断是否能降落
  519.     else                                          # 在大/小型船上
  520.       front_x = $game_map.x_with_direction(@x, @direction)
  521.       front_y = $game_map.y_with_direction(@y, @direction)
  522.       return unless can_walk?(front_x, front_y)   # 判断是否能下船
  523.     end
  524.     $game_map.vehicles[@vehicle_type].get_off     # 下船处理
  525.     if in_airship?                                # 飞船
  526.       @direction = 2                              # 面向下
  527.     else                                          # 大/小型船
  528.       force_move_forward                          # 向前一步
  529.       @transparent = false                        # 移除透明状态
  530.     end
  531.     @vehicle_getting_off = true                   # 开始下船处理
  532.     @move_speed = 4                               # 回复移动速度
  533.     @through = false                              # 不允许穿透
  534.     @walking_bgm.play                             # 回复行走 BGM
  535.     make_encounter_count                          # 初始化遇敌
  536.   end
  537.   #--------------------------------------------------------------------------
  538.   # ● 强迫向前一步
  539.   #--------------------------------------------------------------------------
  540.   def force_move_forward
  541.     @through = true         # 允许穿透
  542.     move_forward            # 向前一步
  543.     @through = false        # 不允许穿透
  544.   end
  545. end

  546. #==============================================================================
  547. # ■ Scene_Map
  548. #------------------------------------------------------------------------------
  549. #  处理地图画面的类。
  550. #==============================================================================

  551. class Scene_Map < Scene_Base
  552.   #--------------------------------------------------------------------------
  553.   # ● 开始处理
  554.   #--------------------------------------------------------------------------
  555.   def start
  556.     super
  557.     $game_map.refresh
  558.     @spriteset = Spriteset_Map.new
  559.     @message_window = Window_Message.new
  560.     @black = Sprite.new
  561.     #~@rect = {}
  562.   end
  563.   ######
  564.   #视野判定
  565.   ######
  566.   def in_view?(ev)
  567.     add_x = $game_player.x
  568.     add_y = $game_player.y
  569.     begin_x = $game_map.display_x - add_x
  570.     begin_y = $game_map.display_y - add_y
  571.     end_x = $game_map.display_x + 4352 + add_x
  572.     end_y = $game_map.display_y + 3328 + add_y
  573.     limit_x = $game_map.width * 256 - 256 + add_x
  574.     limit_y = $game_map.height * 256 - 256 + add_y
  575.     char_x = ev.real_x
  576.     char_y = ev.real_y
  577.     if end_x <= limit_x
  578.       return false if char_x < begin_x or char_x > end_x
  579.     end
  580.     if end_y <= limit_y
  581.       return false if char_y < begin_y or char_y > end_y
  582.     end
  583.     if end_x > limit_x and end_y > limit_y
  584.       return false if char_x < begin_x and char_x > end_x - limit_x
  585.       return false if char_y < begin_y and char_y > end_y - limit_y
  586.     end
  587.     return true
  588.   end
  589.   
  590.   #--------------------------------------------------------------------------
  591.   # ● 执行渐变
  592.   #--------------------------------------------------------------------------
  593.   def perform_transition
  594.     if Graphics.brightness == 0       # 战斗後或载入後等
  595.       fadein(30)
  596.     else                              # 从菜单中回来等
  597.       Graphics.transition(15)
  598.     end
  599.   end
  600.   
  601.   def light(x=0,y=0,h=0,w=0)
  602.     if ($game_switches[$角色开灯的开光] == false)# and (@black.bitmap != nil)
  603.       if @black.bitmap != nil
  604.         @black.bitmap.dispose
  605.         @black.bitmap = nil
  606.       end
  607.       
  608.       return
  609.     end
  610.     #if @black.bitmap == nil
  611.       @black.bitmap=Bitmap.new(544,416)
  612.       @black.bitmap.fill_rect(Rect.new(0,0,544,416), Color.new(0,0,0))
  613.     #end
  614.     @black.bitmap.clear_rect(Rect.new(x,y,h,w))
  615. #    for i in @rect
  616. #      @black.bitmap.clear_rect(Rect.new(i.x,i.y,i.height,i.width))
  617. #    end
  618.   end
  619. #~   def light1(x=0,y=0,h=0,w=0,id)
  620. #~     @rect[id] = (Rect.new(x,y,h,w))
  621. #~     for i in @rect
  622. #~       @black.bitmap.clear_rect(Rect.new(i.x,i.y,i.height,i.width))
  623. #~     end
  624. #~   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 结束处理
  627.   #--------------------------------------------------------------------------
  628.   def terminate
  629.     super
  630.     if $scene.is_a?(Scene_Battle)     # 切换至战斗场景的场合
  631.       @spriteset.dispose_characters   # 隐藏角色来生成战斗背景
  632.     end
  633.     snapshot_for_background
  634.     @spriteset.dispose
  635.     @message_window.dispose
  636.     if $scene.is_a?(Scene_Battle)     # 切换至战斗场景的场合
  637.       perform_battle_transition       # 执行战斗渐变
  638.     end
  639.   end
  640.   #--------------------------------------------------------------------------
  641.   # ● 基本更新处理
  642.   #--------------------------------------------------------------------------
  643.   def update_basic
  644.     Graphics.update                   # 更新游戏画面
  645.     Input.update                      # 更新输入信息
  646.     $game_map.update                  # 更新地图
  647.     @spriteset.update                 # 更新活动块组
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ● 更新画面
  651.   #--------------------------------------------------------------------------
  652.   def update
  653.     super
  654.     $game_map.interpreter.update      # 更新解释器
  655.     $game_map.update                  # 更新地图
  656.     $game_player.update               # 更新主角
  657.     $game_system.update               # 更新计时器
  658.     @spriteset.update                 # 更新活动块组
  659.     @message_window.update            # 更新信息窗口
  660.     unless $game_message.visible      # 信息窗口显示中除外
  661.       update_transfer_player
  662.       update_encounter
  663.       update_call_menu
  664.       update_call_debug
  665.       update_scene_change
  666.     end
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● 淡入画面
  670.   #     duration : 时间
  671.   #    如果直接使用 Graphics.fadeout 的话会出现一些状况,如天候效果和远景
  672.   #    滚动都会被强迫停止,所以用动态的 fade-in 效果会好些。
  673.   #--------------------------------------------------------------------------
  674.   def fadein(duration)
  675.     Graphics.transition(0)
  676.     for i in 0..duration-1
  677.       Graphics.brightness = 255 * i / duration
  678.       update_basic
  679.     end
  680.     Graphics.brightness = 255
  681.   end
  682.   #--------------------------------------------------------------------------
  683.   # ● 淡出画面
  684.   #     duration : 时间
  685.   #    与上面的 fadein 一样,不是直接调用 Graphics.fadein。
  686.   #--------------------------------------------------------------------------
  687.   def fadeout(duration)
  688.     Graphics.transition(0)
  689.     for i in 0..duration-1
  690.       Graphics.brightness = 255 - 255 * i / duration
  691.       update_basic
  692.     end
  693.     Graphics.brightness = 0
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 场所移动处理
  697.   #--------------------------------------------------------------------------
  698.   def update_transfer_player
  699.     return unless $game_player.transfer?
  700.     fade = (Graphics.brightness > 0)
  701.     fadeout(30) if fade
  702.     @spriteset.dispose              # 释放活动块组
  703.     $game_player.perform_transfer   # 执行场所移动
  704.     $game_map.autoplay              # 自动更改 BGM 和 BGS
  705.     $game_map.update
  706.     Graphics.wait(15)
  707.     @spriteset = Spriteset_Map.new  # 重新生成活动块组
  708.     fadein(30) if fade
  709.     Input.update
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 遇敌处理
  713.   #--------------------------------------------------------------------------
  714.   def update_encounter
  715.     return if $game_player.encounter_count > 0        # 检查步数
  716.     return if $game_map.interpreter.running?          # 判断是否有事件正在执行
  717.     return if $game_system.encounter_disabled         # 判断是否禁止遇敌
  718.     troop_id = $game_player.make_encounter_troop_id   # 判断敌人队伍
  719.     return if $data_troops[troop_id] == nil           # 判断队伍是否无效
  720.     $game_troop.setup(troop_id)
  721.     $game_troop.can_escape = true
  722.     $game_temp.battle_proc = nil
  723.     $game_temp.next_scene = "battle"
  724.     preemptive_or_surprise
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # ● 判断先下手或被偷袭
  728.   #--------------------------------------------------------------------------
  729.   def preemptive_or_surprise
  730.     actors_agi = $game_party.average_agi
  731.     enemies_agi = $game_troop.average_agi
  732.     if actors_agi >= enemies_agi
  733.       percent_preemptive = 5
  734.       percent_surprise = 3
  735.     else
  736.       percent_preemptive = 3
  737.       percent_surprise = 5
  738.     end
  739.     if rand(100) < percent_preemptive
  740.       $game_troop.preemptive = true
  741.     elsif rand(100) < percent_surprise
  742.       $game_troop.surprise = true
  743.     end
  744.   end
  745.   #--------------------------------------------------------------------------
  746.   # ● 判断是否呼叫菜单(按下B键)
  747.   #--------------------------------------------------------------------------
  748.   def update_call_menu
  749.     if Input.trigger?(Input::B)
  750.       return if $game_map.interpreter.running?        # 判断是否有事件正在执行
  751.       return if $game_system.menu_disabled            # 判断是否禁止菜单呼叫
  752.       $game_temp.menu_beep = true                     # 设置音效标志
  753.       $game_temp.next_scene = "menu"
  754.     end
  755.   end
  756.   #--------------------------------------------------------------------------
  757.   # ● 判断是否呼叫DEBUG场景(按下F9键)
  758.   #--------------------------------------------------------------------------
  759.   def update_call_debug
  760.     if $TEST and Input.press?(Input::F9)    # 游戏测试并按下F9
  761.       $game_temp.next_scene = "debug"
  762.     end
  763.   end
  764.   #--------------------------------------------------------------------------
  765.   # ● 执行场景交替
  766.   #--------------------------------------------------------------------------
  767.   def update_scene_change
  768.     return if $game_player.moving?    # 判断主角是否移动中
  769.     case $game_temp.next_scene
  770.     when "battle"
  771.       call_battle
  772.     when "shop"
  773.       call_shop
  774.     when "name"
  775.       call_name
  776.     when "menu"
  777.       call_menu
  778.     when "save"
  779.       call_save
  780.     when "debug"
  781.       call_debug
  782.     when "gameover"
  783.       call_gameover
  784.     when "title"
  785.       call_title
  786.     else
  787.       $game_temp.next_scene = nil
  788.     end
  789.   end
  790.   #--------------------------------------------------------------------------
  791.   # ● 切换至战斗画面
  792.   #--------------------------------------------------------------------------
  793.   def call_battle
  794.     @spriteset.update
  795.     Graphics.update
  796.     $game_player.make_encounter_count
  797.     $game_player.straighten
  798.     $game_temp.map_bgm = RPG::BGM.last
  799.     $game_temp.map_bgs = RPG::BGS.last
  800.     RPG::BGM.stop
  801.     RPG::BGS.stop
  802.     Sound.play_battle_start
  803.     $game_system.battle_bgm.play
  804.     $game_temp.next_scene = nil
  805.     $scene = Scene_Battle.new
  806.   end
  807.   #--------------------------------------------------------------------------
  808.   # ● 切换至商店画面
  809.   #--------------------------------------------------------------------------
  810.   def call_shop
  811.     $game_temp.next_scene = nil
  812.     $scene = Scene_Shop.new
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● 切换至名称输入画面
  816.   #--------------------------------------------------------------------------
  817.   def call_name
  818.     $game_temp.next_scene = nil
  819.     $scene = Scene_Name.new
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # ● 切换至菜单画面
  823.   #--------------------------------------------------------------------------
  824.   def call_menu
  825.     if $game_temp.menu_beep
  826.       Sound.play_decision
  827.       $game_temp.menu_beep = false
  828.     end
  829.     $game_temp.next_scene = nil
  830.     $scene = Scene_Menu.new
  831.   end
  832.   #--------------------------------------------------------------------------
  833.   # ● 切换至存档画面
  834.   #--------------------------------------------------------------------------
  835.   def call_save
  836.     $game_temp.next_scene = nil
  837.     $scene = Scene_File.new(true, false, true)
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 切换至DEBUG画面
  841.   #--------------------------------------------------------------------------
  842.   def call_debug
  843.     Sound.play_decision
  844.     $game_temp.next_scene = nil
  845.     $scene = Scene_Debug.new
  846.   end
  847.   #--------------------------------------------------------------------------
  848.   # ● 切换至游戏结束画面
  849.   #--------------------------------------------------------------------------
  850.   def call_gameover
  851.     $game_temp.next_scene = nil
  852.     $scene = Scene_Gameover.new
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ● 切换至标题画面
  856.   #--------------------------------------------------------------------------
  857.   def call_title
  858.     $game_temp.next_scene = nil
  859.     $scene = Scene_Title.new
  860.     fadeout(60)
  861.   end
  862.   #--------------------------------------------------------------------------
  863.   # ● 执行战斗渐变
  864.   #--------------------------------------------------------------------------
  865.   def perform_battle_transition
  866.     Graphics.transition(80, "Graphics/System/BattleStart", 80)
  867.     Graphics.freeze
  868.   end
  869. end
复制代码

作者: 雪流星    时间: 2008-6-12 09:02
http://rpg.blue/viewthread.php?tid=89801 [LINE]1,#dddddd[/LINE]系统信息:本贴由本区版主认可,66RPG感谢您的热情解答~
作者: 精灵使者    时间: 2008-6-12 19:36
谢谢~有机会拿过去用用……p.s.版主的结帖似乎真够orz的……




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