【講座?】CoRを触ってみる05~RmakeSoundクラス編~【自分用メモ?】

投稿者:Material 185033 3 mini 光楼(114) 投稿日:2017/02/11 14:43

【講座?】CoRを触ってみる04~シーン編~【自分用メモ?】←前回

いつ三目並べ作るんだよ!って言われそうですが安心してください、これからです。

#このブログの情報は2017年2月11日現在のものです。今後変更になる可能性があります。


今回はいよいよ素材を扱っていきます。
RmakeSoundクラスは音楽と効果音を扱うクラスだそうです。
クラスとは?
『何かを実行する設計図』とか『データや処理をひとまとまりにまとめたもの』とか言われてます。
まぁ、設計図ですよ設計図。

音楽

RmakeでいうとBGM。無限再生されます。

準備

とりあえずなんでもいいのでCOREシーンに音楽を追加してください。
手順は導入編で説明した通り、音楽管理から追加するんです。
出来たかな?


登録したら処理を書き込んでいきます。
下記の状態にしてください。
scene 'start' do #シーンstart
  preload do #素材読込み
  end

  create do #シーン初期化
  end

  update do #メインループ
  end

  render do #描画
  end
end

start_scene "start"

変数定義

ここからが本番!
まず使用する変数を定義します。
scenepreloadの間に
main_music = nil

と書いて下さい。

  • この変数は何か?
Rmakeではスプライト画像を生成するときに
spriteHandle = createSprite(127)

と書いたと思います。
これと同じものと考えていいと思います。
音楽を表わすIDを格納する変数で、その音楽に対して操作をするときに使うと覚えておけば良いでしょう。
あっ変数名は自由ですよ。分かりやすい名前にしてください。もちろん変数に使える文字で。

  • nilって?
「無」を意味するものです。nullとの違いは品詞だそうです。
ただ、nullはCoRでは使えない?みたいなので気にする必要は無いかと。

読込み

ついにpreloadに書込みます。
preload内に以下のように書きます。
music '適当な名前', id: 音楽ID

何をしているかというと、
IDが317557の音楽を読込み、メインBGMという名前を付けているんです。
名前は自由、音楽IDはさっき追加したものです。

再生

create内に書きます。
まずはさっき読込んだ音楽を使える状態にしましょう。
以下のように書いて下さい。
最初に定義した変数 = add_music(さっき付けた名前)

これで使えるようになりました。
早速再生しましょう!
最初に定義した変数.play


これで再生できると思います。
全部まとめると下記のようになります。
scene 'start' do #シーンstart
  #変数定義
  main_music = nil

  preload do #素材読込み
    music 'メインBGM', id: 317557
  end

  create do #シーン初期化
    #音楽作成&再生
    main_music = add_music('メインBGM')
    main_music.play
  end

  update do #メインループ
  end

  render do #描画
  end
end

start_scene "start"


その他

もちろん再生があるので停止もあります。
基本的には
操作対象.操作内容

の形になります。
上記の例でいえばmain_musicが操作対象、playが操作内容ですね。
書き方実行される処理
対象.stop音楽の停止
対象.pause音楽の一時停止
対象.resume音楽の再開
このstopとかが設計図で、対象へ渡すことによって変化させているって解釈でいいのかな?

効果音

書き方は音楽の時とほぼ変わりません。
なので説明省きます。
全部書くとこうなります。
scene 'start' do #シーンstart
  #変数定義
  main_music = nil
  determining_sound = nil

  preload do #素材読込み
    music 'メインBGM', id: 317557
    sound '決定音', id: 302148
  end

  create do #シーン初期化
    #音楽作成&再生
    main_music = add_music('メインBGM')
    main_music.play

    #効果音作成&再生
    determining_sound = add_sound('決定音')
    #determining_sound.play
  end

  update do #メインループ
  end

  render do #描画
  end
end

start_scene "start"

あとがき

最初に変数を定義したけれど、実は無くても動作する。
では何故定義するのだろうか。
サンプルを見るとカウントしたりする変数は定義されていない。
素材のための変数は定義されている。
デフォルト値の設定だろうか……。
とりあえず、定義しておいた方が良いでしょう。
見やすいってのもあるだろうし。

#2月18日追記
あの場所で定義することにより、シーン全体でその変数を使えるようにしているそうです。
あの場所で定義しないとcreate内でしか使えなくなります。

次回→【講座?】CoRを触ってみる06~スプライト編~【自分用メモ?】

コメントする

コメントするには、ログインする必要があります。

コメント一覧

            mini mosmoss(投稿日:2017/02/11 20:36, 履歴)
ポウズができるんですね!
やったー(^ω^)
Material 185033 3 mini 光楼(114)(投稿日:2017/02/12 16:26, 履歴)
Rmakeにはなかった機能なので嬉しいですよね!
            mini mosmoss(投稿日:2017/04/22 16:52, 履歴)
追記の変数定義の設定がわかりやすかったです
Material 6858 mini akasata(投稿日:2017/02/15 21:43, 履歴)
変数定義について補足です。
scene do - endの位置に変数定義がmain_music変数をupdateブロックで呼び出すことができなくなります。

# 変数定義がない場合
scene 'start' do 
  preload do
    music 'メインBGM', id: 317557
  end
  
  create do
    main_music = add_music('メインBGM')
  end
  
  update do
    # ここでエラーになる
    # createブロックのmain_music変数はupdateブロックからは見えない
    main_music.play 
  end
end


scene do - endの位置に変数定義を書くことによって、createブロックでもupdateブロックでも変数が見えるようにすることができます。言い換えると、updateブロックで呼び出さないなら必要ないということになりますね。

以下、細かい話です(^^;
興味のある方だけどうぞ。。。

変数にはスコープの中でしか見えないという決まりがあります。
スコープというのは、変数の有効範囲という意味です。
CoR(mruby)では、変数はdo - endやdef - endの中がスコープということになります。(つまり、do - endの外側からは使えません。)
思わぬバグを回避するためにも、変数はできるだけ狭いスコープで使うほうが良いですが、必要に応じて、広いスコープをもたせることによって、いろいろなところで呼び出せて便利に使うこともできます。
Material 185033 3 mini 光楼(114)(投稿日:2017/02/16 21:53, 履歴)
補足ありがとうございます!
変数をシーン全体で使えるようにするためにあの位置で定義してあったんですね。
これで謎が解決しました。
本当にありがとうございます<(_ _)>
Michael mini ミカエル(投稿日:2017/02/12 11:36, 履歴)
この講座シリーズ助かります。
ありがとうございます。
Material 185033 3 mini 光楼(114)(投稿日:2017/02/12 16:30, 履歴)
こちらこそ読んで頂きありがとうございます。
お役に立てて光栄です!
Cdv30200 aoi icon mini aoihikawa(投稿日:2017/02/12 11:12, 履歴)
音楽の周辺も
いろいろ改善、変更があるのですね
Material 185033 3 mini 光楼(114)(投稿日:2017/02/12 16:29, 履歴)
音楽は自由度が広がりましたね!
これからの機能追加が楽しみです。