Posted by yamada on 2010/02/27 – 01:38
Filed under AS3, Flash
Tagged as AS3, Flash, Shift_JIS, XML
「AS3のShift_JISのXML読み込みにバグ」という問題でかなりハマったので、メモのためのエントリです。
Shift_JISのXML読み込みで問題発生
『AS3でShift_JISのXMLを読み込む』という話があった時点で、「え!?Shift_JIS?なんか怖いので、UTF-8にしてください」と野生の勘で言ったものの、根拠がなくて却下されていました。
で、開発終盤。
なぜだかうまく読み込めない、という問題が大きな問題となりつつあり、当初は通信ラグとかサーバ側がおかしいんじゃないのか?とかそういう感じで調査していたのですが、調べていくと、「AS3でShift_JISの大きなサイズのXMLを読み込むとうまく読み込めないことが発生する」というバグ情報にたどり着きました。
野生の勘は的中でした。
21世紀も1割過ぎたんだから、もう新規案件の通信時文字コードはUTF-8で統一しようよ、と心の底から思います。
Shift_JISのXMLを問題なく読み込む方法
さらに調べると、どうやら回避策があるということがわかり、具体的には下記のブログエントリを参考に回避することが出きました。
内容を説明すると、バイナリフォーマットで通信し、それをByteArray→UTF-8の解釈でStringに変換→XMLという流れで解釈してあげれば問題ない模様。
// ロード開始コード.
var _loader:URLLoader = new URLLoader();
_loader.dataForamt = URLLoaderDataFormat.BINARY; // ←ここが重要.
_loader.addEventListener( Event.COMPLETE, onLoadComplete );
_loader.load(new URLRequest( _path_to_load_ ));
// ロード完了後の処理.
var bytes:ByteArray = ByteArray( _loader.data ); // 型キャスト.
var xml:XML = new XML( byteData.readMultiByte( bytes.length, "shift-jis" ) );
この流れでうまく行くというのは、おそらく、自動でXMLに変換するときに文字コード判定がバグってしまう、ということなんだと思います。
[AD]
↓ヘッドフォン入出力の分岐用に欲しい。というか、ミキシングできるらしく試してみたい。
↓フタ付き小物入れ部分が魅力的だったりするUSBハブ。箱の中にも端子があったら最高だった。

huBox HB-029
Amazon価格:¥ 1,280
カテゴリ:Personal Computers
発売日:2010-03-01
Posted by yamada on 2009/12/21 – 18:45
Filed under AS3, Flash
Tagged as AS3, christmas, Flash, web, Xm.as
Xm.as 2008
去年のクリスマス前のことですが、「クリスマスに、Xm.asというファイル名でActionScriptで何かをやろう」と名前先行ネタ企画思い立ちblogに宣言をして、24日に公開していました。

ちょうどWonderflがスタートした時期だったこともあって、そこで公開していました。
Xm.asは別に人が参加してくれたわけでもなく、完全な一人遊び。
そのときの仕事で凝り固まっていた頭をほぐしたいということで、普段の仕事とは全く違うことで楽しんで作っていたのです。
Xm.as 2009
あれから1年。Xm.asのこともちょっとは考えていたのですが、でも今年はさらに忙しい時期だしなぁ、と何となく考えないようにしていました。
そんな先日、海外のecardサイトの方から「うちのecardサイトで使わせて欲しい」というメールが来ました。
コードも公開しているから使おうと思えば使えるのに、俺がMITライセンスにしていなかったり(All Rights Reservedにしています)したのでその点で気にしてメールしてくれた心意気がうれしくて、OKだよ、と返事しました。(英語が苦手なので、そこは友人に助けてもらいました…)
なんと、そのメールを送った3時間後、「サンキュー!載っけたよ!」的なメールが返ってきました!
それが下記のモノ。

