[ Siena 目次 ]

パラパラ漫画リーダー

形式に従った zip (中身は xml )ファイルを入力として、様々なパラパラ漫画を再生できるアプリを試作します。 パラパラ漫画アプリと、Export / Import のサンプルの成果を掛け合わせた試みです。アプリと入力データの分離を目指します。

試作は完了しましたが、実用には今一つの結果であったことを記しておきます。この辺りの事情は、感想をご覧ください。


実際の画面を確認

シンプルなオープニング画面で始まります。数秒したら、自動で再生画面に移ります。
このあたりのテクニックは、表紙画面のサンプルに詳細を記述していますので、興味のある方はご覧ください。
スクリーン1
オープニング画面を挿入したのは、貼り付け要素の表示/非表示をコントロールする変数の初期処理をするためです。
スクリーン2
再生画面に移りました。ここで Import ボタンをタッチ(クリック)すると、ファイル選択ウィンドウが開きます。
スクリーン3
ファイル選択ウィンドウが開きました。ここで予め準備しておいた zip ファイルを選択して開きます。
スクリーン4
スタートボタンが表示され、左下に総コマ数も表示されました。スタートボタンをタッチ(クリック)すると、パラパラ漫画が始まります。
スクリーン5
再生途中の1コマを念のため… この画像は、パラパラ漫画アプリを紹介するときにネット上にアップロードした画像を、そのまま参照しています。 再生後に Import ボタンをタッチ(クリック)し、今度は別のファイルを選択します。
スクリーン6
ファイル選択ウィンドウが開きました。ここで今度は別の zip ファイルを選択して開きます。
スクリーン7
左下の総コマ数が変わりました。スタートボタンをタッチ(クリック)して再生します。
スクリーン8
再生途中の1コマを念のため… この画像は、新たに作成した画像をネット上にアップロードしたものです。 一応、アプリと入力データを分離させたことで、様々な作品の再生が可能になりました。この点が、前回のパラパラ漫画アプリと最も異なる点です。


以下に、作成時のポイントを記述します。

[ 目次 ]
  1. 実際の画面を確認
  2. 事前準備
  3. 仕様確認
  4. 仕組みの解説
  5. 感想
  6. おまけ → パラパラ漫画データ出力アプリ



事前準備

  1. パラパラ漫画の画像を作成しておき、ネット上にアップロードしておきます。実写のコマ撮りでも構いません。
  2. データソースとして読み込む zip (中身は xml ) を作成します。 「 ID 」 と「 写真の保管場所 」だけという、シンプルな表を作成し、テーブル変換した後、パラパラ漫画データ出力アプリで出力します。 テーブル変換の手順は、こちら(サンプルで気付いたポイント)に記しています。興味のある方はご覧ください。
  3. エクセル表



仕様確認

  1. Import ボタンをタッチ(クリック)したら、ファイル選択用ウィンドウを開き、選択した zip ファイル(中身は xml )を開きます。
  2. データが読み込まれたら、スタートボタン(実際はタイマー部品)を表示します。
  3. スタートボタンがタッチ(クリック)されたら、パラパラ漫画を再生します。
  4. 画面左下に、現在のコマ数を表示します。



仕組みの解説

ここでは、貼り付けた部品の属性を ExpressView で確認します。
部品を選んで右下の ExpressView ボタンをクリックすれば、画面右に開きます。
以下、画像をクリックすると拡大画面が表示されます。

  1. 表紙画面のタイマー
  2. タイマーが終了したら次画面に遷移するようにしていますが、同時に、このタイミングを利用して、初期処理を行っています。
    TimerEnd 属性で、
    Clear(Flips);
    If(TimerOfCover!Value=TimerOfCover!End,
    Navigate(Screen,ScreenTransition!Fade,{isPlay:false}))

    と指定している部分がそれです。 isPlay というブーリアン変数が、イメージ要素とコマ数ラベルの表示/非表示をコントロールしています。
    表紙画面のタイマー
    Interval 属性は、1カウント毎の秒数のようです。

  3. Import ボタン
  4. 貼り付け要素の中にある Import という部品を使用して、
    読み込んだデータを Flips というコレクションに設定します。
    OnSelect 属性で、 Clear(Flips);Collect(Flips,Import1!Data)
    と指定している部分がそれです。
    また、イメージ要素やコマ数ラベルが表示されないようにしています。
    OnSelect 属性で、 UpdateContext({isPlay:false})
    と指定している部分がそれです。
    Import ボタン
    isPlay 変数を false にしているのは、1作目鑑賞後に2作目を Import した時、2作目の静止画像が表示されるのを防ぐためです。

  5. タイマー(スタートボタン)
  6. Text 属性を "Start" としたため、単なるボタンのように見えますが、タイマー部品です。 タイマーは、貼り付けた部品をタッチ(クリック)すると、カウントが始まるようです。

    タイマー(スタートボタン)1
    タイマー(スタートボタン)2

  7. イメージ
  8. イメージ1
    このアプリに限らず、イメージのポジションは Fit を選ぶことが多いです。無駄に大きくなり過ぎない、という印象です。

  9. コマ数ラベル
  10. ラベル




