[AS][自分用]ActionScript3.0デザインパターンの読書メモ(4)
-MVCモデル

アプリは、UI、ビジネスロジック、データモデルを持つ
→一般的なUIは、リスト、コンボボックス(クリック領域、スクロール領域)を持ち、
→ビジネスロジックは、入力にたいしてどのような処理、どんなデータモデルなのか知っている。

データとインターフェイスの分離に失敗すると
→オブジェクトを外部から利用しがたくなる(データを保持する形の入力フォームは駄目)
→UI変更が容易でなくなる(いろんな形のグラフ作成)
→同一データの多重同時参照が困難(表示携帯ごとにデータのコピー要)
→データの同期が困難(表示携帯ごとに処理わけが必要になる)

★モデル
ビューや、コントローラーから独立して存在できる格納庫。
→文字のような、プリミティブなデータを保持するが、複雑なデータ構造ももてる。
モデルはビューやコントローラーへの参照を持つことはない。
→モデルの柔軟性を保つという重要概念

★ビュー
UIサブシステムの視覚部分
→アニメーション、入力フォーム、チャート、ボタン、オーディオプレイヤーに不可欠なUI要素から構成
ポイント:視覚的な要素、モデルデータを読み取るロジック、UIの要求を処理する、これらで構成される

★コントローラー
入力処理を行う。
モデルやビューの更新もここで行う。

それぞれ(サブシステム)の関係性
モデルは他の要素の情報を持たないが、情報をブロードキャストはする
→ひとつのモデルは複数のビューから参照されることが可能
ビューはモデル情報を持ち、モデルから情報を受信し、モデル情報を読み取ることが可能
→モデルに何かを書き込むということはないが、すべてのビューはモデルへの参照を持つ
コントローラーもモデルにアクセス可能
→ユーザー入力、もしくはシステムイベントでモデルのデータを変更する役割を持つ

コントローラーとビューの関係は密接
ひとつのコントローラーが複数のビューを制御するのは一般的ではない
コントローラーとビューの関係性は1対1が望ましい
ただし、ASではコントローラーとビューをまとめてクラス化することが多い。(ドキュメントビュー実装)
モデルは独立したもので、ビューやコントローラーへの参照は持たない。
ビューはモデルデータの変更を描画に反映

[AS][自分用]ActionScript3.0デザインパターンの読書メモ(3)
-ポリモーフィズム

ポリモーフィズムとは、同一インターフェースを持つ、実装部分が微妙に異なるクラス。
時計でいったら、デジタル時計とアナログ時計における表示部分の実装。

[EV] FlashOOP勉強会#33

イベントメモ
◆「on the fly」「another shadow」の技術的な話
緒方 壽人さん(リーディング・エッジ・デザイン)

「on the fly」
原理概要
・projectorにて投影した映像をIRカメラで画像認識
・投影面にはRetroReflective Materialというものを使用
(入射角と反射角が同じにする性質があるものらしい→高価)
・IRカメラには、OptiTrackを使用
・soft ImageProccesing OpenCV

YCAMでの展示と、骨展での展示では、紙の認識方法が違う
・YCAM ver:紙内の穴で紙の向きを認識。
・骨展 ver:手の影も踏まえて紙の向きを認識
(手の影から一番遠い頂点→隣の頂点から2辺を抽出→四角を認識)

計算部分はC++、描画部分はFLASHを使用
通信方法は、ExternalInterface
現実空間と映像の同期には遅延が致命的なためネットワーク経由での通信では駄目だった。
(Socket、LocalConnectionとか)

「another shadow」
原理概要は「on the fly」と同じ
アルゴリズムは影を三角形に変換して三角形の塊として考える。

三角形分割
・影の輪郭から領域を三角形に分割
(有限要素法、ドロネー分割、ボロノイ図)

制御点を決めて、アニメーションさせる。(頭、手、足、胴体中心等に)
制御点は、グラフ理論の考え方で設定
(三角形の辺の中点をとり、そこに線を引くような感じ)

処理の順番(計算処理はC++)
・輪郭抽出
・三角形分割
・制御点決定
・事前計算
・描画
※C++のPoco というライブラリがJAVAライクでお勧め

まとめ
DesignEngineering→新しくて使えるものを作る
Usable + Innovative = Interactive Art
技術的にはスピードとレスポンス感を大切に
あとは使うシチュエーション(シナリオ)を合致させる。
つまりはプレゼントを作る
→(ユーザーが)欲しい物を考える
→サプライズ要素も忘れない

Q&A
Q:苦手な人へのアルゴリズムとかの効率的な勉強方法は?
A:とりあえず仕事で受けて必死にやる(笑)
あとは過去の遺産の見直すことも大切

◆Gumbo、Catalystを中心としたAdobe Labsの技術紹介
上条 晃宏さん(アドビ システムズ)

・Alchemy
C#並みの演算速度をAS3で利用するためのフレームワーク
FLASHでスーパーマリオ、Webブラウザ(WebKit)の移植が可能になるらしい
ただし、AS3でできなかったことがこれでできるというわけではない。
プログラムサイズも大きくなる。
変換処理には、Gluegen:AS3←→C
コードをまとめて書いてあるものを変換したほうが良い。
(毎回変換処理させると遅くなる)
Cではメモリ開放は手動だから気をつける。

・Struts
P2Pさせるための橋渡しというか準備みたいなもの。
ただし、お互いのIDを知るための仕組みを別途用意しないと駄目。
FLASH COLLABORATION SERVICEなら、IDの仕組みも組み込まれてる。(Flexのみ)

・FLASH Catalyst
デザイナー向けツール
ASなしにインタラクションがつけれる

・FlashBuilder
年内には正式リリース予定
デバッグにプロファイルとデータとサービスが便利そう
日本語版Betaテスター募集中

[AS][自分用]ActionScript3.0デザインパターンの読書メモ(2)
-インターフェイス

インターフェイスで定義するメソッドは、パブリックメソッドのみ
(修飾詞は指定できない。privateとか)
パブリックメソッドにはgetter/setterも含む。

インターフェイス

package  {
	public interface IPlus {
                //myPlus関数定義
		function myPlus(number1:Number , number2:Number):Number;
                //ゲッターを定義
		function get myNumber():Number;
		//function set myNumber(value:Number):void;
	}
	
}

クラス

//IPlusを実装したクラス
package  {
	
	public class Plus implements IPlus  {
		private var _myNumber:Number;
		public function Plus() {
			var num1:Number = 10;
			var num2:Number = 5;
			_myNumber = 10;
			
			trace(myPlus(myNumber, num2));
			
		}
		//myPlus関数が無いとエラー
		public function myPlus(num1:Number, num2:Number):Number{
			return num1 + num2;
		}
                //get myNumber()ゲッターが無いとエラー
		public function get myNumber():Number { return _myNumber; }
	}
}

また継承することでもインターフェースも受け継がれる。(実装も継承される)
その際は抽象クラスという概念を持ったクラスを利用する。
抽象クラスはインスタンスを持てないクラスという意味。
ただしAS3では抽象クラスを管理するルールがないので自分で管理する。