flashの最近のブログ記事
GPUのフル活用
Flashの処理はCPUでのみ行っていますが、WPFの場合GPU(グラフィックボード)を使ったハードウエアレンダリングを可能しているため、PCに負荷をかけることなくより美しいグラフィックスを表現することができます。
そのため、今までありがちだった「フルFlashサイトを見ながら、PhotoshopとFlashで制作作業をしていると、PCが重い」といったようなケースが発生しにくくなります。
逆を言えば、WPFのグラフィックレンダリングにはGPUのスペックが重要になってくるため、現状では再生できるPCが限られます。
引用元:MdN Interactive:webテクノロジー研究所「 番外編 WPFとは何か?」
今までFlashはCPUで演算を行ってきましたが、Vista搭載のWPF(Windows Presentation Foundation)という機能によりGPUに処理を分散させることが可能になったらしいです。
正直、Flash MX2004proまでしか使ったことがなかったので、本日はじめて知りました。
この不可分散を施したflashをWinXPなどで読み込んでも従来どおりCPUのみで処理できるらしい(未確認)ので問題はないのかな!?あるのかな!?
7レイヤー(下から順に"Layer01"~"Layer07")ぐらいに分けて、それぞれにムービークリップ(以下、MC)等を配置し、ActionScript(以下、AS)で動かしている状況で、あるレイヤー"Layer04"にあるMC(仮にインスタンス名を"mc_menu"とします)の動作をASで制御したとします。たとえば
this.mc_menu.onLoad = function () {
//ステートメント記述
}
の様な具合でインスタンスmc_menuを制御したりしてね。で、
その二つ下のレイヤー"Layer02"自体にはAS以外記述せず空レイヤー(ステージには何も配置しない状態)のまま実行すると
二つ上のレイヤー"Layer04"にあるオブジェクトが一切表示されませんでした。
上記の画像だと"Layer02"にあたるのが「loadMC背景+AS」レイヤー。"Layer04"にあたるのが「subMenu」レイヤーです。まぁ、二つ下のレイヤーを空にしなければ大丈夫なのでどうとでもなる小さな事なのですけどね。
原因不明です。お分かりになる方がいらっしゃったらコメントをいただけると幸いです。丸1日はまってしまいました。
IMAJUK(別窓)さんというサイトのブログでAS2とAS3の違い(その1)|(別窓)で興味深い一節を見つけました。
どうやらAS3でようやくMovieClipがnewできるようになったらしいのです。
しかし、 flash:ムービークリップそれはオブジェクトの一部なのか?というエントリ内で書いたように、なぜかMX2004pro、FlashPlayer7、winXPsp2の環境下でMCをnewできてしまっています。とりあえずトラックバックを送ってみよう。
07/12/21追記
この記事は私の勉強不足による勘違いの可能性が高いです。異なるスクリプトを試してみたところMovieClipはnewできていませんでした。
mc_submenu = new MovieClip();このソースコードにおいてEnterFrame内のtraceは実行されません。
mc_submenu.onEnterFrame = function(){
trace("aiueo");
}
flashのマニュアルを呼んでいると「データ型について」という項目があります。そこには
- ストリング (String) データ型
- 数値 (Number) データ型
- ブール (Boolean) データ型
- オブジェクト (Object) データ型
- MovieClip データ型
- ヌル (Null) データ型
- 未定義 (Undefined) データ型
- Void データ型
あるムービークリップ mcAに以下のようなコードを打ち込み、実行してみます。ActionScript上では、このコードは不正確で正しくありません。ActionScriptではonClipEventハンドラの二重入れ子は出来ないことになっております。が、なぜかコンパイルを通ってしまいますのでよしとします。
onClipEvent (load) {
this.onPress = function(){
trace("push");
this.onEnterFrame = function(){
trace("enterframe");
}
}
this.onRelease = function(){
delete this.onEnterFrame;
trace("release");
}
}
実行するとボタンを押している間
pushと表示され、ボタンを離すと
enterframe
enterframe
・
・
・
releaseと表示されenterframeが終わり(削除され)ます。
関連記事:ActionScript:object.onRelease、object.onEnterFrame関数の二重入れ子
発見してしまいました。私の大先輩であるYouji.Mさんの会社?ブログを発見してしまいました。トラックバックを送ってみたりします。会社から更新しているので長くはかけませんがご了承ください。で、本題ですが、
中村勇吾大先生が攻殻機動隊をまねてflashで作ったであろう文字がランダム表示されてからテキストがでてくるアレ(別窓) 似たようなものをYoujiさんが作っておりまして、ライブラリにして公開されてます。。
とてもカッコイイです。実は私も作っておりまして。ソースは続きを読むに記載しておきます。
マイクロソフトはWeb ブラウザ『Internet Explorer』(IE) による『ActiveX』コントロールの処理方法を、以前の方式に戻すらしいです。 このワンクリックは別の会社が持っていた特許関係の問題を回避させるためにしょうがなかった訳ですが、とうとう特許を持っている会社との和解が成立したらしいです。
この再変更で、IE の ActiveX コントロール有効化処理の手間が減ることになるわけです。やったね!現状の IEでは、「object」「embed」「applet」というタグを用いて、HTML に直接埋め込んだ ActiveX コントロールを読み込む際、要するにFlashを表示・有効化するためにクリックを求める仕様になっている訳ですが、それがとうとう無くなるという訳です。
なので、これからはこのワンクリックを回避するために、Javascriptを使ってFlashをHTMLに埋め込む必要がなくなる訳です。
ソース:http://japan.internet.com/webtech/20071110/12.html|別窓
関連記事:IEにおけるFLASHコンテンツのコントロールアクティブ化
temp=0;
_root.btn.onEnterFrame = function(){
trace(temp);
temp++;
if(temp>30){
return;
}
}
}
とうActionScriptにおいて、変数 tempの値が30以上になった場合でもreturn;で関数onEnterFrame = function(){}を抜け出すことはできません。関数の2重入れ子自体は可能ですが、returnで戻り値を出そうとすると挙動がおかしいです。なので、ボタンが押されてから30フレーム目まで毎フレームごとにスクリプトを実行することは別の方法で実装しなければなりません。
日本語が変ですみません。
07/12/18追記
そもそも記述自体がスクリプト的に怪しいです。一例としてonClipEvent ハンドラは、ほかの onClipEvent ハンドラ内にネストすることはできないというActionScriptの仕様があります。
_root.btn.onEnterFrameから抜け出したい場合、[ delete _root.btn.onEnterFrame ]でオブジェクト?関数?ごと削除してしまうのが正しい記述方法らしいです。
関連記事:ActionScript:object.onRelease、object.onEnterFrame関数の二重入れ子 その2

