2009/02/04
[FumioNonaka.com Newsletter: no.062]
//=========================================================================
// [FumioNonaka.com Newsletter]
//
var issue:uint = 62; // 第62号
var published:Date = new Date(2009, 2, 4); // February 4, 2009
//=========================================================================
var index:Object = {
No_0:パフォーマンスを知る意義,
No_1:12月の新ネタ,
No_2:書きもの,
No_3:セミナー,
No_4:よろず新情報,
No_5:スクリプト覚え書き
}; //_____________________________________________________________________
/*
【No_0:パフォーマンスを知る意義】==========================================
Adobe MAX 2009では「ActionScript 3.0におけるパフォーマンス向上のヒント」と
いうセッションを受持ち、おかげさまで350名の定員が満席となりました。
もっともこのお題は、ターゲットとするレベルが設定しづらいものでした。やさし
すぎると、知っていることばかりだったとなります。逆に、マニアックすぎれば、
何の話だかわからないといわれかねません。
それから私自身、演算子やメソッドを細かく比べて、どれが速いか調べることには
通常さほど重きを置きません。環境やFlash Playerのバージョンによって、結果は
大きくぶれる可能性があるからです。
そこで、Flash Playerの開発者がパフォーマンスを高めるために用意した仕組みを
まずご紹介しました。それから、アルゴリズムやロジックとして理由のある速さの
違いをご説明し、最後にマニアックネタで締めることにしました。
もっとも、その速さの差というのは、処理を100万回繰返して、わずかコンマ数秒の
違いではあります。しかし、理屈として処理の差を知ることは、無駄のない設計が
できるという意味で、コンテンツの品質に影響を及ぼしうると考えます。
「他方で、処理スピードにばかり注目して、トリッキーなロジックを組立てれば、
バグを生む原因にもなります。正しく動作しないプログラムは、その時点で品質と
しては失格です」(拙著『ActionScript 3.0プロフェッショナルガイド』p.205)。
プロジェクトや具体的な内容によって、処理の速さより優先されるべきことがらも
あるでしょう。
それでも、得失を理解したうえでの選択と、行き当たりばったりの処理では質的な
違いがあると思います。それが「パフォーマンス」について理解する意義といえる
でしょう。
【No_1:12月の新ネタ】======================================================
[スクリプティング新規情報]
■Flash FN0812001「掛け算と割り算の処理速度」
<http://www.fumiononaka.com/TechNotes/Flash/FN0812001.html>
ActionScript 3.0の数値演算では、割り算よりも掛け算の方が少し速いようです。
簡単なテストで確かめてみましょう。
【No_2:書きもの】==========================================================
[雑誌・書籍・Web記事など]
■gihyo.jp「ActionScript 3.0で始めるオブジェクト指向スクリプティング」
・第20回「戻り値をクラスで定義する」
<http://gihyo.jp/dev/serial/01/as3/0020>
前回第19回「Objectクラスと静的メソッドの定義」に作成したサンプルに、新たに
情報を収めるクラスを定義して、MyTimerクラスと組合わせて使ってみます。
[F-site: ActionScript: AS3]
■偶数を2で割る
<http://f-site.org/articles/2008/12/24035326.html>
偶数を2で割るときは、ビット単位の右シフト演算子>>を使うと処理が速いといわれ
ます。でも、実際にFlash CS4 Professionalの[ムービープレビュー]でテストして
みると、環境やスクリプトの記述により、結果にばらつきが出てくるようです。
[レジュメ・データアップ]
■Adobe MAX Japan 2009
セッションB-7「ActionScript 3.0におけるパフォーマンス向上のヒント」
<http://www.fumiononaka.com/Sample/Adobe_MAX_Japan_2009/FA090130.html>
セッションでご説明した内容のレジュメとサンプルFLAファイルをアップしました。
なお、本レジュメに加筆・補正した原稿を、Adobeデベロッパーセンターに寄稿する
予定です。
【No_3:セミナー】==========================================================
[JaGra PROFESSIONAL DTP & WEB SCHOOL]
■Flash ActionScript中級/ActionScript 2.0
<http://www.jagra.or.jp/school/web/actionscript_advance.html>
マウスに遅れて追いかけるアニメーションやマウスの方向を向くアニメーションと
いったインタラクティブなムービーを素材として、ActionScriptの基本的な考え方
やスクリプトの組み立て方を学習します。
【日 時】2009年2月24日火曜日〜25日水曜日6時間×2日全12時間
【参加費用】39,900円
【場 所】社団法人日本グラフィックサービス工業会
【募集人数】10名
【テキスト】『モーショングラフィックスで学ぶActionScript − Flash MX −』
■基礎から学ぶActionScript 3.0 〜ステップ1
<http://www.jagra.or.jp/school/web/actionscript3_step1.html>
簡単なスクリプトは書いたことがある、という初学者を対象とした基礎講座です。
スクリプトによるアニメーションを題材にして、ActionScript 3.0の基本と処理の
組立て方・考え方を解説します。おもな学習項目としては、変数と関数、イベント
リスナー、および日付と文字の扱いなどが含まれます。ActionScript 2.0の知識は
前提とはしません。
【日 時】2009年2月26日木曜日6時間
【参加費用】21,000円
【場 所】社団法人日本グラフィックサービス工業会
【募集人数】10名
【テキスト】『ActionScript 3.0プロフェッショナルガイド』
■基礎から学ぶActionScript 3.0 〜ステップ2
<http://www.jagra.or.jp/school/web/actionscript3_step2.html>
ActionScript 3.0の基礎の学習を終えた初級者が対象です。MovieClipインスタンス
をインタラクティブにアニメーションさせるムービーを作成しながら、座標と座標
空間の扱い、条件判定、配列やObjectの操作などについて学びます。関数を基本に
すえた処理のパーツ化についても、実習をとおして理解していただきます
【日 時】2009年2月27日金曜日6時間
【参加費用】21,000円
【場 所】社団法人日本グラフィックサービス工業会
【募集人数】10名
【テキスト】『ActionScript 3.0プロフェッショナルガイド』
■基礎から学ぶActionScript 3.0 〜ステップ3
<http://www.jagra.or.jp/school/web/actionscript3_step3.html>
ActionScript 3.0の基本的なスクリプティングの知識をもった初級者が対象です。
3D風に回転するアニメーションのスクリプトを出発点に、クラスの定義やイベント
の配信までデザイン(設計・構成)を展開していきます。三角関数や数学的な考え方、
クラスの応用についても触れます。変数や関数、条件判定、イベントリスナーなど
基礎事項は、学習されていることが前提です。
【日 時】2009年3月25日水曜日〜26日木曜日6時間×2日全12時間
【参加費用】54,600円
【場 所】社団法人日本グラフィックサービス工業会
【募集人数】10名
【テキスト】『ActionScript 3.0プロフェッショナルガイド』
[m-School]
■ActionScript 3.0 基礎から実践へのStep
<http://m-school.biz/training/actionscript3.0_step.htm>
MovieClipの取り扱いなどActionScriptの復習からスタートし、ActionScript 3.0の
基本項目を学習します。Flashの基本機能を習得済みで、初歩的なプログラム経験の
ある方であれば、ActionScript 1.0や2.0を知らない方でも無理なく習得できます。
さらにActionScript 3.0の基礎事項ばかりでなく、実践で役立つテクニックも学習
しますので、実際のコンテンツ制作でどのように活用すればよいか知ることもでき
ます。
【日 時】2009年2月17日火曜日〜18日水曜日6時間×2日全12時間
【参加費用】63,000円
【場 所】m-School
【募集人数】10名
【テキスト】オリジナル教材
【No_4:よろず新情報】======================================================
[FLASH-Japanネタ]<http://www.flash-jp.com/>
■Function.callについて
<http://www.flash-jp.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=8336&forum=8>
Function.call()メソッドの第1引数のオブジェクト参照は、慣れないとその意味が
わかりにくいようです。もっとも、ActionScript 3.0ではほとんど使う場面があり
ません。
【No_5:スクリプト覚え書き】================================================
■Vector型データをエレメントにしたVectorインスタンス
先日のF-siteセミナーの二次会で問題になったお話しです。Vectorインスタンスを
エレメントとするVectorインスタンスはつくれるのかということでした。できない
理由というのは、考えつきません。でも、つぎのスクリプトはコンパイルエラーに
なります。
var my_vector:Vector.<Vector> = new Vector.<Vector>();
var my0_vector:Vector.<int> = new Vector.<int>();
my0_vector.push(0);
my_vector.push(my0_vector); // コンパイルエラー
エラーメッセージは以下のようなものでした。「Vector」を「Vector」に変換する
ことができないというのも理解に苦しみます。
「Error #1034: 強制型変換に失敗しました。Vector.<int>@28c790e9 を __AS3__.
vec.Vector に変換できません。」
しばらくして出されたアイデアは、エレメントの型をVectorで指定したとき、入れ
子になるエレメントの型指定が必要ではないかということでした。
// var my_vector:Vector.<Vector> = new Vector.<Vector>();
// エレメントの型指定をする<>が入れ子になる
var my_vector:Vector.<Vector.<int>> = new Vector.<Vector.<int>>();
var my0_vector:Vector.<int> = new Vector.<int>();
my0_vector.push(0);
my_vector.push(my0_vector);
trace(my_vector[0]); // 出力: 0
確かにいわれてみれば、コロンブスの卵のようなものです。けれども、盲点になり
がちな点でしょう。
■Matrix3Dクラスのサンプル
<http://www.fumiononaka.com/Sample/FlashCS4/Matrix3D/Matrix3D.html>
MAX 2009でおまけネタとして紹介した、Matrix3Dクラスによって立方体を回転する
サンプルです。解説はとくに加えておりませんので、Adobeデベロッパーセンターの
記事「Matrix3Dクラス − 変換行列2」と併せてご参照ください。
*/
//=========================================================================
var publisher:Object = {
name:野中 文雄,
mailto:fumio@mx10.ttcn.ne.jp,
web:<http://www.FumioNonaka.com>,
credit:2003-2008 (c) Fumio Nonaka all rights reserved.
}; //_____________________________________________________________________
if (wantToUnsubscribe) { // メールマガジンの購読中止は
// つぎのURLでお手続きください
var url:String = "http://www.FumioNonaka.com/Magazine/";
var request:URLRequest = new URLRequest(url);
navigateToURL(request);
}


