CF2.5の小技と近況

0
     
    どうも、最近出没が激レアなホウジョウです。
    (レアガチャなら★4つくらい)

    リアル世界では秋の狩猟と木の実採集で大忙しです。
    マンモスを倒して冬の保存食にしたいなぁと
    日夜、身を削りながら作業に励ん(ハゲん)でいます。

     彡⌒ミ
    (´・ω・`)

    (↑今流行ってる顔文字)

    ・・・という感じでフリーランスでサバイバルを生き抜く
    実生活のほうを優先してます。
    なかなかサイトの絵などは描けてませんが
    また続きでCF2.5のネタを投稿します。

    前回の記事の動画プレーヤーのほうはひと通り完成したので、
    同人とかのアプリケーションのほうで使おうと思います。

    その中で特に注意した点を記述していきます。

    http://www.clickteam.jp/
    まずこのCF2.5、ソフト特有の癖が相当ありますが
    さくっと形にしたいときは便利かなぁと思います。

    自分はDev版を使っていますが、
    このDev版で必ず使いたいのが「データグリッド」というものです。

    エクセルみたいなセルで情報を管理でき、記入した文字や数値を参照したりできます。

    エクセルで画像や動画一覧みたいなものをリスト化してそれをそのままコピペして
    あとはデータグリッドオブジェクトにアクセスして引き出します。

    アクティブオブジェクトなどをグローバルにして変数を管理すれば、
    異なるフレームから対象のフレームに数値を渡してセルの情報をすぐ読み込めます。

    これで便利なのが、
    例えば、サムネイルをクリックして動画再生をするシーン一覧のフレームに
    グローバルにしたアクティブを配置して
    サムネイルをクリックするとそのカット番号をアクティブの変数に格納させます。
    そのままフレームジャンプのアクションをして移動先のフレームで
    その数値(行番号など)でデータグリッドにアクセスします。
    そのアクセスしたセル情報(s001_002.wmvなど)で、Active Direct Showで
    動画ファイルの読み込みをします。
    相対パスで読み込むなら、数式を使って、

    Apppath$ + "data" + "/" + Text$( "データグリッドオブジェクト", 変数 A( "datag行変数" ), 1 )

    など記述します。

    Apppath$ はアプリケーションのパス、

    "data"はその実行ファイルがあるフォルダにあるdataという名前のフォルダ、

    Text$( "データグリッドオブジェクト", 変数 A( "datag行変数" ), 1 ) は、
    先ほど説明したアクティブの変数Aをデータグリッドの行数番号として、1行1列目の情報を
    持ってくるという意味です。

    わざわざアクティブを挟む形でここに変数を入れるのは、
    このデータグリッドオブジェクトがグローバルに設定出来ないからです。。
    フレームが分かれて同じデータベースを管理したい場合、
    データグリッドの修正が地味というかかなり面倒です←致命傷^^;


    またこれだけは抑えておきたいテクニックというのが、
    「通し番号」です。

    シーン一覧でサムネイルのアクティブをコピペしてそこに
    カット番号に対応したサムネイルを1つ1つ入れて・・・
    1つ1つアクセスするときのアクションを設定して・・・
    なんてしてたら追加カットやカット削除したときずれてまた全部
    やり直しとか地獄を見ます。

    なので、アクティブを「複製」して変数Aに「通し番号」を設定します。
    それでアクティブのアニメーションフレームに1カット目から最終カットまでのサムネイルを
    一括で読み込みます。
    それでフレーム開始の条件で、アニメーションフレームを変数Aに強制変更してあげれば、、
    複製したオブジェクトに順番に異なるサムネイルがしっかり読み込まれます。
    またクリックしてそのサムネイルの動画に飛ぶ場合は、
    フレームジャンプする前、先ほどの行番号のための変数に
    このアニメーションフレームの番号+1とか入れてあげれば、
    その番号のカットに飛べます。
    これでカットの追加があっても変更したサムネたちを
    アニメーションフレームを読み込みなおしてあげて、
    データグリッドのほうもセルをずらしてとかしてあげればすぐ修正完了します。

    多分これが一番記述も少なく修正も一瞬で終わるシンプルでスマートなやり方です。

    これを応用すれば、ユーザー自身がカットのサムネイルの入れ替えして
    再生順序を決定出来るとかのカスタマイズができると思います。


    すごい便利な部分と、ちょっとややこしい部分があるので
    慣れるまでは辛抱ですね。。


    動画プレーヤー

    0

      まとまった記事を書こうとすると更新頻度が減るので、小出しでも書いていこうと思います。

      自分はゲーム制作エディタ「MMF2」というのを使っていて、最近「CF2.5」という新バージョンにアップグレードしました。
      これからの内容は主にMMF2、あるいはCF2.5での話がメインです。
      基礎的な部分は説明書を見るとわかるので省きます。
      同じ仕組みを作ろうとして行き詰まってる人がgoogle検索で引っかかって参考になるようなこと書ければいいなぁと思います。

      今回はゲームの中で動画があって、それを繰り返し見たり再生位置を調整するために動画プレーヤーを仕込もうと思います。

      動画プレーヤーはQuicktimeのプレーヤー仕込めばいいのではというのはちょっと寂しいので、GUIも自作出来るよう全部一から作ります。

      まずシークバー(再生のバー)は簡単に出来るだろうと、
      再生の現在位置取得に簡単な算数で、

      「シークバーの長さ*再生現在位置/動画の全部の長さ」で出来るので、
      例:600pxのバー
      600*GetPosition( "Active Direct Show" )/GetDuration( "Active Direct Show" )

      で上手くいく!・・・と思ったら上手くいきません。アイコンがシークバー上に沿って動きません。

      まず小細工して上手く使えるようにするため、
      Active Direct Showオブジェクトの変数AにGetPosition( "Active Direct Show" )、
      変数BにGetDuration( "Active Direct Show" )を突っ込みます。

      そこで、

      ( 600 * 変数 A( "Active Direct Show" )  ) / Int(変数 B( "Active Direct Show" ) )

      にしたらうまくいきました。ポイントは変数Bの方へIntを付けます…。
      例えば再生位置がms単位で、5000msの動画だとすると、3秒目のシークバー上のアイコン位置は、
      600*3000/5000となります。
      小数の扱いダメ?なのか、分母の変数BにIntを付けて上手くいった理由はわからないですが、もうこれでよしとして次・・・

      しかしループ再生してみると、終了地点手前で始点に戻ってる気がします。

      カウンターオブジェクトでGetDuration( "Active Direct Show" )を表示してみると、
      ぴったり5秒の動画で5500ms…。500ms分だけ余分に尺があります。
      どの動画でも500ms分だけ余分にありました。

      なので、変数Bから500を引きます。

      ( 600 * 変数 A( "Active Direct Show" )  ) / Int(変数 B( "Active Direct Show" ) - 500 )


      これで完全に上手くいきました。


      あとは現在位置のアイコンにマウスオーバーして再生位置を変更したり、
      シークバーをクリックして再生位置を変更するなどの制作に入ります。


      完全に無からの独学だと、このIntのために1日潰れた・・・なんてこと日常茶飯事ですね(;´д`)



      | 1/1PAGES |

      calendar

      S M T W T F S
            1
      2345678
      9101112131415
      16171819202122
      23242526272829
      3031     
      << July 2017 >>

      selected entries

      categories

      archives

      recent comment

      links

      profile

      search this site.

      others

      mobile

      qrcode

      powered

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