仕事でAir for ios/Androidでアプリを制作していました。
このアプリでTwitter投稿機能を実装したのですが、いろいろ試行錯誤したのでメモ。
仕事でAir for ios/Androidでアプリを制作していました。
このアプリでTwitter投稿機能を実装したのですが、いろいろ試行錯誤したのでメモ。
Firefox3.6だけプリローダーが終了せず原因を調査したところ、
XMLから受け取った外部画像のパスが空のとき、
IOErrorEventによる読み込み失敗が取れていなかった。
IEやChrome,Firefoxも3.5等では読み込み失敗として取れていたのに・・・、
ハマったのでメモしておく。
プラットフォーム依存しないことが大きな売りである筈のFlash君が
Windows7とVistaでのみ動かない事態に遭遇し、
解決に多大な労力を費やしたのでメモ。
願わくば同じ境遇の人が検索で引っかかってくれますよう。
結論を述べると、Windows7とWindowsVistaのPCにサウンドの出力装置が接続されていないと、
SoundChannelがnullで返ってきます。
var sc:SoundChannel = sound.play(); //戻り値がnullらしい sc.soundTransform = new SoundTransform(0.5);//エラー if(sc != null)sc.soundTransform = new SoundTransform(0.5);//解決
イヤホン指したら普通に動いたときは狐につままれた気分でした。。。
イヤホンで検索したら出てきた。
http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=9794&forum=6
この大きさのFlashを作ることはあまりないかもしれませんが、対処方法のメモ書き。
外部XMLを読み込み表示するFlashのエンベッドwmodeを変更したところ、
下の方のテキストが表示されなくなりました。
調査したところ発生条件は、
でした。
対処法は以下のいずれか。
Flashの表示オブジェクトの限界が縦横2880pxらしいのでそれが関係していると思われる。
FlashPlayer10からはその制限が緩和されているため(参考)、
試してみたところテキストが表示されました。
該当のテキストフィールドにフォントを埋め込んでしまうのも効果あり。
表示されないだけで、文字列自体は入っているっぽかったので、
テキストを含むMovieClipのcacheAsBitmapをtrueにしたところ、これも効果あり。
今回はレギュレーションがPlayer8で固定、
日本語も入るのでフォントを埋め込むと容量が大きくなりすぎるということで、
3番の方法で対処しました。
3Dの物理演算コンテンツのデモを作ることがあったので覚書。
物理演算のライブラリは数あれど、何も分からなかったのでとりあえず3D対応を謳っていたWOW-Engineを選択。
調べていく中で分かりましたが、物理演算系ライブラリは基本内部計算のみ、表示部分は自前か他のライブラリを使用する必要があるため、 例えばよく知られたBox2Dのような2次元物理演算のライブラリを利用して、3Dでの物理表現を実装することも可能です。
比較なんぞしていないですが、表現によってはそちらの方が動作が軽かったりしそうですね。
ここでは導入方法と実装の考え方をざっくりと。
3Dエンジン部分はPapervision3Dを使用しました。
【導入方法】
まず公式サイトからファイルを入手します。
そのままパブリッシュしようとすると、DListNode云々と怒られるので、ここからpolygonalクラスというのを入手して配置する必要があります。データ構造を扱いやすくするライブラリだそうです。
Twitterと絡めた案件がありそうなので、TwitterAPIを使ったサンプルを作ってました。
簡単にいろいろデータが取れるんですね。
基本は、
http://twitter.com/xxxxxxx/xxxxxxx/(ID).xml
(ID)にはユーザー名が入り、XML形式の他『.json』とすれば、
JSON形式でデータが返ってきます。
http://twitter.com/statuses/friends/TNKHRYK.json
とすれば、自分がフォローしているアカウントの情報が取得できます。
urlLoader.addEventListener(Event.COMPLETE, jsonLoadComp); urlLoader.load(new URLRequest("http://twitter.com/statuses/friends/TNKHRYK.json")); private function jsonLoadComp(e:Event):void { var json:String = URLLoader(e.target).data; var content_json = JSON.decode(json); var total:int = content_json.length; for (var i:int = 0; i <total ; i++) { trace("フォローしている人のサムネイル画像URL" + content_json[i].profile_image_url); } }
フォローしている人のサムネイル画像のURLをJSONデータから取り出しています。
http://twitter.com/statuses/friends/TNKHRYK.json?count=50
データの数を制限するには上記のようにクエリを指定します。
こちらの日本語訳仕様書を参考にさせていただきました。
Twitter API 仕様書
・・・と、サンプルを制作してアップしたところ、クロスドメインのことを完全に失念していました。
ローカルで動かす分にはFlash単体で支障ないですが、
webにアップすると別ドメインからのデータ参照に制約がかかります。
これを回避するためにデータを中継するPHPを置くなどの対策が必要となるのでした。
以下参考にさせていただきました。
FlashでTwitterの発言を取得してみる