Archive for category Flash

ムービークリップを特定フレームまで再生してから停止させる

Flashでゲームを作成した場合に、ヒットポイントを表示するゲージを扱うことがあるかと思います。

例えばダメージをうけた場合に特定の位置まで

gotoAndStop([フレーム番号]);

でも良いのですが、これだといきなり減ってしまい味気ない感じになってしまいます。

モーショントゥイーンしつつ指定の位置で停止出来ないものかと考えたのですが、_rootに停止位置フラグを置いて各フレームに、

if(_root.[停止位置の変数] == [フレーム番号]){

this.stop();

}

とするのも芸がありません。(100フレームあったとして全てに書くのもバカバカしいですしね)

こういった場合は次のようにするのが良いのではないでしょうか?(AS2.0です)

ステージ上に再生したいサンプルのムービークリップ (インスタンス名:test_mc )とテスト用の再生開始ボタン(インスタンス名:test_button)を配置します。test_mcの1フレーム目にはstop();を記述して再生はストップした状態です。

(ボタンをクリックした場合に25フレーム目まで再生して停止するサンプルスクリプト)

var test_mc_stop = 1;

test_button.onRelease = function(){

test_mc_stop = 25;

test_mc.play();

}

test_mc.onEnterFrame = function(){

if(this._currentframe == test_mc_stop){

this.stop();

}

}

onEnterFrameイベントで、毎フレーム呼び出されて currentframe で現在のフレーム位置をチェック。

予めボタンクリック時にセットされたtest_mc_stopと同じフレーム位置であれば再生を停止します。

AS3.0ではもう少しスマートな方法があるのかもしれませんが・・・・・

,

No Comments

Flashへのフォント埋め込みとライセンス

先日「新聞一面ジェネレータ」を作成した際に、固定で作成している大見出しとは別に自由にテキストを入力できる見出し部分のフォントを予め取りこんでおいて新聞風に見せるようにしていました。

しかし、色々と調べてみたところほとんどのフォントベンダーはFlashへのフォンと埋込を認めておらず、ライセンス違反になるとのことで、急遽修正しました。

基本的には第3者へのフォントの再配布と見なされるそうです・・・

確かに空きに選択した文字がアウトラインを伴って表示されるのですが、そのままフォント情報を抜き取って利用できる形にはなっていないんですよね。

(PDFへのフォンと埋込と配布についても同様に扱われる場合もあるそうです)

AdobeにとってみるとPDFやFlashで持っている機能が一部制限されるわけで、そこをなんとかしようとフォントベンダーとの交渉を重ねているようですが、はやく自由度が上がると良いですね。

ちなみにAdobeによると

小塚明朝・ゴシックについては編集可能な状態での埋め込みを許可しているようです。

http://www.adobe.com/jp/type/browser/legal/embeddingeula.html

※新聞一面ジェネレータでも小塚ゴシックを使用しました。

別件でポストカードの裏面を編集できるサイトを構築しましたが、その際はフォントベンダーさんが仲介されていた案件ということもあり、ベンダーさんのご厚意でフォントを埋込可能でしたが、普段はなかなかそうはいかないでしょうし、ましてや今回のような実験的サイトではほとんど収益が発生しないため無理ですね。

どこか思い切ったメーカーさんで、Flashへの埋め込みOK!という形でリリースしていただけるとかえって売上が上がるように思うのは素人考えなんでしょうか?

No Comments

TextField へのスクロールバーの追加

通知表ジェネレータにて縮小表示時に文字が読みづらいためサイズ変更したところ1画面に収まらなくなってしまいました。

そこで、スクロールバーを表示させるためにUIScrollBarというコンポーネントを使用してみました。

コンポーネントを使用するためには、[ウィンドウ]→[コンポーネント]で、コンポーネントウィンドウを開き、UIScrollBarをドラッグして、TextFieldの端へ配置します。

(この際にオブジェクトへ吸着にチェックが入っていることを確認しておいてください)

右端側へ吸着させれば垂直の、下部に吸着させれば水平のスクロールバーとなります。

あとは、TextFieldに収まりきらないテキストがセットされると自動的にスクロールバーが表示されます。

ただ、方法によってはUIScrollBarがうまく表示されない場合があります。

  1. Varsからテキストをセットした場合
  2. TextFieldの変数名とインスタンス名が同じであった場合

1は、TextFieldに変数名を設定し、変数にテキストを代入することによって内容を切り替えていた場合にスクロールバーがうまく表示されません。

