16 コピー

Similar documents
プログラミング基礎I(再)

JavaプログラミングⅠ

Microsoft PowerPoint - prog03.ppt

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Delphi/400でFlash動画の実装

PowerPoint プレゼンテーション

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog04.ppt

JAVA入門

13 コピー

Microsoft PowerPoint ppt

Microsoft PowerPoint - chap10_OOP.ppt

プログラミング入門1

スライド 1

GEC-Java


ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

CodeGear Developer Camp

第1章 ビジュアルプログラミング入門

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

第2回講義

Prog2_12th

第 8 回の内容 クライアントサイド処理 JavaScript の基礎

V8.1新規機能紹介記事

Javaプログラムの実行手順

ガイダンス

とても使いやすい Boost の serialization

C#の基本

Prog1_6th

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint - ruby_instruction.ppt

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

GUIプログラムⅣ

Java言語 第1回

HCI プログラミング 5 回目ウィンドウに画像を表示してみよう 今日の講義で学ぶ内容 画像の表示 画像のエフェクト 画像のビューポート指定 画像の表示 1 画像を表示してみましょう 画像の表示はクラス ImageView により管理されます ソースファイル名 :Sample5_1.java //

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

ガイダンス

Microsoft PowerPoint - lec06 [互換モード]

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

ガイダンス

ガイダンス

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

PowerPoint プレゼンテーション

ActionScript 3.0でサイト遷移構造を実装する

JavaプログラミングⅠ

2 概要 市場で不具合が発生にした時 修正箇所は正常に動作するようにしたけど将来のことを考えるとメンテナンス性を向上させたいと考えた リファクタリングを実施して改善しようと考えた レガシーコードなのでどこから手をつけて良いものかわからない メトリクスを使ってリファクタリング対象を自動抽出する仕組みを

Microsoft Word 基_シラバス.doc

スライド 1

プログラミング入門1

ガイダンス

第1章 ビジュアルプログラミング入門

Android Layout SDK プログラミング マニュアル

PowerPoint プレゼンテーション

サーバサイドスクリプトPHPを実感しよう

基礎計算機演習 実習課題No6

教材ドットコムオリジナル教材 0から始めるiアプリ (4) 0 から始める i アプリ (4) i アプリをプログラミングする際に必要なのは Java というプログラミング言語の基礎知識です 独自の命令や駆使してプログラミングをするわけですが Java というベースになっている言語を知らないでプログ

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

JavaScriptプログラミング入門 2.JavaScriptの概要

JavaプログラミングⅠ

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

SpringSecurity

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

Microsoft Word - C言語研修 C++編 3.doc

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

データアダプタ概要

Microsoft Word - Android_SQLite講座_画面800×1280

テンプレートエンジンの必要性 昔 (2000 年ごろ?) の典型的な PHP のコード : <?php // 処理?> <html> <body> <?php print("hello World!");?> </body> </html> 以下のような問題で衝突していた 1 一旦プログラムコードを

プログラミング実習I

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Microsoft Word - no06.doc

スライド 1

SmartBrowser_document_build30_update.pptx

1. アジェンダ Windows Media 9 Series メタファイルと再生リストファイル Flash Communication Server Streaming 用 ActionScript の記述 2

Microsoft PowerPoint pptx

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

--- サーバ側処理 Java servlet の例 // 通常の Java servlet での POST で受信と同じ protected void dopost(httpservletrequest request, HttpServletResponse response) throws S

Microsoft PowerPoint - diip ppt

Oracleセキュア・エンタープライズ・サーチ

プログラミング入門1

PowerPoint プレゼンテーション

Microsoft Word - VBA基礎(6).docx

About me! 足立昌彦 / +Masahiko.Adachi )! バイドゥ株式会社技術顧問 (Simeji)! 株式会社カブク Co-Founder! Google Developer Expert (Android)

医療者のための情報技術入門第 9 回プログラムがはたらくしくみを学ぶ (2) 日紫喜光良 概要 1. はじめに- 具体例から ここから Javascript のプログラミング入門 次はどうする--

アプリケーション

プラグイン

VB.NET解説

