ケータイFlashサイトをボタンで制御するには

By ookura - 09/10/08 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをLivedoor Clipに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

過去の記事に対するご質問への回答を兼ねてご紹介します。
→参照:「ケータイFlashで縦スクロールするページを作ってみよう(3ボタン制御編」
 
以前ご紹介した手法は、ボタンを全て隠しボタンにする方法でしたが、
下記の制限条件内であれば、別に隠しボタンにする必要はなく、
ステージ上に配置したボタンにそのまま画面のスクロールなどアクションを指定したりリンク先を指定したりすることができます。
 
 

制限条件

・画面が大きくスクロールしない
→一番下までスクロールしても上のボタンがステージ内に表示されているのであれば大丈夫です。
→ステージ外に出てしまうとステージ内にあるボタンの範囲でスクロールしますので意図しない動作になることがあります。
 
・ボタンの配置が縦横のいずれかにまっすぐ、もしくは右斜め下に向かって並んでいる
→上下キーで操作する場合、基本的に上から下、左から右の順にフォーカスしますのでそれを前提にボタンが並んでいれば問題ありません。
→デザイン上の問題で特殊な配置にする場合は隠しボタンによるスクロールを使った方がよいです。
 
・下から上のボタンへのスクロールは必ず行われる
→ボタンをそのままスクロールに使いますので特にFlashLite1.1の場合はフォーカスを制御できません。
 
 

仕様

・メニューが5つあり、それぞれフォーカスすると右側のボックスに説明が表示されます。
 
・各ボタンでクリックするとそれぞれのリンク先に移動します。
 
 

制作手順

・スクロール用のメニュームービークリップを用意し、その中で画面を作成します。
ムービークリップの名前は「menu」とします。
 
・フォーカスさせるボタンを作成して配置します。
 
・各ボタンには下記のようにActionを記述します。
1つめのボタン

on (rollOver) {
    pageY = 0;
    comment = "メニュー1の説明です。\n***************************************";
}
on (press) {
    getURL("link1.html");
}

※ボタンにフォーカスすると右側のダイナミックテキストがcommentの部分に記述した内容に書き変わります。
「\n」は改行です。
 
2つめのボタン

on (rollOver) {
    pageY = -10;
    comment = "メニュー2の説明です。\n***************************************";
}
on (press) {
    getURL("link2.html");
}

以下5つ目のボタンまで記述します。(詳細は省略します)
 
・右側にテキストフィールドをダイナミックテキストとして配置し、プロパティの変数名を「comment」とします。
 
・menuムービークリップのフレームを2つに分けて下記アクションを記述します。
1フレーム目

_y += (pageY-_y)/3;

 
2フレーム目

gotoAndPlay(1);

 
・ルートのフレームアクションに下記アクションを記述します。
1フレーム目

_focusrect = false;
stop();

 
 

制作時のポイント

・ボタンフォーカスはOFFにする

_focusrect = false;

隠しボタンではありませんのでどちらでもよいです。
デザイン上の問題ですのでフォーカスがあった方がよいという場合はOFFにしないというのもアリです。
 
・スクロールした結果、ボタンが画面外に移動してしまわないように注意
画面内のボタンにしかフォーカスしませんので画面外に出るまでスクロールさせると一番下のボタンから一番上のボタンにフォーカスを移動する時に途中のボタンにフォーカスしてしまったりします。
全てのボタンを画面内に抑えるようなデザインにしてしまうのが一番楽です。
スクロールの移動距離をなるべく小さくしておくとよいです。
 
・各ボタンにアクションの記述が必要
ボタンがたくさんあるとスクリプトの管理が大変です。
反面、構造は単純ですので初心者には優しい造りではあります。
 
・スクロールさせるメニュームービークリップはステージサイズより大きめに用意しておく
 
 

実行例

実行例はこちらからご確認下さい。

URLをメールで送る

http://ookura.tanikaze.com/Sample/post4665/

 
 

サンプルファイル

sample4665.zip
上記サンプルのFlashファイル一式です。
 
 

関連ページ

ケータイFlash関連の記事一覧
 
 


2 Responses to “ケータイFlashサイトをボタンで制御するには”

Comment from ゆう
Time 2010 年 4 月 27 日 at 11:07 AM

初めまして!
こちらの記事を参考に携帯のフルFlashサイトを完成させることができました!
本当にありがとうございます!

ところが、こういった事もできるならやりたいという事がいくつか出てきてしまい、調べても中々解決策が見つからず困っております。。。
もし、宜しければご教授いただけませんでしょうか?

■制作環境は以下の通りです。
・Flash8
・FlashLite1.1

★こちらの元になっている「3ボタンでスクロールを制御する」記事に記載されているような、一番上から一番下へ、一番下から一番上への移動をこちらの記事バージョンでなくすことは出来ますか?

★ボタンをクリックした際に「getURL」ではなく、「
gotoPlay」でタイムラインを移動させる動きをつけていますが、その度にどうしてもフォーカスがハズレてしまいます。フォーカスが当たったままで維持することは可能でしょうか?

★横幅230pxで制作しておりますが、インタラクティブ再生の場合、240px対応の携帯端末で表示させると自動的に端末側で100%になるように引き伸ばされてしまいます。
これを横幅230pxで固定させることは出来るのでしょうか?

以上3点でございます。
お忙しい中いくつも質問してしまい大変恐縮ですが、ご教授いただけますと幸いです。

何卒よろしくお願いいたします。

Comment from ookura
Time 2010 年 4 月 28 日 at 10:08 PM

> ゆう さん

本記事をご参考にして頂き、ありがとうございます。
携帯Flashサイトを完成されたとのことで、大変喜ばしく感じております。

ご質問頂きました件につきまして、下記の通り回答差し上げます。
※基本的にFlashLite1.1での対応をベースにした回答になっておりますのでご了承下さい。

> ★こちらの元になっている「3ボタンでスクロールを制御する」記事に記載されているような、一番上から一番下へ、一番下から一番上への移動をこちらの記事バージョンでなくすことは出来ますか?
記事冒頭で制限条件に挙げさせて頂いております通り、FlashLite1.1の場合は本記事の仕様では実現できないかと思います。
「3ボタンでスクロールを制御する」のように構成を変える必要があります。
FlashLite2.0以上であれば、「setFocus」でフォーカスを制御することで現在の構成でも対応できなくはないです。
※参考:
http://www.flash-jp.com/modules/newbb/viewprint.php?topic_id=7746&forum=18&post_id=38585
http://www.ncreate.net/flash-lite/post689/

> ★ボタンをクリックした際に「getURL」ではなく、「gotoPlay」でタイムラインを移動させる動きをつけていますが、その度にどうしてもフォーカスがハズレてしまいます。フォーカスが当たったままで維持することは可能でしょうか?
ボタンが配置されたフレームを移動先のタイムラインにキーフレームで区切らずにそのまま配置されていれば維持できます。
その際、ボタンを独立したレイヤーに置いていれば、他のレイヤーがキーフレーム等で区切られていても問題ありません。
FlashLite2.0以降であれば少し複雑になりますが、どのボタンにフォーカスしたかを変数に保存しておけば、「setFocus」を使って移動先でフォーカスを復元するという手法も考えられます。

> ★横幅230pxで制作しておりますが、インタラクティブ再生の場合、240px対応の携帯端末で表示させると自動的に端末側で100%になるように引き伸ばされてしまいます。これを横幅230pxで固定させることは出来るのでしょうか?
インライン再生であればHTMLタグでサイズを指定することで可能ですが、インタラクティブ再生で画面サイズに合わせて引き伸ばされるのはFlashの仕様ですので避けようがありません。
システムで機種判別して画面サイズを取得し、Flashの動的生成(swfmillで可能です)でFlash内の変数に渡すことで、ActionScriptで画面サイズを元にムービークリップを縮小して結果的に固定サイズで表示することもできなくはないですが、サーバーやPHPの知識がない方にはおすすめできません。
※動的生成に関する参考ページ:
http://www.plusmb.jp/2008/12/05/1510.html
http://www.plusmb.jp/2008/12/12/1594.html

下記、蛇足かもしれませんが、二点補足です。

1.
固定サイズで出力されたいとのことですが、サイズを固定ピクセルサイズで出力してしまうと、画面ぴったりで作成したコンテンツでも、画面サイズによっては画面の半分以下になったり、はみ出してしまったりします。
※画面サイズについては、例えば小さいものでは176px×182px(Softbank V802SE)、大きいもので480px×824px(Softbank 941SH)などの端末が存在します。
画面サイズについて、もしご存知でなければ各キャリアのサイトをご参照下さい。

2.
上記のご質問から推測したのですが、もしかすると自動的にサイズが引き伸ばされることで下記のように困っておられるのではないでしょうか?
下記、それぞれ解決策を提示させて頂きますのでご参考までに。

・細い線がにじんだり、見えなくなる
→配置する座標を小数点を含まない、ぴったりした位置に修正することで解決する場合があります。

・画像がにじんだり、ゆがんだりする
→外部から読み込んだビットマップ画像ではなく、ベクターデータ(全てパスで描かれたシェイプ)にしてみることで解決する場合があります。

・文字がにじんだり、つぶれたりする
→画像ではなく、テキスト(フォント:_等幅 / サイズ:12px)やベクターデータにしてみることで解決する場合があります。

以上でご希望された通りの回答となっておりますでしょうか?

Write a comment