14.その他
1.ウェイト処理
イベントコマンドにもあるウェイトと同じようなものです。
一時的に処理を中断させるものです。
Graphics.wait(Graphics.frame_rate * 秒数)
Graphics.wait(duration) これは、指定回数 Graphics.update を呼び出す処理と同じものです。
Graphics.frame_rate によって、1秒間に何回画面を更新するのかが決まっています。
つまり、Graphics.wait(Graphics.frame_rate) で1秒間のウェイト処理になります。

sleep(秒数)
処理によっては、Graphics.wait が使用できない場合があります。
そのような場合に、使用します。
2.プレイ時間
Graphics.frame_count には、フレームの更新回数が記録されています。
フレーム数から算出するため不正確なものですが、それでも十分だと思います。
time = Graphics.frame_count / Graphics.frame_rate
hour = time / 3600  # 時間
min  = time / 60    # 分
sec  = time % 60    # 秒
3.ボタン入力の判定
ボタン入力は、Input.update が呼ばれたときに押されているキーで判断されます。
下記のような3種類の判定処理時ではないので注意してください。
Input.press?
単純にボタンが押されているのかを判定します。
押されていれば true そうでなければ false を返します。
2つのボタンが同時に押されているかなどの判定に
Input.trigger? などと組み合わせて使います。
Input.trigger?
ボタンが新たに押されたかを判定します。
ボタンが押されると1度だけ true を返します。
押したボタンを離して、もう一度押すまでは false を返します。
1回の入力で1度だけ実行したい処理などに使います。
Input.repeat?
ボタンが押され続けているかを判定します。
Input.press? は、押されていれば常に true を返しますが、こちらは、一定の間隔で true を返します。
まず、ボタンが新たに押されたときに true が返ります。
さらに、ボタンが押され続けていると 22フレーム空けた24フレーム目で true が返ります。
それからは、5フレーム間隔で true を返すようになります。
(TFFFFFFFFFFFFFFFFFFFFFFTFFFFFTFFFFFTFFFFFFTFF ... )
これは、カーソルの移動処理などで使われています。
毎フレームの処理では、多すぎる場合などに使います。

ボタン入力は、Input.update が呼ばれなければ判定できないのですが、
p などでメッセージボックスを表示して、それを Enter キーで消してしまうと、
Cボタンが押されたことになってしまうようです。
ゲーム中には、そのようなことは無いと思いますが、デバッグ中などで挙動がおかしくなった場合は、
このことを思い出してマウスでメッセージボックスを閉じるなど対策してください。
Input.update を使うと、ボタン入力がリセットされるので注意してください。
4.オブジェクトの複製
Object#clone

オブジェクトの完全な複製を行います。
freeze、taint、特異メソッドの情報が含まれます。

Object#dup

オブジェクトの内容のみ複製します。

※ これらのメソッドはオーバーライド(サブクラスで再定義)されている場合があります。

Marshal.load(Marshal.dump(obj))

参照先も含めた全く新しいオブジェクトを作成します。
上記2つの方法は浅いコピーであり、自身の複製は行いますが、
参照先のオブジェクトまでは複製しません。


ary = %w[0 1 2]
# 浅いコピー
copy = ary.dup    # 配列をコピーする
p ary, copy       # => ["0", "1", "2"], ["0", "1", "2"]
ary[0] << "00"    # 参照しているオブジェクトは同じもの
p ary, copy       # => ["000", "1", "2"], ["000", "1", "2"]
copy.clear        # 配列は複製されている
p ary, copy       # => ["000", "1", "2"], []
# 深いコピー
copy = Marshal.load(Marshal.dump(ary))
p ary, copy       # => ["000", "1", "2"], ["000", "1", "2"]
ary[1] << "11"    # 参照しているオブジェクトは違うもの
p ary, copy       # => ["000", "111", "2"], ["000", "1", "2"]
※ clone と dup は、数値やシンボル、nil/true/false には使用できません。
  ループとかでまとめて処理するときは気をつけてください。
  例外じゃなくて self 返してくれればいいのにね。
5.オブジェクトのフリーズ
Object#freezeを使用すると、オブジェクトの状態を変更できなくなります。
特異メソッドの定義もできません。
定数などをフリーズすることによって安全性がグッと増すのではないでしょうか。
ary = [1, 2, "3"]
ary.freeze    # => フリーズ
# オブジェクトに変更を加えようとすると例外発生
ary.clear     # => ERROR
ary[1] = 0    # => ERROR
# オブジェクト内のオブジェクトは変更可能
ary[2] << "3" # => "33"
# 変数の内容も変更可能
ary = nil     # => nil

# Fixnum, Symbol と nil, true, false はフリーズできないみたい
n = 1
n.freeze
n.frozen?     # => false
フリーズしたオブジェクトを解凍する方法はないので、
Object#dupを使用して、オブジェクトのコピーを作成してください。
6.イベントコマンド「スクリプト」
このスクリプトは、Game_Interpreter#command_355 で実行されます。
記述したスクリプトは文字列として扱われ、このメソッド内で eval されます。

Game_Interpreter のインスタンスは、ゲーム開始時に作成され終了まで残りますが、
並列処理のイベントとコモンイベントは、それぞれ別のインスタンスとして作成されます。
つまり、これら3つのイベントでインスタンス変数は別の変数となります。
また、並列処理のイベントは、実行中のイベントページが変更されるまで、
コモンイベントは、実行が終わるまでインスタンスが保持され、役割を終えると削除されます。