[EV]spark project 勉強会#6

◆spark project 勉強会#6
2008/12/19

◆spark project近況
今月最近コミットされたもの
★HigeWheel
⇒swfwheel名称変更
クロスブラウザ対応に頑張ったライブラリ。
macにも安心な設計。
みんなもテストしてね。
そして不具合報告などのチケットも出してね。

★asdebugger
いろんなデバッガーを共通のインタフェースで使える。
便利なトレース

★e3engine for as3
ecma 3rdエンジンのas3実装

★overlayFlash
全画面支援ライブラリ
HTMLに重ねる感じの。
HTMLに設定を記載して、FLASHでメソッド実行
⇒使う!!

★grahoon
本日説明ありなので省略

★swfsize
swfの最小の幅、高さを決める。

★insertlabel
jsfl
キーフレームが打ってあるところにラベルを自動で連番でつける

★metasequoia(for away3d)
away3dをPV3Dに読み込むことができるライブラリ

◆flashcs4の紹介
設定パネル
ライブラリパス⇒SWCを扱えるようになります。
コンパイル速度が速く

定数の構成
やるかやらないかの設定ができるみたいな
条件付コンパイルなかんじ。
CONFIG::debugでfalseでtraceとか一気に消せる

◆graphoon
福山誠さん(fushan)

今の目標、教師をスパークさせる。
初等中等教育用のflash webな教材開発
現場での活用支援
asは教員に取得可能かどうか

gra@hoonとは
graphoon.org
flexのコンポーネント
数式からグラフを描画できる。

きっかけは
mathematica高い。。。
gnuplotやRってほどじゃない。。。
そもそもインスコできない。。。
WEBアプリが良い。。。

エンジンはD.evalというライブラリ

◆曲線の公式
e-s-jpさん
curveLib
(過去にjsfl,3個くらい作ってコミットしてます)

曲線をかけるクラスらしい。
curvegraphics.as
いろいろな形で書けるみたい(塗り、線、ポイントとか)

◆airアプリについて
青木さん
DB系のものをコミットしてます。

★airbuilder
AIR開発用のGUIのRADツールも自作(flex sdk用)
★rococo
sqlLite作成するairツール

★localemaker
ローカライズ用ファイル作成ツール
sqliteで入力の2度手間になりません。
簡単に多言語対応するってことみたい。

◆GCの再学習
yossyさん

自動でメモリを開放してくれる仕組み。
stage.addEventは開放されないよ!

上条さんのblogがよくまとまてるよ。

nullはあくまで参照
参照がきれたものをgcが削除

親から子がだめだとだめ。
子から親があってもだめ。
子から親ならremove要らず。

まぁ全部やればよし。

gcでも開放されない場合。
たんすの引き出しをひとつでも使ってると削除不可
コンパクションしてるよ

重い処理してると、GCキャンセル。

発生条件
新しいたんすを要求
たんすないの引きだしがすくないとき

GCが動いたときに咲く状するようにするには
親から子の参照をのこさない。

負担が低い場面を用意する。

小さいオブジェクトはつくらないほうがいい。

GC強制発動もできる。
負担が低くなったときに呼ぶ。

[AS]Threadでのjoin()について

以下のように書くとエラーだった。

1個の関数内で、ParallelExecutorを2個作る。例えばa,b。

function test(){
a:ParallelExecutor = new ParallelExecutor();
b:ParallelExecutor = new ParallelExecutor();
~省略~
a.start();
a.join();
b.start();
b.join();
}

b.join()をコメントアウトするので動くので、1個の関数内で複数joinはダメぽ。
また↓のように関数分けて、next()で移動してもOK(当然か)

function test(){
var a:ParallelExecutor = new ParallelExecutor();
~省略~
a.start();
a.join();
next(test2);
}
function test2(){
var b:ParallelExecutor = new ParallelExecutor();
b.start();
b.join();
}

以下、偉人からのアドバイスメモ(今はまだ全理解しきれてない・・・)
joinのときは A.hoge() -> B.join() -> B.joinMonitor.wait() という感じでBを待つ状態。
Queue的なときはA.hoge() -> B.checkPoll() -> (データが鳴ければ)B.monitor.wait() で待ち状態。
それぞれ waitしようとしたときに、Aがすでに何かの待ちになっているとそれはエラー。
Threadはクラスメソッド内でいろいろしていて、どこかの処理でwaitが呼ばれたときに、呼び元(今動いてる)のThreadを待たせるといのが基本動作。
呼ばれた人が呼んだ人を状況により待たせるイメージ。
あるスレッドは同時に1つのスレッドしか待てない。
逆にあるスレッドを待ってるスレッドは何個でも待てる。

//2009/1/17追記
joint()とsleep()は同時に使えないみたい。

[AS]singletonクラスについて

インスタンスをひとつだけしか生成できない仕組みは以下のようにする。

