2022-07-20
セルフスイッチってスクリプトでどう扱うか知ってます? ```rb $game_self_switches[[map_id, event_id, key]] ``` ですよ。 セルフスイッチってどこで使われるか知ってます? そう、イベントです。イベントなんです。 イベントに付随するスイッチなのにイベントはその情報を知らないってオブジェクト指向的に考えるとどうなんですか? そこで、イベントに自分の情報をちゃんと把握してもらおうと思います。
--- セルフスイッチを取得するために必要な情報は、**マップID**と**イベントID**です。 この情報はイベントも知っています。それぞれ`@map_id`と`@id`ですね。 次のように定義するイベントからセルフスイッチの状態が取得できます。 ```rb class Game_Event < Game_Character def switches(key) $game_self_switches[[@map_id, @id, key]] end end # event.switches("A") ``` 状態を変更する場合はどうでしょうか? ```rb class Game_Event < Game_Character def switches(key, value) case value when true, false $game_self_switches[[@map_id, @id, key]] = value else $game_self_switches[[@map_id, @id, key]] end end end # event.switches("A", true) ``` こんな感じかな? でも、`event.switches["A"] = true`的なことがしたいですね。さらにラップしてみましょう。 ```rb class Game_Event < Game_Character class SelfSwitches def initialize(map_id, event_id) @map_id = map_id @event_id = event_id end def [](key) $game_self_switches[[@map_id, @event_id, key]] end def []=(key,value) $game_self_switches[[@map_id, @event_id, key]] = value end end def switches @switches ||= SelfSwitches.new(@map_id, @id) end end # event.switches["A"] = true ``` いかがでしょうか?これで、イベント自身が自分のスイッチの状態を把握できるようになりました。 最後にイベントコマンド「スクリプト」でのイベントの取得方法です。 ```rb # 実行中のイベント ev = get_character(0) # 指定 ID のイベント (id) ev = get_character(8) # 指定座標のイベント (x,y) ev = $game_map.event_id_xy(3, 2) ``` "このイベント"を取得するメソッドを追加しても良さそう。 ```rb class Game_Interpreter def this get_character(0) end end ``` ![SS](https://blog-imgs-147.fc2.com/c/a/c/cacaosoft/SS2207150103148.png)
だいぶ楽に書けるようになったのではないでしょうか?
コメント






 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。



トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/815-d59cdd16
≪ トップページ ≫
カテゴリー
最近の記事
最近のコメント
タグクラウド

リンク