このメールを機に、wonderflのXm.asを見てみたら、ここ数日で突然多くの方がfavoriteとして登録してくれていて驚きました!
どういう形であれ、作ったものに反応してくれる人がいるというのはうれしいですねー!
俺にとってはちょっと早いクリスマスプレゼントという感じですらあります。
その早さに俺も乗っかって、今年も何か作ろうかなー。
[AD]
↓レゴのクリスマスセット、これは欲しい!
↓最近出たWonderfl本。ちょっと読んでみたいな。
Posted by yamada on 2009/09/25 – 23:23
Filed under AS3, Flash
Tagged as AS3, Flash, Wonderfl
Flash(ActionScript3)のTextFieldの話。
TextFieldの高さを内容に合わせる
知りたかったのは、TextFieldの高さを、その内容に合わせて最適な高さにすることができるのか?ということ。
結論から言うと、できたので、まとめておきたいと思います。
要点は以下のようになります。
- TextFieldにはtextHeightというテキストの高さを取得するパラメータが存在する
- しかし、実際のTextFieldの高さはtextHeightに上下2pixelずつ足す必要がある
テスト@wonderfl
TextFieldを入力可能にして配置し、その内容の変化に合わせて、高さ調整を行うテストコードを書きwonderflにアップしてみました。
ちょっと問題になったのは、どのイベントで処理を行うか、ということ。
TextEvent.TEXT_INPUTで一見大丈夫そうでしたが、2つの問題が発生しました。
一つ目は、日本語入力で一気に行を超える文字を入力したとき、スクロールの問題が発生すること。しかしこれはEvent.SCROLLでキャッチして、TextField.scrollV=1; と強引に戻すことで対応は可能でした。
二つ目の問題は、BackSpaceキーで削除したときのこと。これは対策が思いつきませんでした。
イベント対応はEvent.CHANGEで
そこで元々キャッチしていたイベント自体が問題なのでは?と思い別のイベントで試したら問題なくTextFieldの高さを更新することができました。
そのイベントとは、Event.CHANGE。
これなら日本語の時もBackSpaceで削除したときでも問題なくイベント処理で高さ更新ができました。
テストコード
Wonderflに投稿したコードを以下にも貼り付けておきます。
Read More »
Posted by yamada on 2009/09/13 – 11:00
Tweenerを使わない理由
前回のエントリでTweenerの使い方のメモを書いたのですが、個人的にはもうTweenerは積極的には使わない予定です。
Tweenerのスペックが他のtweenライブラリに比べてそんなに速くない、ということと、今年の6月にTweenerは開発終了宣言されたから、という2つの十分な理由があるからです。
ただ、同一プロジェクトで他の人が書いたコードでTweenerが使われていたとき、スペック的にそれほど高速なtween処理が求められていなければ、それを外して置き換えるとかはしない。そういう場合にTweenerの使い方は知っておいて損はないと思うのです。
Tweener開発終了のエントリを訳された下記エントリがわかりやすいのでリンクしておきます。
要は設計が古いから過去を引きずりつつの開発は無理がある、ということらしい。
今はTweenLite/TweenMax
で、現在の話題。
私が最近使っているtweenライブラリはTweenLite/TweenMaxです。
前回のコラムで自前パラメータをTweenerでtweenさせるときの手順を書きましたが、TweenLite/TweenMaxならTweenerのように面倒な設定は要りません。
TweenMaxはTweenLiteの上位バージョンですが、たいていのことはTweenLiteで間に合い、こちらの方がパブリッシュしたときのサイズも小さくなるので、TweenLiteのみ使うことが多いです。
サンプルコード:yoyo text
前回のエントリで書いたAnimTextを動かすコードは、TweenLiteを使った場合、以下のようにシンプルに書けます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| package {
import flash.display.Sprite;
import flash.events.Event;
import gs.TweenLite;
[SWF(backgroundColor="#aaaaaa", width="400", height="200")]
public class Main extends Sprite {
private var _animText:AnimText;
// TweenMaxでカスタムパラメータをtweenさせるデモ.
public function Main():void {
_animText = new AnimText();
_animText.y = 100;
addChild( _animText );
// start animation yoyo.
tweenFunc0();
}
// yoyo (go left)
private function tweenFunc0() :void
{
TweenLite.to(_animText, 1,
{ myParam:0, onComplete:tweenFunc1 }
);
}
// yoyo (go right)
private function tweenFunc1() :void
{
TweenLite.to(_animText, 1,
{ myParam:300, onComplete:tweenFunc0 }
);
}
}
} |
TweenLite/TweenMax
こんな感じでとても使いやすいtweenライブラリのTweenLite/TweenMaxなのですが、気になるところが二つあります。
一つはファイルの個数。
Tweenerは13個だったのですが、TweenLite/TweenMaxは57個!
もちろん、使わないクラスは読み込まれないので、必要ないものは削除してもいいのですが、それはそれで何が必要かを確認する必要があり面倒。あとでeasingの種類とか変えたくなるかもしれないですしね。
実害はないのは分かっているのですが、svnとかにAddするときに、ファイル数が多いことだけがとても気になるのです。
もう一つはライセンス。
TweenerはMITライセンスなので、商用でも気にしないで使うことができます。
一方、TweenLite/TweenMaxはちょっと特殊で、基本的に無料なのですが、Flashのコンテンツユーザに課金する場合には有償となるようです。
このあたりは、「うむるむ -[ GreenSock ] TweenMax のライセンスまとめ- by cda244」に詳しく書かれているので、商用で使われる方は読んでおいた方がよいかと思います。
未来の話
今後のtweenライブラリ、ということで気になっているのは、BeInteractive!のyossyさんが作っておられるBetweenAS3。
まだDraftページ(BeInteractive! [BetweenAS3 (Draft)])位しか説明ページはないのですが、svnリポジトリがあるので、testディレクトリとか見てみたらいろいろと分かりそうです。
最後に気になるActionScript本を紹介。