前回の記事で説明したマージの発展系です。
基本となる競合の仕組みやマージについては向こうの記事を参照して下さい。
さて、マージとは同じメソッドに
「Aの変更を加える」スクリプトと「Bの変更を加える」スクリプトがある場合
「AとBの変更を加える」スクリプトに改変することで競合を防ぐ方法でした。
しかし、当然それは(変更が両立可能な場合)という括弧付きです。
お互いに何かの処理を加えるというスクリプトなら問題はおきにくいですが
何かの処理を削る変更や、既存の数値を弄る変更は両立し難い場合があります。
そこで例えば、ある場面ではスクリプトAを、ある場面ではスクリプトBを適用したい。
或いは、ある場面ではスクリプトAを、ある場面ではデフォルトの仕様にしたい。
こういった形でスクリプトを導入したいというケースはあると思います。
今回はifとelse、つまり条件分岐を使ってスイッチで切り替える方式のマージを紹介します。
処理の確認と「切り替え型マージ」スクリプトの中で共通する(クラスも同じ)メソッドを探すのは前回と同じです。
#デフォルトスクリプト
class abc
def update
check
end
end
#スクリプトA
class abc
def update
check
change_chip
end
end
#スクリプトB
class abc
def update
pre_check
check
end
end
これを参考にマージスクリプトを追加するのも同じですが
今回はより単純に、条件分岐を作ってその先に丸ごと移植します。
#スクリプトC
class abc
def update
if $game_switches[1] == true
check
change_chip
else
pre_check
check
end
end
end
段落を別けているので多少は判りやすいと思いますが
if $game_switches[1] == trueがスイッチ1番がonの場合という条件分岐で
elseがそれ以外の場合、endが分岐終了です。
変数を使う場合は$game_variables[n]とelsifを使いますが、あとはヘルプなどで調べて下さい。
例ではスクリプトAとスクリプトBの切り替えになっていますが
分岐先にデフォルトの処理を入れることも勿論可能です。
注意点まず、スイッチは最初オフの状態で生成されるため
ゲーム開始後まではelseの方が優先されることを理解しましょう。
また、initializeやsetupという様なメソッドは
最初にデータを用意しておく、という働きを持っています。
(絶対ではありませんが、それらは$や@に=で代入する処理が入ってます)
これを切り替え型にしてしまうと後々データが無くて
NoMethodErrorになりますので
切り替え型にする場合でも、この手のメソッドは前回の結合型マージを使うようにします。
[5回]
PR
-->