12月 25

時間の処理には、trick7さんのTeraClockを使わせてもらいました。

キモは、

(TextArea).verticalScrollPosition = (TextArea).maxVerticalScrollPosition

だけです。

デバッグ用に、TextAreaに変数とかを表示させたいときに、スクロールバーが付いてこないと非常に見づらいので、上の1行を追加すると便利です。

[as]
package
{
	import fl.controls.Button;
	import fl.controls.TextArea;
	import flash.display.MovieClip;
	import flash.events.*;

	import com.trick7.utils.TeraClock;
	/**
	 * ...
	 * @author IRONHEARTS
	 */
	public class Main extends MovieClip
	{
		private var _ta1:TextArea;
		private var _ta2:TextArea;
		private var _reset:Button;
		private var _tc:TeraClock;

		public function Main():void
		{
			addEventListener(Event.ADDED_TO_STAGE, init);
		}

		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);

			_ta1 = TextArea(getChildByName("ta1"));
			_ta2 = TextArea(getChildByName("ta2"));
			_reset = Button(getChildByName("reset"));

			_reset.addEventListener(MouseEvent.CLICK, resetHandler);

			_tc = new TeraClock;

			_tc.addEventListener(TeraClock.SECONDS_CHANGED, secListener);

		}
		private function resetHandler(e:MouseEvent):void
		{
			_ta1.text = _ta2.text = "";
		}
		private function secListener(e:Event):void
		{
			var s:String = _tc.hours2 + ":" + _tc.minutes2 + ":" + _tc.seconds;

			_ta1.text += s + "\n";
			_ta2.text += s + "\n";

			_ta2.verticalScrollPosition = _ta2.maxVerticalScrollPosition;
		}
	}
}
[/as]

ソース必要な人はドウゾつtascroll.fla,Main.as

Popularity: 9% [?]

written by ANN

12月 18

一つ前のエントリーの続きで、Flashでテキストエディタを作成中。編集したテキストおよびTextFormatをXML形式に変換して、サーバにPOSTし、保存する処理を作成中に、上記のエラーが発生。

Flash側からPHPへのPOSTについては、

AS3とPHPの連携 – 基礎 – memo.at sonic

を参考にさせてもらう。たしかに、load()でPOSTするというのには違和感を感じるが、これしかないのでしょうがない。(Socketベースで通信する場合はセキュリティポリシーファイル/サーバが必要でさらに面倒)

[as]
// テキストフィールドのフォーマットをXMLに落とし込む
 var txtxml:TextField2XML = new TextField2XML(_targetText);
 var v:URLVariables = new URLVariables();
 v.body = txtxml.getXML();
 var req:URLRequest = new URLRequest("ポスト先のURL");
 req.data = v;
 req.method = URLRequestMethod.POST;
 var loader:URLLoader = new URLLoader(req);
 loader.dataFormat = URLLoaderDataFormat.VARIABLES;
 loader.load(req);
[/as]

PHP側は、$_POSTで受信したデータをDBに保存する処理を記述。

$data = $_POST["body"];
// ~DBに書き出す処理・省略~
exit;

で、FlashIDE上でプレビューしてみると、

Error: Error #2101: URLVariables.decode() に渡される文字列は、名前/値のペアを含む、URL エンコーディングされたクエリー文字列でなければなりません。

という、エラーが発生。おかしいなぁ。ちゃんとURLVariablesで値を渡していて、URLエンコーディングされたクエリー文字列が生成されてるんだけどナーと思い、悩むこと30分。

やっと分かった。

呼び出し時にエラーになってるんじゃなく、呼び出した後にエラーになっている。つまり、

[as]
loader.load(req);
[/as]

で、呼び出すURLからのレスポンスが、key=value形式になってないとエラーになるのである。

しかし、POSTしても別にレスポンスを見ないケースもあるだろうにネー。

しょうがないので、php側でexitする前に echo “ret=true”;とダミーのレスポンスを返すことにする。コレでエラーは無くなった。

TextField2XMLのソースは、まだ調整中なので公開できないけど、XMLの読み書きが完了したら、サンプルとして公開する予定。

それにしても、as3になってから、URLへのGET,POSTや、FlashVarsへのアクセスが煩雑になって面倒この上ない。だれかas2互換のラッパー関数とか作ってないかな。ついでにJavaScript互換関数とかPHP互換関数とかあると嬉しいな。

知っていたら教えてください。

Popularity: 15% [?]

written by ANN

12月 10

flash-texteditor1

JavaScriptベースのエディタは沢山あるが、最終的に編集した結果を画像として出力したいので、Flashで作ってみることにした。最終的に目指すのは、

