課題で作った新しい鏡の提案。
要ウェブカメラ、要FlashPlayer10以上
※追記
FlashPlayerのセキュリティ上、ウェブカメラを使おうとするとアクセス許可を求められるけど、このコンテンツ自体はウェブカメラの映像をどこかに流したりというような悪用はできないのでウェブカメラへのアクセスは許可しても大丈夫です。
課題で作った新しい鏡の提案。
要ウェブカメラ、要FlashPlayer10以上
※追記
FlashPlayerのセキュリティ上、ウェブカメラを使おうとするとアクセス許可を求められるけど、このコンテンツ自体はウェブカメラの映像をどこかに流したりというような悪用はできないのでウェブカメラへのアクセスは許可しても大丈夫です。
先頃Adobe MAX2009でFlash CS5の製品概要が発表された。その中で衝撃的だったのはiPhoneアプリ開発のサポート、これによってActionScript3.0を使ったiPhoneアプリの開発が可能になる模様。
Flashから書き出したコードはネイティブアプリとしてコンパイルされるようなのでFlashPlayerのようなVMを経由しないそう。
その上、基本的にはOpenGL/ES経由でレンダリングを行うようなので、速度的にもObjective-Cで開発する時より極端に遅くなるような事はなさそう。イメージとしてはopenFrameworksで開発するのに近そうな感じ。
すでにFlash環境からパブリッシュされたアプリがApp Storeでいくつか公開されてるようなので、「Flashでアプリ開発してお小遣い稼ぎ」は問題ないみたい。
ちなみにiPhoneがFlashをサポートしたわけではないのでウェブブラウジングの際にFlashコンテンツが再生可能になるわけではないみたい。ただswfのロードは可能なようなので、Flashコンテンツを別アプリで実行ってことはできるのかもしれない。
いずれにせよiPhone〜Flash界隈が活況になるのは間違いなさそう。とりあえず2009年末にβ版が公開という事で期待。
参考:
Adobe Labs – Adobe Flash Professional CS5: Applications for iPhone
Developing for the Apple iPhone using Flash | Adobe Developer Connection
Applications for iPhone:Developer FAQ – Adobe Labs
例えばライブラリから読み込んだSpriteの子Spriteにインスタンス名でアクセスしたいとか。これを普通にライブラリから読み込んだSpriteの子にアクセスしようとして、
//ライブラリからアタッチ var sp:Sprite = new spriteAttachedFromLibrary() as Sprite; //子Spriteにアクセス var spChild:Sprite = sp.spriteAttachedFromLibraryChild;
とすると、
「1119: 未定義である可能性が高いプロパティ “インスタンス名” に静的型 flash.display:Sprite の参照を使用してアクセスしています。」
と怒られる。
これを回避するためには[]演算子でストリングリテラルを使ってアクセスする。
上記の場合だと、
//ライブラリからアタッチ var sp:Sprite = new spriteAttachedFromLibrary() as Sprite; //[]演算子で子Spriteにアクセス var spChild:Sprite = sp[ "spriteAttachedFromLibraryChild" ];
こうするとエラー回避してアクセスできる。(via 凹村さん、ありがとうございました。)
ちなみに以前むねごんさんに教えて頂いたんですが、これを応用するとFlashPlayerの上位バージョンで追加された新しいメソッドなども使える。
例えばFP10からFileReferenceに追加されたsaveメソッド、これをFP9までしか描き出せないFlashCS3からも利用できる。
var fr:FileReference = new FileReference(); fr[ "save" ]( byte, name );
書き方はこんな感じ。
ただしこのまま描き出したswfは対応バージョンが9になっているので、このsaveメソッドが実行されるとエラーがでる。なのでバイナリエディタでswfの対応バージョンを9から10に書き換えてやる。やり方はバイナリエディタでswfを開いて、4バイトめの「09」を「0A」に書き換えて保存。こんだけ。これでFlashCS3からもfileReference.saveを使ったローカルファイルアクセスができる。
使用は自己責任でお願いします。
前々回のエントリでBitmapDataの制限サイズがちっちぇえって話を書いたけど調べてたらちょうどいい便利クラス見つけた。
サイズ制限なしのBitmapData作ってくれるクラス。
BitmapDataUnlimited / formatlos
http://blog.formatlos.de/2008/05/28/bitmapdataunlimited/
どうも内部でGIFを作って、それをBytesArray経由でBitmapDataとして読み込んでサイズ制限迂回してるっぽい。
使い方はまずインスタンス化してcreate()。これで中に指定サイズのBitmapDataを作ってくれる。以降はインスタンスのbitmapDataプロパティから巨大BitmapDataにアクセスできる。これだけ。
ただ巨大なBitmapData作ると生成するのに時間がかかるから、BitmapDataUnlimitedEvent.COMPLETEイベントを待ってからアクセスする。これだけ注意。
[drag] or [double click anywhere]
Wonderfl使ってレンダリング実験してたのが一旦完結。クソ重いから公開するのどうしようかと思ったけど、静止画生成用のエンジンとして見切って作ってたからまぁいいや。
一応操作としてはドラッグ、もしくはダブルクリックで自動操縦になる。
で生成される静止画はこんな感じ。
あとついでにB0とかB1ぐらいの大判出力用にBitmapDataの高解像度出力する方法を模索してるんだけど、BitmapDataの大きさ制限のせいでなかなか効率のいい方法が見つからない。
一応今は2880pixel x 2880pixelのBitmapDataを複数作って目標のサイズを覆うようにタイリングして、drawする時はそれぞれのBitmapDataにSpriteを枚数分何度もdrawしてるって状態。そのせいですんごい処理負荷高い上に、書き出した複数の画像をあとからPhotoshopで合成しないといけなかったりしてすんごいめんどくさい。どうにかならんもんかね。
追記:
上のネットで公開してるバージョンはスクリーンサイズのBitmapDataにdrawしてるだけだから重いのは他が原因。
まずは追従してくる点を順番に線で結んでみる。
次は結ぶ順番を変えてみる。
線で結んでできた面を塗りつぶしてみる。
フレームレートを上げて、点の数を増やして長くしてみる。
一定の長さ以上縮まないようにしてみる。
Y軸方向に重力を加えて、多少伸縮するようにして弾力を持たせてみる。
奇跡がキャンバスに残るようにしてみる。
あとは色をうまいこと変化させたりして軌跡が良さ気に見えるように調整、調整。
aiファイル内の図形の各アンカーポイントの座標を取得する為に、JavaScript使ってIllustrator CS3ほじくってみた。付属の「Illustrator CS3 JavaScript Reference.pdf」が分かりにくくて階層構造が掴みづらかったのでメモ。
appがIllustratorの参照。
app.activeDocumentで現在開いてるファイルの参照をDocument型で返す。
Documetの中にはpathItems型でパスでできてるオブジェクトの参照が複数入ってる。
pathItemsの中にはpathPoints型でパスのポイントの参照が複数入ってる。
pathPointsの中にはpathPoint型でパスのポイントの参照が入ってる。
pathPointのanchorプロパティにアンカーポイントの座標が入ってる。
要するに現在開いてるファイルの1個目のオブジェクトの1つ目のアンカーポイントのx座標を取得しようとした場合は、
app.activeDocument.pathItems[0].pathPoints[0].anchor[0]
になる。ふ、深ぇ。
あとは全部の座標をテキストで出力してasにコピペすれば図形をコピーできる。この時Illustratorのy座標は下が0なので上下反転しとくこと。
年始の膨大に余った暇な時間にかまけて年賀コンテンツを作りました。
そろそろ全部届いただろうと思うので、というか公開すんの忘れてた。
ちなみにマウスクリックしながらドラッグしたらタマがでかくなります、ええ。
送ったのは下の通りアドレスだけを記載したハガキ。いちいちURL打つのめんどくせぇよ言われました。ごもっとも。
ようやく本格的にAS3弄りはじめた。
んでカスタムクラスからstageにダイレクトでアクセスできないとかなにこれな状況でいきなり実家帰りたくなったりしたけどstageに間接的にアクセスするクラスをこしらえてどうにか踏ん張った次第。
やっぱDisplayListまわりがまだつかみきれなくて四苦八苦。
以下コード。
前回、前々回からの続き。もう一個バリエーションでけた。
とりあえずこのシリーズはいったん完結かな。
全然関係ないけどFace37のType Trumps買ってみた。こんなんもっといっぱいあってもいいと思うよ。自分で作ったろかしら。
Paypalのアカウント作ってから海外の物でも気軽に買えるようになってますます散財する。