Recently in ActionScript3.0 Category

わんだふるにゃんだふる

| | Comments (0) | TrackBacks (0)
 
久しぶりに書いてみた!

wonderflが凄いね。
ってみなさん言ってるからあえて言うのもアレだけど...
なにがいいって共有できるのがいいね。
他の人のが簡単に見れるし、編集できるし。
簡単すぎて焦るね。

一体これはどうなっているわけ??



http://wonderfl.kayac.com/code/d57f586c04294a7d920bd6714815c78dde978a5c

リサジュー曲線

| | Comments (0) | TrackBacks (0)
 
boostworthyisryantaylorさんのエントリに触発されて、リサジュー曲線を書くフラッシュ作ってみた。

これはおもろいな〜
こっからインタラクティブになったらいいね。
コードはたったこんだけ。
変数aと変数bをいろいろ弄ってみると面白い。

var A:Number = this.stage.stageWidth / 2;
var B:Number = this.stage.stageHeight /2;
var a:Number = 20;
var b:Number = 30;
var deg:Number = 0;
var nTime:Number = 0;
var step:Number = 0.1;
var cx:Number = this.stage.stageWidth /2;
var cy:Number = this.stage.stageHeight /2;

var xPos:Number = A * Math.sin(a * nTime + deg) + cx;
var yPos:Number = B * Math.sin(b * nTime) + cy;

this.graphics.lineStyle(1);
this.graphics.moveTo(xPos,yPos);

this.stage.addEventListener(Event.ENTER_FRAME, enterFrameAction);

function enterFrameAction(e:Event):void{
	nTime+= step;
	xPos = A * Math.sin(a * nTime + deg) + cx;
	yPos = B * Math.sin(b * nTime) + cy;
	this.graphics.lineTo(xPos,yPos);
}
lissajou1.png

lissajou7.png

lissajou5.png
前のエントリに書いたShift_JISの解決法が見つかったのでメモ

useCodePageをtrueにするのではなく、バイナリでByteArrayに読み込んで、readMultiByteでShift_JISとして読めばよいみたい。
以下にサンプルを載せときます。サンプルではScrollBarのコンポーネントを使ってます。


 Custom Arguments...)
	*/
	public class sjisLoader3 extends Sprite
	{
		public var area_txt:TextField;
		public var scrollBar:UIScrollBar;
		private var urlLoader:URLLoader;
		
		private const DATA_PATH:String = "data/sjistext.txt";
		
		public function sjisLoader3()
		{
			urlLoader = new URLLoader();
			urlLoader.addEventListener(Event.COMPLETE, _loadedData);
			urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
			urlLoader.load(new URLRequest(DATA_PATH));
		}
		
		private function _loadedData(e:Event)
		{
			trace("loaded!!uho");
			
			var byteData:ByteArray = new ByteArray();
			byteData = ByteArray(urlLoader.data);
			var txtData:String = byteData.readMultiByte(byteData.length, "shift_jis");
			
			area_txt.text = txtData;
			scrollBar.update();
		}
	}
	
}
これを使えば色々な文字コードからUTF-8に変換できる見たいですね。逆はできないけど。

【AS3】Timerについて

| | Comments (0) | TrackBacks (0)
 
AS3になってタイマーが登場したけど、設定した間隔で正確に処理を実行しているものだと思ってた。

しかし、タイマーが実行する関数内で時間のかかる処理を行った場合、その処理が終わったタイミングから設定した時間後に次の処理が行われるようです。

つまり、
timer:Timer = new Timer(1000, 0);
timer.addEventListener(TimerEvent.TIMER, _timerAction);
timer.start();
として実行すると、最初の一回目は1000ミリ秒で実行されるが、_timerAction内の処理に600ミリ秒かかると次の実行は1600ミリ秒後になってしまうということ。設定した間隔に対して正確に実行することはできないので、アニメーションであればenterFrame内で経過時間から処理すべき数値を計算すれば良いようですね。

trick7様
を参考にさせていただきました。


しかし、trick7さんのエントリーの日付は2006年11月...
自分は一年半ぐらい遅れてるんですね。。
もっと頑張らなくては。。。