2004/11/23 オブジェクト指向プログラミング - モデル図とシーケンス図の表現方法 - オブジェクト指向プログラミング (OOP:ObjectOrientedPrograming) オブジェクト指向プログラミング言語 (OOPL) Java,C++,Delphi(Pascal),Visual

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

FLASH 8の活用

JavaプログラミングⅠ

UMLプロファイル 機能ガイド

EnSight 10.1の新機能

データ構造とアルゴリズム論

Transcription:

STAC STAR STAC STAR AS1.0 AS2.0 Sample URL http://stacstar.jp/hand_transfer/ Archive handtransfer.zip File ActionScript 1.0 Flash Player 8 Flash 8 4 5

発案 デザイン αビデオを使った画面遷移 HTML と違い Flash は画面の遷移がシームレスに そして動的に展開できます このコンテンツは αビデオを使った画面遷移として実験的に制作したものです 画面上を手が覆いつくし写真が遷移していく展開 コーヒーがこぼれて画面がクローズする展開 2 カ所においてαビデオを使用しています 画面上を手が覆いつくすことで画面が遷移するコーヒーがこぼれて画面がクローズする " 動画の撮影と編集 今回のようなちょっとした素材であれば 僕のような素人でも撮影や編集ができますが 本来 動画の撮影には非常にたくさんの経験と知識が必要です 正直 今回撮影した映像は 環境や時間が思いどおりいかず とてもよい素材とはいえません その失敗からの経験も含め 流れを説明していきます 用意したのは下記のものです DV カメラ 三脚 発色のよい緑色の A3 の紙 人 コーヒー人とコーヒーについては撮影用の素材です カメラに関しては 本格的なビデオカメラが用意できれば編集の際に一番加工しやすいのですが なかなか用意するのはむずかしいでしょう 今回は 一般的な家庭にあるようなコンパクトな DV カメラを使用しています 三脚は 固定視点で撮る場合にはあったほうが非常に便利です 緑色の紙はキーイング ( 対象となるオブジェクト以外を抜き去る処理 ) のための背景として利用します 文具ショップで 反射が少なく 発色のよい A3 程度の大きさで緑色 (#00FF00) に近いものを購入しました 写真であればパスで抜くこともできますが 動画ではパスで抜くことはせず 色を利用して背景を抜くことが多いです ( 他にも明るさや別の動画 たとえば背景だけの動画との差分などで抜いたりします ) 圧縮のないフォーマットで撮影する分には対象物と被らないどんな色の背景でもよいのですが DV カメラでは DV 圧縮という非可逆圧縮がされています DV 圧縮は 人間の目の特性を考慮し 色情報よりも輝度情報にデータを使います その輝度情報の中でも一番多く持っているのが緑色の情報です そのため ブルーバックではなくグリーンバックのほうがきれいにキーイングができるようです ただし 対象となる素材が緑を含むようなものであれば わざわざグリーンである必要はないでしょう 背景に色をしけばきれいに抜けるかというとそうではありません キーイングをうまく行えるかどうかは ほとんど撮影にかかっています 全体を統一の明るさでライティングさせることができるとうまく切り抜けるのですが 背景にしわが出たり影が落ちると編集のときに非常に時間がかかってしまいます 特に 撮影は時間がかかるし 撮り直しがきかなかったりしますので 十分なテストと準備をしてから臨んだほうがよいでしょう この他の撮影やキーイング 編集に関してはタナカミノルさんの記事 (102 ページ ) に詳しく書かれています このコンテンツを最初に考えたときはまだ Flash Player 7 のときでした Flash Player 7 では αビデオの機能が搭載されておらず Flashビデオをデザインに馴染ませるためには一工夫必要でした クロマキーで撮影した素材を動画編集ソフトを用い動画の下にくるデザインと合成して馴染むように見せかけたり いったんα チャンネルを持つ PNG の連番データとして書き出したり しかし 動画をデザインに馴染ませる方法では 動画のメインオブジェクトの下にくるデザインが動的なものには対応できませんし また PNG の連番を読み込む手法では長時間のムービーの場合 ファイル容量が巨大となってしまいます このような不都合を Flash Player 8 ではαビデオの機能として解決してくれます 撮影の様子 6 7

