ActionScript2を相変わらず使っています。制作業界はもうActionScript3が主流なんですかね。。
ボタンの上にボタンが来るようなコンテンツを作るとき、下のボタンが反応してしまう時があります。それ以外のときでも、onRollOverハンドラで動くモノの上にマウスカーソルを持ってくると、人差し指カーソルになってしまい、矢印カーソルのままにしたい時があります。
そんな時に使うのがuseHandCursorです。マウスカーソルが人差し指になってほしくない所にMovieClipをおいて、そのMovieClipに対してuseHandCursor = false;としてあげるとマウスカーソルは矢印のままになります。ただし、そのMovieClipにonRelease、onRollOverなどのイベントハンドラを設定していることが条件です。
ActionScript 1
2
3
4
mc.useHandCursor = false; mc.onRollOver = function(){ trace("ほげほげ"); }
iPhoneや携帯端末にGPSが搭載されて、自分がその場にいるサービスがたくさんでてきました。自分もサービスとまではいきませんが、なんか地図を使ったコンテンツなんかも作ってみたいなぁーって思ったりします。Flashなどで拡大縮小するコンテンツを考えると、画像データではなくビットマップデータが必要だったり、papervision3dの練習がてら、太陽系なんて作ってみたいー。と思ったときに(あんまりないかなw)使えそうなテクスチャを、地図素材という括りで無理やりまとめました。^-^;
白地図、世界地図、日本地図が無料
http://www.freemap.jp/
白地図なんですが、epsを開くとたくさんのレイヤーに分かれていて、細かなラインで描かれているので拡大しても見るに耐えるコンテンツが作れそうです。その他「国旗」「道路標識」「県章」など、あまり使うタイミングがないかもしれませんが、いざ必要となった時に探すと苦労するものが載ってます。
Planet Texture Map Collection
http://www.freemap.jp/
看板下の惑星アイコンをクリックすると、太陽系のテクスチャがダウンロードできるページが開きます。無料で使えるところはテクスチャには十分使える大きさの画像です。こういうのをみると、Google Mapの航空写真はどうなっているのか気になりますねー。
Flashコンテンツを更新する際、XMLなど外部ファイルにデータを持たせて、それを更新するようなパターンがあります。メリットとしては、Flashアプリケーションを触らなくても更新でき、CMSとの連携もとれたりして非常に便利ではありますが、ActionScriptが複雑になり、Flashコンテンツの制作時間が長くなってしまうデメリットもあります。
XMLを更新したはずなのに、Flashの中身が変更されていない。という時がありました。ほとんどの場合ブラウザがキャッシュしているXMLが残ったまま、更新されたXMLを読みに行かないというのが原因です。のです。確認するときにブラウザのキャッシュを消せばいいのですが、お客さまにわざわざキャッシュを消させるわけにはいきません。^-^;
そこで今回は、ActionScriptでXMLのキャッシュを残さない方法を紹介します。残さないというより、FlashがXMLをロードする時に常に違うファイルとしてブラウザに認識させる方法。という言い方のほうが正しいです。
ActionScript 1
2
var myXML:XML = new XML(); myXML.load("hoge.xml"+"?noCache="+new Date().getTime()); XMLファイルにアクセスするパスに、?引数で現在の時間を付け足しています。サーバーへのアクセスは、[hoge.xml?noCache=1254463831798]こんな感じになり、ブラウザは1秒前とは違うファイルと認識して新たにXMLを取得、キャッシュを見に行くことはなくなるということです。特にXMLファイルの中身を書き消したりすることはありませんのでご安心を。
コンテンツが更新されない!とパニックを起こされる前に事前に対策しておいたほうがいいですねー!
マウスをグルグル動かしていくと気持ちいいですねー。
こういう二度と同じものはできなさそうなフラクタルっぽいビジュアル好きです。
http://www.cesmes.fi/
JavaScriptってすごいなー!!!ブラウザで懐かしいファミコンが動かせるエミュレーターです。CanvasというHTML5が使われているので、それに対応したブラウザ、かつ、JavaScriptの処理が早い、Google Chromだとなんとか動きます。もちろん、利用の際には著作権などに注意し、自己責任の上でご利用してください。
JSNES:http://benfirshman.com/projects/jsnes/
どういうときに起きたか 外部にある、jpgやgifファイルをFlashが読み込んで表示させるコンテンツはよくあります。例えば、その時画像が、画像専用のサーバーにあって、swfファイルとは別のドメインにあるとします。普通に画像を読み込むだけでは問題ないのですが、その読み込んだ画像に対してsetMaskメソッドを使うと、下記のようなアラートが出ました。
*** セキュリティ Sandbox 違反 *** SecurityDomain 'http://image.www.hoge.co.jp/hoge.gif' が互換性のないコンテキスト 'file:///C/hoge.swf' にアクセスを試みました。 おそらく原因は、 setMask();メソッドが、外部画像を読み込んだMovieClipに対してマスクをかけるのではなく、なにか見えない力で外部画像がマスクをとりにいっている。そういうイメージなのかもしれません。つまりクロスドメインなんでしょうね。
解決方法 ActionScriptで下記を追加すると一発で直りました。
ActionScript 1
System.security.allowDomain("*"); いやぁ~いろいろ難しいですねーw ^-^;
つまりどういうことかというと 1.新規ウィンドウ、または新規タブでFlashが載っているページを開く。
2.ページ内リンク、a nameタグで移動する。
※このとき、ブラウザの戻るボタンが押せるようになっているはず。
3.ブラウザの戻るボタンを押す。
4.Flashが正しく表示されてない。
というバグ?を聞いたことがあります。いろいろ調べてみると、どうやらFirefoxやSafariは大丈夫で、IE6と7で確認しました。 そのFlashコンテンツは、外部XMLファイルを読み込んで、その中に書かれている画像パスから外部外部画像データをすべて読み込んでから再生する。 という仕組みになってて、再生するタイミングで、ステージの最前面に白いシェイプをおいて、そいつに対してdanndannアルファを0%に、フェードアウトして演出していました。
どうやら、戻るボタンを押したときに、なぜかタイムラインが1フレーム目に戻っているようにみられ、 最初のフレームにXMLの読み込みや画像の読み込みのAction Scriptは実行済みの状態でした。 Flash Playerのキャッシュかブラウザのキャッシュか。。 そして、最終的に考えられる条件というのが、「シーン」で再生しているということです。
解決方法 このように、「シーン」のタイムライン上で1フレーム目にいろいろAction Script、諸々の条件で再生。5フレーム目に移動していますね。 今回の問題点は、ページ内リンクからブラウザの戻るを押すと、同じページ内に戻ってくるわけですが、 Flashは5フレーム目に再生しきっている状態で戻ってしまうわけです。
回避方法は、シーンに1フレームだけにMovieClipをおいて、その中にAction Scriptやコンテンツを置いたら解消されました。 ただ、これでは同じページ内に戻ってきているにも関わらず、またXMLを読みにいったり画像をロードしたりすることになってしまいます。 ユーザビリティが悪い場合は、「シーン」の1フレーム目に書かれたAction Scriptですべてお完結させれば事済みますが、 既に作ってしまっているFlashを修正する場合は、新規シンボルで空のMovieClipを「シーン」1フレーム目に置いて、 「シーン」あったAction Scriptやコンテンツは、すべてさっき作った空のMovieClipの中にペーストしてしまいましょう。 そして「シーン」には1フレーム目にペーストしたMovieClipがあるだけ。 一応これで、ページ内リンクからブラウザの戻るボタンを押したときに挙動がおかしくなるのは避けれると思います。