package
{
	import flash.display.Sprite;

	public class Singleton extends Sprite {
        public static var instance:Singleton;
        public function Singleton( pvt:SingletonEnforcer ) {
            init();
        }
        public static function getInstance():Singleton {
            if( instance == null ) {
instance = new Singleton( new SingletonEnforcer() );
}
            return instance;
        }
		private function init():void {
			trace("シングルトン");
		}
	}
}
internal class SingletonEnforcer{};//internal 同じパッケージ内でのみ参照可能

//アクセス方法
Singleton.getInstance().init();

参照元:ステージの参照とシングルトン #2

[AS]stageプロパティについて(取得する際の注意)

全てのDisplayObjectはstageプロパティを持っている。
ただし表示リストに追加されているDisplayObjectからのみ参照が可能。
addChild前や、removeChildしたDisplayObjectからは参照できない。

参考1:AS3 で stageを参照する場合の注意点:
参考2:ステージの参照とシングルトン #1

[AS][?]最初のフレームに書き出し、について

元記事

AS2で、attachMovieを使ってステージに配置するとき、リンケージプロパティの、最初のフレームに書き出しにチェックが入っているときの注意。
これは1フレーム目のフレームアクションよりも先に、attachMovieされてしまうということだろうか?
つまり1フレーム目のフレームアクションにローディング処理が書かれていても、先にattachされてしまっているために、attachした分の読み込み状況が確認できないという事態になるのだろう。

対処法は元記事に書かれているとおり。

ただ最初のフレームに書き出しにチェックを外した場合、ステージ上にattachするMCをあらかじめ配置しておかないといけない。

(attachの仕方はこちらもかなり参考になる。)

ということは改めてattachする意味ってあるのか?
最初からステージに置いとけなくてattachがmustなケースってどんなケースだろ。

>追記
クラスをリンケージしたMCを使うときは、このケースがmustっぽいかな。

[AS]staticの扱い方について

staticとすると、クラスインスタンスを作らなくてもアクセスできるようになる。
例えば、

//カスタムクラス:Test
package  {
		public class Test {
		static public var n:int = 100;
		static public var m:int = 200;
		public var q:int = 500;
		function Test() {
			 plus();
		}
		function plus() {
			trace("test:"+q);
		}
	}
}
//メインのタイムライン
trace(Test.n);
var test:Test = new Test();

出力は、
100
test:500
となり、クラスのインスタンスを作る前に直接に変数を値を取得できる。

使い道としては、子クラスから親クラスのプロパティ値を取得したいときとか。
でも、親クラスのプロパティがスタティックだらけになってなんか気持ち悪い気が・・・
(他に取得方法はあるのだろうか?parrentとか?)

あと使ってて気づいた点。
staticは関数にも使えるが、その際、そこで扱う変数もstaticの必要があるっぽい。
例えばさっきのカスタムクラスのfunction plusをstaticにすると。。。
qがstaticではないので、
未定義のプロパティqへのアクセスです、
と怒られる。

なので、qをstaticにすると大丈夫らしい。

//これでOK
package  {
		public class Test {
		static public var n:int = 100;
		static public var m:int = 200;
		static public var q:int = 500;
		function Test() {
			 plus();
		}
		static function plus() {
			trace("test:"+q);
		}
	}
}

よくわからんな・・・

[EV]Spark67 : Edge ActionScript Libraries メモ

12/16:渋谷

□そうめん:yossyさん
■概要的なお話
・非同期処理めんどい
・FPはシングルスレッドですから・・・
途中で止められない。
イベント駆動、イベントハンドラが必要

そこで、そうめんです。
・タスクシステム・・・擬似マルチスレッド
(JAVAスレッドをベースに。。。。JAVAのシステムと同等)
・処理のstop、分岐がOK
・コントローラー的に使うと便利かも!

