【RPGツクールVX Ace】動くタイトル画面を作ろう!(天候編)【初心者向け】
どうも。RGSS3(VX Ace)歴4年のかんじの草です。今回はタイトル画面に雨(その他)を降らせていきたいと思います。
前回(【RPGツクールVX Ace】動くタイトル画面を作ろう!(画像編)【初心者向け】 - 莞爾の草原。)に引き続いて初心者向けに書いていこうと思うのですが、スクリプトを学んでいくうえで何よりも大切なことは、スクリプトに苦手意識を持たないことです。
「スクリプトは怖いものじゃない」「スクリプトはあなたのツクールライフをよりよくするものだ」
そう頭に念じてやっていきましょう。冗長だ。
以下のスクリプトを▼ 素材の下に貼り付けることでタイトル画面に雨を降らせることができます(上書きなので注意)。デフォルトとの相違点は青文字で記します。
#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
# タイトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● 背景の作成
#--------------------------------------------------------------------------
def create_background
@sprite1 = Sprite.new
@sprite1.bitmap = Cache.title1($data_system.title1_name)
@sprite2 = Sprite.new
@sprite2.bitmap = Cache.title2($data_system.title2_name)
@sprite1.z=-50
@sprite2.z=-50
center_sprite(@sprite1)
center_sprite(@sprite2)
@weather = Spriteset_Weather.new(Viewport.new)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
@weather.type = :rain
#:rain(雨)の部分を
#:stormに変えると嵐になり、
#:snowに変えると雪になり、
#:noneに変えると天候がなくなります。
@weather.title=true#true=天気がタイトルから呼び出されている
@weather.power = 15#天気の強さ。マップでいじる天気の強さと同じ
@weather.ox = 0
@weather.oy = 0
@weather.update
end
#--------------------------------------------------------------------------
# ● 背景の解放
#--------------------------------------------------------------------------
def dispose_background
@sprite1.bitmap.dispose
@sprite1.dispose
@sprite2.bitmap.dispose
@sprite2.dispose
@weather.dispose
end
end
#==============================================================================
# ■ Spriteset_Weather
#------------------------------------------------------------------------------
# 天候エフェクト(雨、嵐、雪)のクラスです。このクラスは Spriteset_Map クラ
# スの内部で使用されます。
#==============================================================================
class Spriteset_Weather
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :title #Spriteset_WeatherクラスがTitle画面から呼び出された時にtrueになる。
#--------------------------------------------------------------------------
# ● 暗さの取得
#--------------------------------------------------------------------------
def dimness
#Spriteset_WeatherがScene_Titleから呼び出されているときに、@titleがtrueになります。
@title ? 0 : (@power * 6).to_i
end
#--------------------------------------------------------------------------
# ● メンバ変数の初期化
#--------------------------------------------------------------------------
def init_members
@type = :none
@ox = 0
@oy = 0
@power = 0
@sprites = []#はてなの仕様上全角にしてあります。半角に変えてください
@title=false
end
end
ただ、これだけだとやや地味というか、まだ何か足りない……そう思う方もいるかもしれません。
では、いろいろカスタムしていきましょう!
【目次】
・タイトル画面にBGSを流そう!
・雨の画像を編集しよう!
・タイトル画面にBGSを流そう!
せっかく雨を降らせたのなら、是非とも雨の音もつけたいですよね。
ということで付けていきましょう。
#--------------------------------------------------------------------------
# ● タイトル画面の音楽演奏
#--------------------------------------------------------------------------
def play_title_music
$data_system.title_bgm.play
RPG::BGS.stop
RPG::ME.stop
RPG::BGS.stop
Audio.bgs_play('Audio/BGS/Rain',70)
end
上がスクリプトです。Scene_Titleに貼り付けてください。どこにでも貼り付けていいわけではなく、それは前回の画像編で解説しているとおりです。どこに貼ればいいかわからない方はclass Scene_Title < Scene_Baseのすぐ下に貼り付けてください。
上の青字の部分は、Audioというモジュールから実行するBGS:Rainをボリューム70で再生するように命令しているメソッドです。モジュールとは、前回使用したCacheやGraphics、VocabやSoundなどの、クラスのどこからでも呼び出せる、ざっくり言えばクラスより強い奴です。モジュールの名前は必ず大文字から始まらなくてはなりません。
また、青字の上にあるRPG::BGS.stop、RPG::ME.stop、RPG::BGS.stopのRPG::○○(音楽の種類)の中でも一様にこのAudioのモジュールが使われています。
Audio.bgs_playというメソッドには引数という呼び出すときに必要なものがあります。それが、()のなかにあるものです。なのでAudio.bgs_play('Audio/BGS/Rain',70)の引数は、'Audio?BGS/Rain'と70という数字となります。
「'Audio?BGS/Rain'はファイル名だとして、70って何?」とお思いの方もいるかもしれません。こういった引数がなにかわからないときは、呼び出し元のメソッドを見ましょう。説明書のAudio(モジュール)のページには、
Audio.bgs_play(filename[, volume[, pitch[, pos]]]) (RGSS3)
-
BGS の演奏を開始します。順にファイル名、ボリューム、ピッチ、再生開始位置を指定します。
再生開始位置 (RGSS3) は ogg または wav の場合のみ有効です。
RGSS-RTP に含まれるファイルも自動的に探します。拡張子は省略可能です。
とあります。
つまり引数70の正体は二番目のvolume、つまり音量ということになります。
三番目のpitchというのは文字通りピッチのことで、posというのは再生開始位置を指します。
ちなみに、引数の中にある[](半角角かっこ)は、必要ではない引数のことで、省略しても問題がないです。だから、70の引数を消してAudio.bgs_play('Audio/BGS/Rain')としてもちゃんとメソッドを実行することができます。
・雨の画像を編集しよう!
「雨をもっと大きくしたい」「雨の色を変えたい」など、いろいろとやりたいことが出てくると思います。スクリプトを知ると可能性が広がり、同時に視野も広くなってくるでしょうからね。
ということで、画像を編集していきましょう。
例えば、「大きい雨と小さい雨を分けてタイトル画面に奥行きを出したい」とします。
そんな時はこうしましょう。
class Spriteset_Weather
#--------------------------------------------------------------------------
# ● スプライトの追加
#--------------------------------------------------------------------------
def add_sprite
sprite = Sprite.new(@viewport)
sprite.opacity = 0
if @title
sprite.zoom_x=s=rand(40)/10
sprite.zoom_y=s
end
@sprites.push(sprite)
end
end
これを実行するとこうなります。
四角!って感じですが、動画で見てみると結構いい感じです。
さて、なにをしたかというと、「もし@titleがtrueならば、sprite(パーティクル)の拡大率を「0から39のうちの乱数を10で割ったもの」にする」というものです。zoom_xとzoom_yは前回の画像編で触れたスプライトのプロパティです。このspriteは文字通りSpriteクラスのものなので、Spriteクラスにできるプロパティやメソッドなら好きに実行することができます。
例えば、 sprite.mirror =rand(3)==1;sprite.blend_type =2;sprite.angle=(361)とするとこんな感じにちゃんと動作します。趣味が悪いわ。
case rand(3)
when 0
sprite.color=Color.new(255,0,0)
when 1
sprite.color=Color.new(0,255,0)
when 2
sprite.color=Color.new(0,0,255)
end
また、雨雪嵐のほかに、自分が用意した画像を降らせることもできます。
#--------------------------------------------------------------------------
# ● スプライトの更新[雨]
#--------------------------------------------------------------------------
def update_sprite_rain(sprite)
sprite.bitmap = @title ? Cache.system("Ball") : @rain_bitmap#ここのキャッシュの部分を変える
sprite.x -= 1
sprite.y += 6
sprite.opacity -= 12
end
ただ、あまり画像が大きすぎると重くなので注意が必要です。ちなみに、sprite.x -= 1;sprite.y += 6の数字の部分を変えることで粒子の落ち方を変えることができます。例えばsprite.y -= 6とすると、粒子が上がっていきます。
これにさっきの拡大率を変える奴を使うとこんな感じ。内部的には雨の設定となっています。