●編集結果を画像(jpeg)として保存できるようにする。
●編集内容もMySQLに保存しておき、再編集できるようにする。

とりあえずは編集できるTextFieldと、フォント・サイズ・色の選択を作ってみた。

>>>>>続きを読む

Popularity: 6% [?]

written by ANN

10月 02

先日、とあるサイト内のFlashのデモを作成する。手元のマシン・ブラウザでは問題ないが、先方のPCだと、Flash部分が空白もしくは、1回だけ表示されるというような不安定な動作に。

ムービーとしては,A1.swf,A2.swfとファイルが2つあり、メインのswfが、その2つを交互に読み込んで再生。片方の再生が終わったら、もう片方を再生・・・と、特に難しいところも無いはず。

作成する時間が無かったので、loadMovieでswfを読み込んで、rootのonEnterFrameで再生フレームをチェックするという方法をとっていた。
手元では問題なかったので、そのままアップしたが、、なぜか先方では表示されないとの連絡あり。

Playerのバージョンの問題かと思ったがそうでもない。凝ったことはしてない故、原因が分からなくてしばしハマる。

nabeさんとSkypeで相談しながら、MovieClipLoaderに置き換えてみる。AS2.0はリスナーとスコープがAS3に比べてややこしいので、マンドクセ(´A`)手を抜いたのがトラブルの元だった。

MovieClipLoaderに修正したものは、先方のPCでもちゃんと表示された。
詳しく聞いてみると、以前のものでは、Flash部分が空白で、CPU負荷・メモリ消費も上がり、どうも暴走してるような感じだった・・・と。

詳しく検証してないけれど、この現象から想像するに、loadMovie後のフレームのチェックが、ロードが終わらないうちにやってしまい、正常に判断できず、(ロジック的に)次々のloadMovieされてしまい、無限にロードされてしまったような動きになったんじゃないかと思われる。

A1.swfもA2.swfもファイルサイズが小さかったので、ロードは一瞬で終わるだろうと高をくくっていたのがマズかった。
ロードが終わってないうちに次のロード、そのまた次のロードと、延々繰り返していたようだ。

ソースコードは恥ずかしすぎるので非公開です(///

教訓。

 忙しくても(手を抜いて)loadMoiveは使ったりしない。
 ちゃんとMovieClipLoaderを使おう!

Popularity: 13% [?]

written by ANN

7月 03

くぅー!まんまとハマってしまった…。

FlashPlayerのバージョンは8以降を対象にしようと思って、AS2.0でSWFを作成していた。その際、パブリッシュの設定でFlashPlayerのバージョンを8にするのを忘れて、9のままで作成していた。

作ってプレビューした時には問題なかった。その後、Playerのバージョンを確認したら9になっていたので8に設定してパブリッシュしたら、今まで削除されていたMCが削除されない!Playerのバージョンを変更した際には他にもいくつか変更していたので、原因の究明にとまどった。後でPlayerを9にするとちゃんと削除されるなーと思いながら、8でも削除されるように修正しなくちゃならないので、いろいろ調べたところ…

[FLASH CS3のヘルプ]より

メモ : バージョン2 のコンポーネントを使用している場合は、このメソッドを使用しないでください。ステージまたはライブラリにバージョン 2 のコンポーネントがあると、getNextHighestDepth() メソッドの戻り値が 1048676 になることがあります。この深度は、有効な値の範囲外です。バージョン 2 のコンポーネントを使用している場合は、バージョン 2 のコンポーネントの DepthManager クラスを必ず使用してください。

むむむ!attachMovie()するときにgetNextHighestDepth()使ってますよ。んで、削除しようとしているMCの深度を調べると見事に1048676。バージョン2のコンポーネント…、ああ、はじめ使ってました、今は使ってないけど…。何だよー、Buttonコンポーネントがライブラリにあるだけで、こんなことになるのかよー。

Buttonコンポーネントをライブラリから削除するとまったく問題なく削除された。こんな罠作るなよー…。

他の対処方法としては、getNextHighestDepth()を使っていて、且つバージョン2のコンポーネントがライブラリにある場合は削除対象のMCをswapDepths()を使って、-16383~1048675内の深度に再設定してremoveMovieClip()するか、removeMovieClip()を使わずにunloadMovie()を使う。

FlashPlayer9だと深度が1048676でも削除されていたのは、9の場合は有効な深度が広がっているってことかなー?

Popularity: 12% [?]

written by joy-pop

6月 05

[ActionScript3.0] Sprite/MovieClipとかをランダムに動かす(徘徊させる) | moriBlogさんの動きを使わせてもらって、ちょっと作ってみた。


※クリックしてください。

虫っぽいのが動いたあとに、軌跡を付けたかったんだけど、ビットマップとかマスクとかがいまいちわかってなくて挫折。
その辺が完成したらソース載せます。

Popularity: 11% [?]

written by ANN

6月 04

一つ前の


Yahoo ASTRA LayoutContainersを使ってフォント一覧パネルを作るに、フォントサイズを変更するためのスライダーを付け、ソース内の不要なコードを消した物を作りました。


直リンはこちら。font_pane2.swf

ドキュメントクラス(fontPane.as)と、ヘッダ部分(fontHeader.as)と、フォント一覧(fontMenu.as)と、プレビュー部分(fontRightArea.as)にて構成されているけれど、ポイントはBorderPaneを継承したドキュメントクラスなので、その部分のソースのみ掲載。(全ソースはページ最下部にてダウンロードできます)

>>>>>続きを読む

Popularity: 14% [?]

written by ANN

6月 03

Yahoo! Developer Network – Flash Developer Center – ASTRA Flash Componentsのコンポーネントって、結構便利と思うんだけれど、本家のドキュメント以外にほとんどドキュメントがない。

みんな自分でがりがり書いてるんだろうか。それともFlexだとちょちょいのポンなんだろうか。
素のFlashは、いわゆるGUIのコンテナとしての機能が低すぎると思う。

ということで、YahooのLayoutContainersを使ってなにかできないかーと考えていて、とりあえずフォント一覧を作ってみた。

フォント一覧であれば、別にYahoo LayoutContainersを使わなくても割と簡単にできるけど、Yahoo LayoutContainersを使う利点としては、

●レイアウトの変更を柔軟にできる。定番なものであれば、座標していせずとも、だいたいレイアウトできる。
●ステージの拡大縮小への対応が簡単。
●HTMLでいうところのDIVみたいな間隔で、まさにコンテナとして使える
●その他いろいろあると思うけど、また勉強中。

で、まだかなり完成度低いけど、できたのがこちら。

swf単体で開くと、リサイズにも対応してるのが分かると思います。
font_pane.swf

今回使ったのは、
・BorderPane
・HBoxPane
・VBoxPane
の3つ。

あと、フォントサイズの変更機能と、クラスのコードを整理したらソースアップしようと思う。
というか、Yahoo のコンポーネント使ってる人いないのかなぁ~

[ 追記 ]
スライダーでフォントサイズを変更できるもの+ソースを追加しました。


Yahoo LayoutContainersでフォント一覧・改良&ソース

Popularity: 14% [?]

written by ANN

5月 29

昨日書いた[AS2.0]Tweenerを使ってチョ~簡単に彩度・明度・色相・コントラストを変更する!のAS3.0版だよ! ゆっくりしていってね!

まずは同じく結果のswfから。

AS2版と違うのは、値の変更がNumericStepperから、Sliderに変更になったこと。それによってコードもちょっと変わった。
しかし、実際、Slider使ってみると、コレ、かなり使い勝手悪いね。マウスが反応するエリアが小さいし、最小値・最大値、現在の値などの数値を表示させたい場合、手動でやんないとだめ。だれかもっと便利なスライダー作って~

AS2.0の時にあったバインディング機能があったら、超ラクなんだけどなー。なんでバインディングとかDataSetとか無くしちゃったんだろう。

上のswfのソースはこちら。

>>>>>続きを読む

Popularity: 36% [?]

written by ANN

5月 29

MovieClipのアルファ値は、そのままのプロパティがあるので変更は簡単なんだけれど、明度や色相・コントラストを変更したい!という場合、知ってる人は知ってると思うけど、知らないと結構大変。

実は超簡単な方法がある。Tweenerを使うのである。
まずは、AS2.0の場合を作っちゃうぞ!

さっそく、結果のswfをチェキラ!

数値を変更すると、上の画像の

  1. 彩度(saturation)
  2. 色相(hue)
  3. コントラスト(contrast)
  4. 明度(brightness)
  5. 明度(濃さ?)(tinBrightness)

を変更できます。

たとえば、グレイスケールに変換したい場合、彩度のNumericStepperをゼロにすると、簡易的にグレースケールに変更することができます(実際にはもっと調整した数値のほうが綺麗なグレイスケールにはるけどここでは省略。詳しくは
ColorMatrixFilterで画像をグレースケールにする(AS2.0)

明度(Brightness)と明度(濃さ)ではけっこう違う。実際にはtinBrightnessのほうを使いそう。

具体的な方法としては、Tweener 1.31以上から導入されたColorShortcutsを使うと超簡単です。
ライブラリのimport・初期化を除くと、1行でできます。

上記swfのソースは、

>>>>>続きを読む

Popularity: 43% [?]

written by ANN