■ライブコーディング時のメモ
・next(func)は関数内に一個だけ
(2個以上書くと、どんどん上書きされるだけ)
・画像読むときはLoaderThread
_loader = new LoaderThread(new URLRequest(‘http://○○.jpg’));
※_loader.loader:Loaderとなる
なので表示リストに追加する際は
containder.addChild(_loader.loader)
・細かくスレッドを分けて書くといいよ!
・ProgressBarスレッドもある。
・例外処理はerror(データ型,関数);
・関数(e:IOError, t=Thread){}
・例外処理の際にそこで処理をストップさせたいときは、next(null)と記述
・eventもスレッドでかける。(終了後は自動でremoveされる)
・Monitor機能は画像の読み込みスレッドと表示スレッドに分けるときに便利。

■スレッドのメリット
・非同期処理が同期的にかける。
→シーケンシャルに書ける。
・マルチスレッドのデザインパターンが適応できる。
ex)Producer-Consumerパターン
Producer-リソースを作る人、Consumer-使う人
あとMonitorとしてQueurも(ここをクッションに実行)
参考書:JAVAで学ぶデザインパターン マルチスレッド編 結城先生著
・オブジェクト式
画像読み込み
API
アニメーション

□IPhoneとFLASHのお話:uranodaiさん
AIR SANPOの人
■簡単なメモ
iphoneas:iphoneのマルチタッチをリモコンに、フィジカルコンピュート
GUIのカスタムはobjective-cの知識が必要
AIRのHTMLLoaderでストリートビューが観れた

[PHP,AS]FLASHで別ドメインのファイルを読む用

//PHP(read.php)
<?php
$rss = @file_get_contents('http://http://memo.393.bz/?feed=rss2');
print $rss;
?>

※もしくはこっちでもOK

<?php
//ファイルを開く(UNIXではモードを r に変更)
if (!($fileTxt = fopen ("consume.xml", "rb"))) {
die("ファイルが開けません。");
}
//ファイルの読み込み
while (!feof($fileTxt)) {
$vTxt = fread ($fileTxt, 4096);
}
//ファイルを閉じる
fclose($fileTxt);
//ファイルの出力
echo $vTxt;
?>
//AS(ステージにインスタンス名_txtのダイナミックテキストを配置)
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, xComplete);
function xComplete (e:Event):void {
var xml:XML= new XML(e.target.data);
_txt.text = xml;
}
urlLoader.load(new URLRequest("read.php"));

[AS]XMLとXMLListについて

//XMLからノードを抜き出したものがXMLListとなるらしい。

//抜き出したノードはXMLListに代入できる

var xml:XML=
<data1>
<node>Node1</node>
<node>Node2</node>
</data1>;
var xmllist:XMLList = new XMLList();
xmllist = xml.node;

//でもXMLに代入はできない。

var xml:XML=
<data1>
<node>Node1</node>
<node>Node2</node>
</data1>;
var xml1:XML = new XML();//XMLではダメ。
xml1 = xml.node;

//2008/1/15追記
//これならXMLとなる

xml1 = xml.node[0];

[EV]FLASH OOP 勉強会(数学的な行列の勉強)メモ

個人的な覚え書的なメモです。
他の人が読んでも意味わからんことでしょう・・・。

flash oop 勉強会 12月11日

■クスール。松村さん
勉強会は1年半ぶりくらい
今後は2ヶ月おきくらいにはやりたいなぁ、と。

■野中さん
出版記念の勉強会
行列を数学的に本気で勉強しよう。

本の中の数学編を今回掘り下げる。
本字のスライドは後日どこかにアップします。

■ベクトルについて
大きさと方向をもつ
大きさのみをスカラーという
スカラー倍とかあるよ
足し算と引き算はあるよ
でも掛け算はないよ。
⇒みたいなもので内積はある

※行列は”ベクトルのベクトル”といった考え方

■行列の乗算
計算方法は図のとおり。
交換法則は成り立たない。
計算方法から、行列を連立方程式であらわせる。
⇒行列の計算は機械的に解くことができる。
⇒これが行列を使うことの意義!!!!

正方行列はいくらでも掛け算可能
(フィルターもこんな感じでたくさんかけれるよ)

行列の掛け算は内積を作っていく感じ。
正方行列同士の掛け算はできるが、交換法則は成り立たない。

座標の変換
正方行列で列ベクトルを変換

単位行列:対角要素が1であとは0
単位行列との積は列ベクトルに変化がない。
つまり単位行列がデフォルト値ということになる。

拡大・縮小、回転はできるが基準点が常に原点になる(0,0)
色情報編集のオフセットを追加する要領で位置情報の3列目をプラス。

これらの行列変換ではパースのかけた変形はできない。
パースのかけれるdrawTriangleについては年明けくらいにWEBに公開予定。
(これは行列は使わない)

詳しくはここ
http://www.adobe.com/jp/devnet/flash/articles/matrix_class.html

行列を数学的な考え方
http://www.fumiononaka.com/TechNotes/Flash/FN0811001.html

■Matrix3Dについて

4X4の正方行列
列ベクトルクラスができました
Vectror3D

前掛け(prepend)と後掛け(apend)について
my_mc.transform.matrix3D.prependRotation(5,Vector3D.Y_AXIS);
最初にzプロパティに値を入れないと、認識できない。

preppend⇒単位行列で初期化してから、回転等をさせて、元に戻す。

詳しくはここ
http://www.adobe.com/jp/devnet/flash/articles/matrix3d_class.html

質問:
3Dの計算では今後このクラスを使っていった方がいいんじゃない?
PV3Dもこっちを使うようになるんじゃない?

31日f-siteセミナーやるよ。

vectorクラスは型指定が厳密になった配列みたいなもん。
こんな感じなニュアンス(謎)
drawTriangle(vertices,indices,uvtData);
vertices:Vector. = new なんちゃら
vertices.push(point0_mc.x,point_mc.y);