独学ツクールブログ

ツクールでのオリジナル作品の話を中心に創作関係の徒然な語り。

<< RGSS奮闘記49:プリセットを読み解く3(Mainその3) | main | やってもうたシリーズ >>

[ - ] スポンサーサイト

一定期間更新がないため広告を表示しています

| 2018.05.23 Wednesday | - | - |

[ RGSS奮闘記 ] RGSS奮闘記50:プリセットを読み解く4(Mainその4)

今日の俺得。

では9行目から順を追って確認。
随時コメントが付記されているため意図が分かりやすいので、残り6行分は一気に進める。


9行目。

Graphics.freeze

コメントには「トランジション準備」とある。
これは同名のイベントコマンドと同様の効果がある。
「準備」と言われてもピンと来ないものがあるが、トランジションとは単純に言うと「場面切り替え時」の処理である。暗転やら画面砕けるやらのアレだ。
トランジション準備は、その画面遷移の準備として「現在の画面状態を固定」する。ポイントは、あくまでも状態だけの固定であって背後では変わらずゲームが動いていることと、「トランジション実行」まで画面が切り替わらないことの2点。
試しにマップに「トランジション準備」と「トランジション実行」をそれぞれ単独で入れたイベントを配置してみれば分かる。準備のコマンド実行後は画面が切り替わらないが、実行のコマンド実行時にその位置にキャラがいる状態に遷移する。

11行目。
$scene = Scene_Title.new

$から始まるのはグローバル変数。プログラム上のどこからでも自由に操作できる変数だ。
Ruby的にはグローバル変数はよろしくないそうだがここではその話は割愛。
グローバル変数の$sceneに代入しているのはScene_Title.newである。
のちにシーンクラスのところで詳しく述べることになるだろうが、ここではnewメソッドを使用してScene_Titleクラスのオブジェクト(インスタンス)を生成し、それを変数に代入しているということになる。この先もその時々のクラスのインスタンスをnewで生成し$sceneに代入する。つまりそれがシーンの移り変わりというわけだ。
RGSSではあまり意味のない話だが、こうしてクラスを変数に代入するという操作によって、そのクラスのメソッドを「変数.メソッド」という書き方で使用できる。逆にいえば先ほどの「Graphics.freeze」はGraphicsクラスのfreezeメソッドを使っているわけで、一部の特別なクラス(や、今は端折るがモジュールも)のメソッドはこのようにそのまま使用している。

そして13〜15行目。
while $scene != nil
  $scene.main
end

while〜endは制御構造の一つ。whileの後ろに書かれた式がtrueである限りendまでの間の処理を繰り返す。
式がtrueであるとは、単純にいえば「while 0 == 0」などと書かれている場合だ。一般には、等式や不等式が成立している、と考えて差し支えない。今回の場合は$scene != nilである。「!=」という記号は、Rubyでは先頭の「!」は後ろに続くものの否定であるので「!=」は「==」の否定、つまり「等しくない」という意味になる。nilはRubyにおける「無」を示す特殊な変数。0や空白とは違うので注意。
少なくともこの部分に最初に来た時点では$sceneにはScene_Titleクラスが入っているのでnilではないからこの式はtrue(真)であるので、endまでの処理が実行される。つまり、14行目の$scene.mainで現在のシーンクラス(今はScene_Title)のmainメソッドが実行されるということだ。
ちなみに、過去何度か奮闘記で述べてきている通り、nilとの比較は間抜けである。Rubyの真偽値は「nilかfalseとそれ以外」しか区別しないからだ。
mainメソッドはすべてのシーンクラスに実装されている文字通りメインの処理である。各シーンの変数やメソッドがそこから呼ばれて処理される。具体的には各シーンで説明するので今はこれくらい。
なお、このループは$sceneに何かが入っている限り続く。つまりここを抜けるのはシーンが何でもなくなったときだ。すなわちゲームの終了時である。

さて、9行目のGraphics.freezeではトランジションの準備だけしていて実行は別であると述べた。
その「トランジション実行」が22行目
Graphics.transition(20)

である。
(20)は画面遷移に要するフレーム数(1秒=60フレーム)。つまり1秒かけて画面が切り替わる。
ただし、ここでは9行目で用意されたトランジションというわけではない。
考えてみれば分かるのだが、ここに来る時点ですでにwhile〜endのループを終えて抜けているわけだ。つまりそれまでに何らかのシーン切り替えのトランジションが実行されているのである。ここは、上のwhileの部分で述べた「ゲームのシャットダウン」の時に来るトランジションである。ということは、遷移先が存在しない。ではどうなるかというと、何もない画面に遷移するのでつまりは暗転ということになる。20フレームかけて暗転後、ゲームは終了するというわけである。


さて、残りを一気に片付けたせいで若干駆け足気味ではあるが、これでMainは終了。次はスクリプトの先頭に戻り、Game_Tempクラスから順に見ていく。


タグ:[Ruby] [RGSS] [プリセットを読み解く] [Main]

| 2011.04.08 Friday 19:33 | comments(0) | trackbacks(0) |

[ - ] スポンサーサイト

| 2018.05.23 Wednesday 19:33 | - | - |

コメント

コメントする






この記事のトラックバックURL

トラックバック

このページの先頭へ▲

Twitter

WebClap

Blogram

ブログランキングならblogram

calendar

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< October 2019 >>

categories

archives

Amazon

selected entries

recent comment

recent trackback

recent ranking

links

search this site.

sponsored links

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM