忍者ブログ

へぷたなすくろーる

RPGツクールのブログです。イベント講座とRGSS3スクリプト配布をやってます♪

Home > > [PR] Home > 道しるべ > スクリプトの競合対策その2、「切り替え型マージ」について

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

スクリプトの競合対策その2、「切り替え型マージ」について

前回の記事で説明したマージの発展系です。
基本となる競合の仕組みやマージについては向こうの記事を参照して下さい。

さて、マージとは同じメソッドに
「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
-->
Responses0 Responses
  • お名前
  • タイトル
  • メールアドレス
  • URL
  • パスワード

ブログ内検索

アーカイブ

最新コメント

[01/20 NONAME]
[01/16 NONAME]
[12/30 NONAME]
[12/13 NONAME]
[12/01 NONAME]

プロフィール

バナー

HN:奈々(なな)
RPGツクールVXAceを中心に製作を行っています。 スクリプト、イラスト、ドット絵など広くちょこちょこ手を出していますので、 できる範囲で他のツクーラーさんのお手伝いができたらなと思っています。