感想

次の二点が気になったので取り上げます。

  1. ネット上の画像取り込みに成功したが、ローカル環境の画像取り込みができなかった。
  2. WiFi 経由によるネット上の画像取り込みは、通信の影響が露骨に出てしまう。 タイマーの Interval 属性を短くするに従い画像再生が不安定になり、コマ飛びも発生し、鑑賞に堪えない時もあった。

一点目について、ネット上にアップロードした画像を読み込むことには成功しましたが、どういうわけか、ローカル環境の画像を Publish 後のアプリで見ることができませんでした。

Project Siena の制約に従って、画像をパブリックファルダ配下に保存しましたが、それでも無理でした。

特に不思議だったのが、 Publish していない開発途中 Preview 機能で見られたのに、 Publish 後の完成版アプリだと画像が見られなかったことです。

データソースのエクセル上に記述したローカルパスと、入力の xml に記述したローカルパスの認識に、何かしらの違いが生じているのかもしれません。

解決できない気がしたので、ローカル環境の画像を読み込む試みは諦めました。

二点目について、仕組みとしては動きましたが、 WiFi を使用した環境では、再生の安定性に波がありました。

有線であれば問題ないのかもしれませんが、画像のように容量があるデータを使用する場合は、常に先行して画像20枚を先読みしておくとか、もっと気を利かした仕組みにしなければいけないようです。
実用性を担保するには、もう少し工夫が必要な状態での試作完了となってしまいました。



おまけ → パラパラ漫画データ出力アプリ

xml を自力で作成できればよいのですが、いかんせん知識がありません。
そこで、Export / Import のサンプルで実証済みだった Export 機能を活用し、 xml を出力するアプリを作ることにしました。

作ったとはいえ、このアプリは Publish することができません。理由は、事前準備で作成したエクセルのテーブルを、データソースとして読み込まなければならないからです。

エクセルテーブルをデータソースとして読み込む手順は、サンプルで気付いたポイントを参照して下さい。
スクリーン1
左側がデータソースの中身を、右側は出力した zip ファイルを再度 Import して中身を表示しているギャラリーです。 念のため、 Export したものを Import して確認しています。 今回はわざと、左側と右側を別データにしてみました。

  1. Export ボタン
  2. Import ボタン
  3. データソースのギャラリー
  4. コレクションのギャラリー

  1. Export ボタン
  2. 貼り付け要素の中にある Export という部品を使用して、
    データソース Flips のデータを出力するように設定します。
    Data 属性で、 Flips と指定している部分がそれです。
    出力アプリのExport ボタン

  3. Import ボタン
  4. 貼り付け要素の中にある Import という部品を使用して、
    読み込んだデータを FlipsData というコレクションに登録します。
    OnSelect 属性で、 Clear(FlipsData);Collect(FlipsData,Import1!Data)
    と指定している部分がそれです。
    出力アプリのImport ボタン

  5. データソースのギャラリー
  6. データソース Flips の画像を表示しています。
    Items 属性で、 Flips と指定している部分がそれです。
    データソースのギャラリー

  7. コレクションのギャラリー
  8. コレクション FlipsData の画像を表示しています。
    Items 属性で、 FlipsData と指定している部分がそれです。
    コレクションのギャラリー