TextFieldにインスタンス名を設定し

[TextFieldのインスタンス名].text = “代入するテキスト”;

というようにtextプロパティからテキストをセットする必要があります。

2はインスタンス名と変数名が同じ場合に変数への代入が優先されてスクロールバーが出ないおそれがあるためです。

TextFieldにインスタンス名をつけ、 ‘TextField.text’プロパティを使ってテキストを設定してください。TextFieldにはインスタンス名に加えて変数名も使用できます が、スクリプトに混乱を生じるおそれがありますので、変数名は削除することをお勧めします。

ちなみに、縦横50%のサイズに縮小した場合にスクロールバーが細すぎるため、幅を増やせないかとあれこれ挑戦してみましたが、配置時にサイズ変更をしても、実行してみると元のサイズ(幅16pix)で表示されてしまいます。

Flash CS3 ドキュメンテーションを確認すると

UIScrollBar コンポーネントは、オーサリング時にも実行時にも縦横に変形させることができます。ただし、垂直方向の UIScrollBar の幅、水平方向の UIScrollBar の高さを変更することはできません。

とのことでした。好きな幅に設定できるといいんですけどね。

好みの形にするには自作するしかないようです。

,

No Comments

ダイナミックテキスト(デバイスフォント)へのマスク指定

通知表ジェネレータの表紙には、本人の名前がセットされるようにTextFieldが配置されています。

ページめくりのエフェクトの為、表紙にはマスクがかかっており、裏ページにあわせてマスクが移動することで表紙がだんだん隠れていくのですが・・・・

いざパブリッシュしてみると名前欄が表示されていません。

調べてみたところ、デバイスフォントへのマスク指定はスクリプト側から

MovieClip.setMask()メソッド

にて指定する必要があるようです。

ただ単に動かないマスクであれば良かったのですが、今回は動作の絡んだもののため、仕方なくめくり始めると字が消える形でごまかしてしまいました。

そういえばデバイスフォントの場合、文字の回転をした場合も文字が非表示になってしまうんですよね。

(フォントを埋め込むと正常に回転出来ます)

No Comments

外部からの参照を禁止されているサイトからswfへの画像読み込み

新聞一面ジェネレータではswf自体をここのサーバに設置して、

  1. JavaScriptによって出力されたタグからswfを読み込み
  2. swfから指定されたURLの画像を読み込み

という動作をしています。

当初FireFoxから確認した際には気づかなかったのですが、IEで見た場合、外部からの画像ファイル参照を禁止されているブログ等にアップロードした画像ファイルを読み込めないという現象を発見しました。

どうも、IEから別サーバのswfを表示させたところ、画像読み込み時のリファラがswfが設置されているドメインとなるようです。(IE6,7共)

さらに検証してみるとsafari3.2.1では問題なく表示されました。

結局、そのままIEで表示できるようには調整できなかったので、別サーバにアップした画像の利用、もしくは許可されたファイル名の画像を利用していただくように案内する形にしかならなかったのですが・・・

色々調べてみるとFireFoxのFlashPlayerではリファラは送信していない、もしくはswfを表示しているページ自体のURLが送信される模様。

おそらくSafariでもそうなのでしょう。

以前であれば

Flash Player において任意の Referer ヘッダが送信可能

というFlashPlayerのバグを利用したリファラ偽装も出来たそうですが、現在は修正済みです。

でも、これ、Flashを利用したバナーからリンクされた場合、リンク元が正確にとれない不具合とかありそうですね・・・

ブログパーツを使用した販促なんかの場合どうやってログ解析してるんでしょうか?

No Comments

動的に生成したTextFieldへのフォント埋め込み

新聞一面ジェネレータでは、入力された文字を動的に生成したTextFieldへ表示しているのですが、最初の段階ではフォントが反映されませんでした。

※制作したPCにはフォントが入っているため正常に動作しているかのように見えて気づかなかった。

これはTextField.embedFonts プロパティを true にする設定が抜けていたことが原因でした。

ちなみに、通常AS上で作成したTextFieldにフォントを埋め込むためには、ライブラリへフォントを登録し、リンケージ、action scriptへのフォント読み込み、一番最初のフレームに読み込みといった設定が必要なのですが、そうしてしまうと全てのフォントが埋め込まれサイズが肥大化してしまいます。

今回は旧式の方法ですが、予めステージ上に必要なフォントのみを埋め込んだTextFieldを配置して対応しました。

,

No Comments