アプリは、UI、ビジネスロジック、データモデルを持つ
→一般的なUIは、リスト、コンボボックス(クリック領域、スクロール領域)を持ち、
→ビジネスロジックは、入力にたいしてどのような処理、どんなデータモデルなのか知っている。
データとインターフェイスの分離に失敗すると
→オブジェクトを外部から利用しがたくなる(データを保持する形の入力フォームは駄目)
→UI変更が容易でなくなる(いろんな形のグラフ作成)
→同一データの多重同時参照が困難(表示携帯ごとにデータのコピー要)
→データの同期が困難(表示携帯ごとに処理わけが必要になる)
★モデル
ビューや、コントローラーから独立して存在できる格納庫。
→文字のような、プリミティブなデータを保持するが、複雑なデータ構造ももてる。
モデルはビューやコントローラーへの参照を持つことはない。
→モデルの柔軟性を保つという重要概念
★ビュー
UIサブシステムの視覚部分
→アニメーション、入力フォーム、チャート、ボタン、オーディオプレイヤーに不可欠なUI要素から構成
ポイント:視覚的な要素、モデルデータを読み取るロジック、UIの要求を処理する、これらで構成される
★コントローラー
入力処理を行う。
モデルやビューの更新もここで行う。
それぞれ(サブシステム)の関係性
モデルは他の要素の情報を持たないが、情報をブロードキャストはする
→ひとつのモデルは複数のビューから参照されることが可能
ビューはモデル情報を持ち、モデルから情報を受信し、モデル情報を読み取ることが可能
→モデルに何かを書き込むということはないが、すべてのビューはモデルへの参照を持つ
コントローラーもモデルにアクセス可能
→ユーザー入力、もしくはシステムイベントでモデルのデータを変更する役割を持つ
コントローラーとビューの関係は密接
ひとつのコントローラーが複数のビューを制御するのは一般的ではない
コントローラーとビューの関係性は1対1が望ましい
ただし、ASではコントローラーとビューをまとめてクラス化することが多い。(ドキュメントビュー実装)
モデルは独立したもので、ビューやコントローラーへの参照は持たない。
ビューはモデルデータの変更を描画に反映
Tags: AS3, DesignPattern, Flash
ポリモーフィズムとは、同一インターフェースを持つ、実装部分が微妙に異なるクラス。
時計でいったら、デジタル時計とアナログ時計における表示部分の実装。
Tags: AS3, DesignPattern, Flash
イベントメモ
◆「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テスター募集中
Tags: Event
インターフェイスで定義するメソッドは、パブリックメソッドのみ
(修飾詞は指定できない。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では抽象クラスを管理するルールがないので自分で管理する。
Tags: AS3, DesignPattern, Flash