ActionScript3.0のバグについてメモ

データ量が比較的多めのXMLで文字コードがShift-JISのものは、AS3では正しくパースできない読み込まれないことがあるようです。
useCodepageとかも無意味です。

成功する場合もあれば、失敗する場合もあります。
失敗した場合は、
「1088ルートエレメントに続くドキュメントのマークアップは整形式でなければなりません。」
というランタイムエラーが発生します。
失敗した場合、XMLが読み込まれた時点でXMLを出力すると、最後に謎の文字列が追加されていました。


これは、、困りましたね(笑)


追記
useCodePage = trueをfalseにするともちろん文字化けは起こりますが、謎の文字列が付与されることはなくなりました。
AS3でShift_JISを取り扱うこと自体にバグがあるようですね。
XMLについてのみ言及していましたが、テキストファイルなどでも同様のバグがあります。
また、サイズの少ないファイルにおいてこのエラーは発生しません。

どうしてもShift_JISファイルの読み込みが必要な場合は、useCodePage=trueにはせず、ファイルパスをphpなどに渡して、エンコードした文字列を受け取る形が良さそうです。

【AS3】XMLについて

| | Comments (0) | TrackBacks (0)
 
AS3のXMLクラスについて。

XMLクラスには二種類ある。

・XMLクラス
ルートノードがひとつのもの

・XMLListクラス
ルートノードが2つ以上のもの

1つのXMLをロードすると、2種類のクラスのインスタンスが適切な形で生成される。

以下の様な例で考える。

<data>
  <item href = "htttp://www.test1.com" >
  <item href = "htttp://www.test2.com" >
  <item href = "htttp://www.test3.com" >
</data>

xml.dataはXMLListのインスタンス
xml.item[0]はXMLのインスタンス
となるようだ。

ちなみにtraceをかけると内部的にはtoString関数が実行される。
これら二つのクラスのtoString関数は、XMLをインデントを付けて文字列として返すので、traceするとXMLがきれいな形で表示されるというわけだ。




MouseEvent.MouseMove

| | Comments (0) | TrackBacks (0)
 

マウスの動きに合わせて何かを行う場合、MouseMoveを使うより、onEnterFrameで前のmouseX,mouseYと比較して動かす方がスムーズなようだ。

 

MouseMoveで行った場合Flashのツール上ではスムーズに動作するが、ブラウザを介した途端動作が悪くなる。

MouseMoveの検出が甘いのだろうか。

 

onEnterFrameの場合はツール上とブラウザ上で変わりはない。

KeyboardEventについて

| | Comments (0) | TrackBacks (0)
 

ようやく今日から本格的にAS3の勉強をすることにした。(遅

去年は研究とデザインの仕事ばっかりだったので、全然flashができなかった...orz

んで、去年アメリカ行ったときに買ってきたActionScript3.0 Cookbookを片手に進めていくのだが、Flash CS3が発売される前に執筆されたようで、Flexで開発するのが前提の書き方をされている。

Flexもいじれるようにならなきゃな...

 

まずサンプルにaddChildの記述がないものがあり、そこでつまづく...

これじゃ表示できねーじゃん...w

Flexで実行すればできるのだろうか?

 

次に、KeyboardEvent。

イベントをフォーカスしなきゃいけないから

stage.focus = this

って書きなさいって書いてあるんだけど、ここでエラーがでる。。

サンプルは明らかにSpriteを継承したclassのコンストラクタ内でstage.focusとやっているのだが、Spriteがstageのプロパティを持っていないとかそんな感じかと思ったが、どうやらstageがnullらしい。

インスタンス生成時にstageを引数で渡し、

stage.addEventListener(KeyboardEvent.KEY_DOWN, keydown);

とすることで解決。

サンプル実行できてないし、focusも必要なかったのですが。。てかFlashのヘルプに載ってるサンプルでも同じ現象が起きたのだが...

どういうことなんだろうか。。謎w

しかし、stage以外にKeyboardEventを設定すると失敗する。

stage以外ではKeyboardEventは設定できないのだろうか...

う~む、AS2もマスターできてない自分にとっては前途多難。。

Archives