ローカルの時間を取得する方法 この辺の感覚は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アドレスを直接ブラウザを介して確認してもらいたいところですが、公開してはいけない繊細なコンテンツの場合だと、グローバルセキュリティ設定をしてもらうしかないですね。
Flashに画像を配置した時に、さっきまで見ていた色と違うということがありました。 全体的に赤みを帯びていたり、コントラストが強くなってたり。。。 原因を調べてみると、画像を編集していたPhotoshopにあることに気がつきました。
プルダウンメニューの「ビュー」⇒「色の校正」にチェックが入ってて、上の「校正設定」が「Windows」以外に選択されてました。 画像の見え方は、OSの色の解釈や、画面を見ているモニターの性能によって若干のブレがあるため、 この項目で確認したりするためのもので、Flashにインポートするときはjpgかgifに書き出していたため、 若干のブレがあり、色が変化しているように見えてたんだとおもいます。ショートカットがCtrl+Yですからね。 1つ進むのリドゥと間違えて押してしまったっぽいです笑
Photoshopで編集していた画像をFlashに読み込んだときに、 色が若干変化していた時は、ここのチェックをみて、 普段作業をするぶんに関しては、チェックを外していたほうがいいかもしれません。
古のFlashからあるgetURL関数がAS3でなくなっていることに戸惑われた方もいらっしゃるのではないでしょうか。AS3の仕様変更により、URLRequestクラスの変数に、ページ遷移する先のURLテキストを持たせて、navigateToURL関数の引数に渡してあげるとページ遷移します。
ActionScript 1
2
var url:URLRequest = new URLRequest("http://creator.cotapon.org/"); navigateToURL(url, "_self"); ボタンで実行する時はリスナー登録したイベントに対して書けば動作します。一回覚えてしまえば簡単ですねー。
ActionScript 1
2
3
4
5
6
7
import flash.net.URLRequest; import flash.net.navigateToURL; btn.addEventListener(MouseEvent.MOUSE_DOWN, btnMouseDown); function btnMouseDown(e:MouseEvent):void { var url:URLRequest = new URLRequest("http://creator.cotapon.org/"); navigateToURL(url, "_self"); }
「あなたは旧式ブラウザをご利用中です」というアラートが出てますか?割と強引な感じがしますが、最近YouTubeでも同じようなアラートが古いブラウザでアクセスした時に出るようになってます。
WebサイトホスティングサービスのWeeblyがキャンペーンを立ち上げ、その理由としてはIE6や古いブラウザに対応するのがサービス運用のなかで負担になるためと説明しているそうです。このブログのテンプレートもIE6でみると崩れるので、かといってCSSハックがボクにとっては八苦なので、、、このページだけアラートを出しておきます。。^-^;
IE6 No More
http://www.ie6nomore.com/
ソースコードページ
http://www.ie6nomore.com/code-samples.html
ActionScriptでクロスドメインを認識させる方法は、
ActionScript 1
Security.loadPolicyFile("http://mysite.com/crossdomain.xml"); ↑たぶん、このようにスクリプトを書きます。
ActionScript 1
Security.loadPolicyFile("http://mysite.com/sitemap/crossdomain.xml"); ↑状況によってはドキュメントルート直下に「crossdomain.xml」置けないときもあると思います。
ボクは事情により後者で設定してFlashを再生させると、、
Error #2044: ハンドルされていない SecurityErrorEvent : text=Error #2048: セキュリティサンドボックス侵害 (※これはFlash Debug Playerからのアラートです) 出た!出たよ!!出てしまったよ!!!(TOT)
そこでFlashTracerでログを追跡してどんなエラーが出ているかを調べてみました。
ここでクロスドメインの構造をサクッと説明しますが、ドキュメントルート以外のクロスドメインの方法は更に下のほうに書きます。
crossdomain.xmlの設置と記述方法 Flashのクロスドメイン問題はいにしえからある問題です。 そもそもクロスドメインというのは、swfファイルを貼り付けているHTMLをからみて、外部ファイルをロードするときに、そのファイルが置いてある場所は、HTMLファイルとは違うドメインという状態のことを指します。つまり、FlashPlayerは他人のドメインを攻撃してしまわないようにしているわけです。でも、世の中には写真共有サービスがあったりRSSコンテンツがあったりAPIなんかもあります。そういった場合は、どこからでも情報を取得してもいいですよ。といった感じに許可をすることができます。 その許可をするための設定ファイルが、 crossdomain.xml にあたります。
たとえば、自分のサイト http://mysite.com というサイトに表示させるFlashコンテンツが http://hoge.com というサイトにあるRSSをロードするとします。 この場合、クロスしてますよね。 hoge.com サイトは、 mysite.com がRSSをロードしてもいいよ!と許可をする為に、 crossdomain.xml をドキュメントルートの場所においてあげます。 アドレスは
http://hoge.com/crossdomain.xml このようになります。実際に、この crossdomain.
ライブラリにおいてあるムービークリップに対して、リンゲージでActionScriptに書き出しをチェックを入れてクラス化したモノを、var 変数名:クラス名 = new クラス名();で生成して、stage.addChild(変数名);でステージに配置するのは基本だと思います。が、この一連の流れで一体どこにインスタンス名を設定するのか非常に悩んでしまいました。
単純にMovieClipを生成するだけなら、 var 変数名:MovieClip = new MovieClip(); でできちゃいます。ActionScript2以下の場合では、createEmptyMovieClipを使って空のMovieClipを生成していたと思います。
インスタンスを作成する場所.createEmptyMovieClip(インスタンス名, 深度)
第二引数にインスタンス名を設定ができ、例えばforで繰り返し生成する場合は、インスタンス名に対して「i」を連結させて連番名などにしたりしていました。さて、、ActionScript3.0ではどうするのでしょうか。。。
まず、空のMovieClipを生成した時の名前を調べました。
ActionScript3 1
2
var mc:MovieClip = new MovieClip(); trace(mc.name);//「instance1」と出力 name はActionScript2以下の場合は _name でアンダーバーがいりましたが、ActionScript3.0ではアンダーバーがいらなくなりました。newしたMovieClipの名前をtraceしてみると instance1 と出力されました。
これをforで繰り返して生成したMovieClipにアクセスする為には「instance1」「instance2」とかのまま作られたらダメですよね。。。
そこで調べました。なんと!ActionScript2以下ではインスタンス名を調べることしかできなかったnameが、ActionScript3.0からnewしたインスタンス名に設定できることが分かりました、つまり、
ActionScript3 1
2
3
var mc:MovieClip = new MovieClip(); mc.name = "myMc"; trace(mc.name);//「myMc」と出力 こう書けちゃうんです!勘の鋭い方はもう分かると思いますが、forで繰り返すときは、変数名.