動画プレーヤー

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日潰れた・・・なんてこと日常茶飯事ですね(;´д`)



    コメント
    コメントする








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

    calendar

    S M T W T F S
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
    << January 2018 >>

    selected entries

    categories

    archives

    recent comment

    links

    profile

    search this site.

    others

    mobile

    qrcode

    powered

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