だいぶごぶさたしてました。。。最近はJavaScriptやCSSを触ることが増えてきましたけど、久しぶりにFlashについて書こうとおもいます。ActionScript3になってから正規表現がサポートされましたが、ActionScript2、1では使うことができません。それを使えるようにするライブラリを見つけたので簡単に紹介します。
ライブラリ配布サイト:http://www.jurjans.lv/flash/RegExp.html
ここのページで、まず最初にはまってしまいましたのが、AS1とAS2で使用するライブラリの種類が違いました。
AS1用:RegExp.zip
AS2用:RegExp_JLott.zip
このzipファイル名を探してダウンロードしてください。解凍したzipファイルの中にあるasファイルをドキュメントルートに設置して、スクリプトで読み込めるようにしておいてください。
RegExサンプルコード AS2 ActionScript 1
2
3
4
import RegExp; var regexp = new RegExp("([^?]*)");//←括弧のなかに正規表現パターンを入れる result1 = regexp.exec("ここにテキストを入れる");//パターンにマッチした部分を摘出 result2 = "検索する文字列".replace(regexp,"置き換えたいテキスト");//パターンにマッチした置き換え いろんな参考ページをみたときに、new RegExpの第2引数になんらかのStringを入れていましたが、いまいち用途もわからず、なくても正しく動きましたので今回は省きました。
RegExサンプルコード AS1 ActionScript 1
2
3
4
#include "RegExp.as" var regexp = new RegExp("([^?]*)");//←括弧のなかに正規表現パターンを入れる result1 = regexp.exec("ここにテキストを入れる");//パターンにマッチした部分を摘出 result2 = "検索する文字列".replace(regexp,"置き換えたいテキスト");//パターンにマッチした置き換え 正規表現というのはとても便利でいいんですが、僕はいまいち使いこなせていないです。。^^;
ActionScriptで3DCGアニメーションや3Dゲームを作るために欠かせない、Papervision3Dの日本語ドキュメントが公開されてましたのでメモします。
Papervision3D™ 2.1 日本語 リファレンスガイド
http://papervision3d-jp.googlecode.com/svn/trunk/docs/index.html
papervision3d-jp(プロジェクト)
http://code.google.com/p/papervision3d-jp/
Q.納品されたswfファイルが開けません A.ローカル(StanndAlone)でswfを再生できるFlash Playerは無料配布されてませんので、Flash Playerがインストールされたブラウザにドラッグアンドドロップして確認してください。
Q.ブラウザにswfファイルをドラッグアンドドロップしましたが、サイズが違います。 A.htmlに乗せていないswfファイルは、縦横サイズが指定されていないので、ブラウザウインドウの幅の分だけ拡大します。原寸サイズで確認する場合はhtmlに貼り付けて、htmlから確認してください。
Q.Flash Playerをインストールしているのに、Flashが表示されません! A.(JavaScriptでswfを表示させている場合)JavaScritpがOFFではありませんでしょうか?swfを表示するために、swfobject.jsというJavaScritpを使用していますので、確認する際にはJavaScritpをONにしてください。
Q.修正したswfファイルが、更新されてないみたいなんですが。 A.swf配信後、更新前のキャッシュファイルが残っている可能性があります。ブラウザのキャッシュを消してから確認してみてください。
Q.外部XMLを更新、配信したんですが反映されません。 A.swfの修正更新ではなく、外部XMLを用いている場合、Flash側でキャッシュ対策がされてない場合があります。Flash制作者へお問合せください。
Q.外部から読み込んでいる画像が表示してません。 A.読み込んでいる画像のURLに直接アクセスしてみてください。そこに画像はありますか?
Q.Flashが出てなくて真っ白です。 A.真っ白いという状況は複数の原因が考えられますので、まず、そのFlashが表示されるはずの真っ白い場所を右クリックしてみてください。Flashのコンテキストメニューが表示されなかったらFlash Playerがインストールされてないか、HTMLの記述に間違いがあります。まずはそこを確認してから他の原因を調べます。
Q.IEではFlashが見れますが、FirefoxではFlashが表示されません(その逆の場合も) A.見られてないブラウザにFlash Playerがインストールされていない可能性があります。IEとFierfoxとでは、各ブラウザごとにFlash Playerのインストールが必要ですので、見られないブラウザでAdobeのサイトからFlash Playerをインストールしてください。
http://get.adobe.com/jp/flashplayer/
Q.ページ内リンクからブラウザの戻るボタンで、Flash Playerが正しく再生されない A.ブラウザによって「戻る」ボタンの仕様がちがい、全てに当てはまるとは限りませんが、Flashのタイムラインが進んでしまってる状態のまま「戻る」可能性があるので、1フレーム目にXMLや画像を読み込むActionScriptを記述していると、その1フレーム目のActionScriptが実行されていないまま、フレームが進んでいる状態に戻っている可能性が高いと思います。ページ内リンクからブラウザの戻るボタンで、Flash Playerが正しく再生されないを参考にしてみてください。
Q.FlashPlayerは潜在的に危険な操作を停止してしまいます。 HTTP環境外、例えばローカルとかからFlashを再生してリンクを確認する時、セキュリティが働いてページ遷移しない設定になっています。FlashPlayerは潜在的に危険な操作を停止しましたの回避策を参考にしてみてください。
HTMLにswfファイルを貼り付けてブラウザで見るときに、場合によってはHTMLに書いておいた値やパラメータをFlashの変数に渡してあげたいときがあると思います。Flash内を更新したいときや、ちょっとした汎用性のあるコンテンツを作るときに、Flashアプリケーションがインストールされていない環境でも、Flashの更新をしたりする時に便利です。色々ある方法の中で一番シンプルな方法、swfobjectを使って、ActionScriptにどう書けばいいのか紹介します。
swfobjectを使ってパラメータを設定する場合 swfobjectの使い方はswfobject v2.xの使い方を参考にしてみてください。
Flashコンテンツの背景色を色々変更したいという例えで紹介します。HTMLに書くswfobjectの書き方のイメージはこんな感じにします。
HTML 1
2
3
4
5
6
7
8
<script type="text/javascript" src="swfobject.js"></script> <script type="text/javascript"> <!-- var flashvars = {bgColor: "FF0000"};//←背景色 var params = {allowscriptaccess: "always"}; swfobject.embedSWF("flash.swf", "flashContent", "100", "100", "8", "", flashvars, params,attributes); //--> </script> flashvarsに変数名「bgColor」を書いて、値である16進数の「FF0000」を書いてみました。
ではActionScriptではどのように書くか
ActionScript2.0以下でflashvarsを取得する場合 ステージ全部に収まるシェイプを作って、今回の例では100x100の正方形のMovieClipを作ってステージに配置します。インスタンス名を「bg」としました。第1フレームに下記のActionScriptを書きます。
ActionScript 1
2
3
var color_obj = new Color(bg);// カラーオブジェクトを作成する var colorStr = "0x"+_root.
ActionScript3.0から、Flash領域内で右クリックしたときに出るコンテキストメニューを非表示にすることができるようになりました。
ActionScript3 1
2
3
import flash.ui.ContextMenu; var menu_mc = new ContextMenu(); menu_mc.hideBuiltInItems(); 拡大縮小や描画領域を表示させるのはユーザーの方に見せる必要がないと思い消してもいいと思いますが、コンテンツによってはセキュリティーの設定項目と、Flash Playerとは。のメニューは残しておいたほうがいいかもしれへんなぁーっと個人的には思いました。
ローカルの時間を取得する方法 この辺の感覚はAS1、2とあまりかわらないですね。
ActionScript3 1
2
3
4
5
6
7
8
9
10
var myDate:Date = new Date(); trace(myDate.fullYear); trace(myDate.month + 1); trace(myDate.date); var dayAry = ["日","月","火","水","木","金","土"]; trace(dayAry[myDate.day]); trace(myDate.hours); trace(myDate.minutes); trace(myDate.seconds); trace(myDate.milliseconds); 文字列を渡して時間を設定する方法 ローカルの時間だと、ユーザーのパソコンの時計にしまいますので、サーバーの時計等を取得して時計を表示させる場合は、下記のパターンのように、new Dateの引数にStringなどを入れることによって正しい時間を表示させることもできます。
ActionScript3 1
2
3
var myDate:Date = new Date("Fri, 26 Mar 2010 06:35:19 +0900"); var myDate:Date = new Date("Sat Nov 30 01:20:00 GMT-0800 1974"); var myDate:Date = new Date(1974, 10, 30, 1, 20); 文字列から時間を再設定してから時を刻むサンプル getTimer()はFlashPlayerが再生し始めた瞬間からの経過時間をミリ秒で取得できる関数です。1000=1秒です。Date.
ローカルでswf再生したとき、またはgetURLやnavigateToURLでページ遷移しようとしたときに、Adobe Flash Playerは潜在的に危険な操作を停止しました。というアラートがでたことあるかと思います。「Adobe Flash Playerは潜在的に危険な操作を停止しました」の回避策とグローバルセキュリティ設定の方法を紹介します。
グローバルセキュリティ設定方法
Flash Playerヘルプ:グローバルセキュリティ設定パネル
http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html
このページにあるFlash部分の「編集」と書かれているプルダウンメニューの「追加」をクリックして、アラートを出しているswfファイル直接設定するか、フォルダー丸ごと設定するかのどちらかが選べます。すると、「これらのファイルとフォルダを常に信頼する」項目に追加されたと思います。設定はこれで終わりです。ボクはCドライブ全部にかけてます。あまり良くないかもしれませんけどね・・・汗
「Adobe Flash Playerは潜在的に危険な操作を停止しました」のアラートは何を訴えているのか 簡単に言うと、ローカルで再生されるswfファイルが、別のページへ遷移するけどいいですか?と聞いてくれてるわけですね。もしそのswfファイルが誰が作ったかわからず、悪意があるswfファイル開いた瞬間にウィルスに感染してしまう。ってことになりえるかもしれません。それを未然に防ぐために、そのswfファイルは信頼できるかどうか。前項のグローバルセキュリティ設定パネルで設定して許可をしたということです。
このアラートが出る条件は以下のときに出ると思います。
・getURLやnavigateToURLなどのページ遷移する関数が書かれているswfファイルを、そのままダブルクリックで再生する
・htmlファイルにswfを貼り付けたファイルを、ローカルからブラウザで開く
・ボタンアクションなどでページ遷移しようとした瞬間
Flash Debug Playerが出したエラーログ
SecurityError: Error #2028: ローカルファイルシステムの SWF ファイル file://C:\hoge.swf はインターネット URL http://hoge.com/ にアクセスできません。 at global/flash.net::navigateToURL() at MethodInfo-404() ActionScript 3.0 コンポーネントリファレンスガイド:ランタイムエラー一覧
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/runtimeErrors.html#2028
getURLやnavigateToURLでページ遷移しない!ページに飛ばない!と言われたら そもそもこのアラートが出るだけでもマシかもしれません。アラート自体がでない可能性もあるので、クライアントさんとかに確認してもらってる時に「ページ飛ばないよ」と言われたら、このアラートの可能性が高いと思います。確認出しの方法はいくつかあると思いますが、zipで圧縮してメールで送る場合、ローカルで再生される可能性があるので回避したい。でも、わざわざこの設定をしてもらうのもなんか悪い気がする。。。手っ取り早いのはサーバーにアップして、httpアドレスを直接ブラウザを介して確認してもらいたいところですが、公開してはいけない繊細なコンテンツの場合だと、グローバルセキュリティ設定をしてもらうしかないですね。