スクリプト AS1.0 によるオブジェクト指向スクリプティング コンストラクタのサンプル var Sample = function() { trace('sample called.'); 今回のコンテンツは AS1.0で構成してある他は 特記する事項はありません ここでは AS2.0 の視線から AS1.0 の書き方を見ることにより AS1.0 AS2.0 両方の理解をより深めたいと思います このコンテンツでは init.as ファイルは除き AS2.0 同様 1 つのクラスで 1 つの AS ファイルで構成してあります (AS2.0 のクラス定義は外部 AS ファイルに行います ) まずは クラスの全体的な役割を見てみます ここでは 変数 Sample に無名関数のオブジェクトを代入しましたが これは以下のような書き方でも問題ありません 変数 Sample を呼び出す関数 Sample( ) function Sample() { trace('sample called.'); 使用するクラスクラス init.as CoffeeMovie HandMovie HandTransferContents HandTransferControl PaperController Photo PhotoAlbum PhotoAlbumFactory PhotoIterator PhotoViewer 概要ステージの設定やパッケージ空間を生成する画面をコーヒーがこぼれるムービーで覆いつくし JavaScript 経由でウィンドウを閉じるクラス画面を手で覆い隠すムービーとなるクラスこのコンテンツのステージとなるクラス各オブジェクトのイベントを受け取り 全体を制御するクラス紙くずの画像ビューアコントローラとなるクラス写真の情報を持つエンティティとなるクラス写真情報を複数格納するクラス XML から写真情報を格納するクラスを作成するクラス写真情報を格納するオブジェクトから写真情報を数えるクラス画像のある URL から画像を読み込み 表示させるクラス このコンストラクタを作成するだけでクラスを定義したのと同意義になります " パッケージ空間の作成 クラスを定義するときに 特定のパッケージにそのクラスを定義することがあります AS2.0 であれば 次のようにクラス定義の際にパッケージ空間も同時に定義できます AS2.0 でのパッケージ空間の定義 public function ClassName() { では AS1.0 ではどうするのでしょうか? ActionScript では _global オブジェクトを 1 番上のレベルとし そこにオブジェクトのプロパティを連鎖的に格納していくことでパッケージ空間が生成されています たとえば 上記の AS2.0 のスクリプトを AS1.0 で書いてみましょう " AS1.0 でのクラスの作成 AS2.0では classキーワードによりクラスを作成しました しかし AS1.0 には class キーワードはありません では どうすればクラスを作成できるのか? AS1.0 では コンストラクタを作成してあげることがクラスの作成といえます コンストラクタとは オブジェクトが生成されたときに最初に実行される関数です つまり 関数を作成することで その関数をクラスのコンストラクタとして機能させることが可能なわけです 一般的にクラス名は英字の大文字から始まるので コンストラクタの関数もそれに従います AS1.0 でのパッケージ空間の定義 _global.packagenamea = new Object(); _global.packagenamea.packagenameb = new Object(); このようになります つまり Object クラスがダイナミッククラスなのを利用して 動的にプロパティを加えていき そこにクラス ( コンストラクタ ) を作成しているのです 8 9

" プロパティの宣言 プロパティの宣言について AS2.0 との比較をしていきます AS2.0 では 次のようにクラス定義の中に宣言していました このように プロパティと同様に定義することが可能です しかし プロパティと違って メソッドというのはあまり書き換えることがありません 1 つ 1 つのオブジェクトがそれぞれ同じ機能のメソッドを持つのではなく 1 カ所に持つほうがメモリを節約できます その 1 カ所にまとめたやり方を見てみましょう AS2.0 でのプロパティの宣言 private var propa:object; それでは AS1.0 のほうを見てみましょう メソッドを 1 つにまとめる // クラスを宣言 // メソッドを宣言 _global.packagenamea.packagenameb.classname.prototype.method = function() { AS1.0 でのプロパティの宣言 this._propa; このようにコンストラクタ内でダイナミックに定義していきます 定義しなくとも使えるのですが 定義しておいたほうがわかりやすいでしょう また AS1.0 には可視性 (public / private) がないため 識別するために private のものには _ ( アンダーバー ) を付けたりなど工夫をすることがあります ここで prototype というキーワードが出てきました prototype とは ActionScript の肝となるキーワードです 指定のオブジェクト自身が持っていないメンバーを呼び出した場合に オブジェクトは prototype に格納されたオブジェクトから指定のメンバーを探し出します そこにもない場合には さらにそのオブジェクトの中にある prototype を探しに行きます これは prototype チェーンと呼ばれています この特性を利用してメソッドを 1 つの場所だけにおいておき 参照させるのです prototype チェーン Object " メソッドの宣言 MovieClip メソッドの宣言について AS2.0 との比較をしていきます AS2.0 では 次のようにクラス定義の中に宣言していました AS2.0 でのメソッドの宣言 MyMovieClip public function method():void { " 継承 AS2.0 では extends キーワードを使ってクラスを拡張することができます では AS1.0 のほうを見てみましょう AS1.0 でのメソッドの宣言 this.method = function() { AS2.0 でのクラスの拡張 class packagenamea.packagenameb.classname extends MovieClip { public function ClassName() { AS1.0 では 先ほど出てきた prototype キーワードを使います prototype はオブジェクトに指定したメンバ 170 171

ーが存在しない場合にさかのぼって探すオブジェクトを指定するものでした つまり prototype に継承したいクラスのオブジェクトを設定すると そのクラスをベースに自分のクラスを作成することができます これが AS1.0 における継承の仕組みです 何も指定しない場合は Object クラスのインスタンスが格納されます this._playflag = false; this.stop(); AS1.0 での継承 // クラスを宣言 //MC を継承 _global.packagenamea.packagenameb.classname.prototype = new MovieClip(); この prototype というキーワードが ActionScript を支える大きな柱になっています しかし AS2.0 では prototype という概念を隠蔽することにより クリエーターが仕組みの裏側を意識することなく プログラミングできるように設計されています " シンボルへの割り当て AS2.0では ライブラリのMCシンボルに対して AS2.0 のクラスを指定することにより MC の機能から独自のクラスの機能のシンボルとして置き換えることができました AS1.0 では下記のように行います シンボルにクラスを適用する Object.registerClass(' 識別子 ', クラス ); これにより 特定の識別子を持つシンボルに自作のクラスを適応することができます " 手のムービーの実装 最後に 本コンテンツで使用したスクリプトを紹介します 写真の切り替えに使っている手のムービーの実装を見てみましょう HandMovie クラスの定義 コンストラクタ @return Void org.graffiti_web.handtransfer.handmovie = function() { 手で覆われたときにそのまま再生していいか停止するかのフラッグ @param Boolean このコンストラクタの宣言でクラスを定義しています パッケージ空間に関しては init.as にて宣言してあります パッケージ空間の宣言 MovieClip を継承 org.graffiti_web.handtransfer.handmovie.prototype = new MovieClip(); ここで prototype に対して MC のインスタンスを格納することで MC を継承しています このクラスは HandMovie.start() メソッドにて画面を覆い隠し HandMovie.open() メソッドにて覆い隠していた画面を開きます そして画面を隠したときと 画面が開かれたときにカスタムのイベントハンドラ (onhide() イベントハンドラと onend() イベントハンドラ ) を呼び出します この画面を覆い隠すメソッドと開くメソッドを見てみます 画面を覆い隠すメソッドと開くメソッド ムービーを開始する @return Void org.graffiti_web.handtransfer.handmovie.prototype.start = function() { this.play(); 終了アニメーションに移るようにする @return Void org.graffiti_web.handtransfer.handmovie.prototype.open = function() { this._playflag = true; this.play(); このように 非常にシンプルな実装となっています また 最後に制作したクラスをライブラリのシンボルへ割り当てています クラスをライブラリのシンボルへ割り当てる // シンボルに割り当て Object.registerClass('handMovie', org.graffiti_web.handtransfer.handmovie); 172 173