![]() | ActionScript 3.0 アニメーション 作者:KeithPeters 出版社/メーカー:ボーンデジタル 発売日:2007-10-30 メディア:単行本 |
Part 1 ActionScriptによるアニメーションの基本ふむふむ。500ページ以上あるのか。厚い本だな。ていうか高い! 高価な本だ。
Chapter 1 アニメーションの基本的な概念
Chapter 2 アニメーションに使用するActionScript 3.0の基本
Chapter 3 アニメーションで使う三角関数
Chapter 4 レンダリングテクニック
Part 2 基本的なモーション
Chapter 5 速度と加速度
Chapter 6 跳ね返りと摩擦
Chapter 7 ユーザーインタラクション:オブジェクトの移動
Part 3 高度なモーション
Chapter 8 イージングとバネ
Chapter 9 衝突判定
Chapter 10 座標回転と角度に対する跳ね返り
Chapter 11 ビリヤードボールの物理
Chapter 12 引き合うパーティクルと引力
Chapter 13 フォワードキネマティックス:物体を歩かせる
Chapter 14 インバースキネマティックス:ドラッグとリーチ
Part 4 3Dアニメーション
Chapter 15 3Dの基本
Chapter 16 3Dの線と塗り
Chapter 17 陰面消去と3D照明
Part 5 さらなるテクニック
Chapter 18 行列の数学
Chapter 19 ヒントとトリック
Chapter 1
Chapter1は「frame フレーム」に関する考察。frameっていうのは要するに動画をきりとった1静止画。1秒4コマのリミテッドアニメ、というときのコマのこと。Chapter 2
- この本は Flash 9(Flash CS3, Flash Player 9)と、Flex2向けの本。ActionScript3.0専用の本。
- classとは ひな形。ファイル名はクラス名.as
- packageとは クラスをまとめる
- import 必ず記述する必要あり
- constructor 初期化。クラスと同名のfunction
- 継承 extends override
- MovieClipクラス / Spriteクラス(Timelineを持たないMovieClip)
- DocumentClass AS3で新しく導入された。このクラスから始まる Main()
- Flash CS3/Flex builder2/Flex2 SDKの使い方
- metadata compilerに与える情報 -default-size=800,600 のコマンドラインでオプションの代わりに、[width="800",height="600"]と指定
- trace("warn") / Logger.debug("warn")
- Movieをブラウザのサイズに伸縮させない stage.scaleMode=,.. stage.align
- loop ただのforループでは画面更新しない。
- Flash5ではFrameLoop‥‥Frame1で初期化、Frame2に実処理、Frame3でgotoAndPlay(2);
- Flash5のClipEvent‥‥AS3では削除された
- MovieClipに与えるコード
onClipEvent(load){初期化;}
onClipEvent(enterFrame){実処理;}
on(イベント名){}
- MovieClipに与えるコード
- Flash6以降のEventHandler‥‥AS2以前とAS3でやりかたが異なる。大事な2つとは‥‥
- Listener‥‥ EventをListen(聞き耳を立てる)オブジェクト。Eventを監視する、もっと正確に言うとEventを通知される
- Handler‥‥ Eventが起きたときHandling(処理する)関数
- addEventListener(Event.ENTER_FRAME, enterFrameHandler);
- 特定のSpriteだけでeventを監視する mySpriteButton.addEventListener(Mouse.MOUSE_DOWN, spriteHandler);
- Handler関数はAS2ではonEnterFrameとか決まっていた
- removeEventListener(Event.ENTER_FRAME, enterFrameHandler); で受信をやめることかできる
- AS2ではスコープの問題があった。AS3解決
- enterFrameはFlashに再生ヘッドを移動させるタイミングを教えている
- 表示リスト‥‥Movie内のVisualObjectすべてのtree構造
- tree‥‥ Stage - MovieClip/Text/Shape - MovieClip という階層構造
- AS2ではMovieClip作成時にtree上の場所を指定する必要あり。AS3では必要ないが、明示的にaddChild()が必要。
- AS2で必要だった深度指定は、AS3では自動で行われる(指定も可能)
- 親.addChild(子) というObject関係。
- removeChildしても消滅ではなく表示リストから外れるだけ。表示リストに再び戻せる、しかも別の場所にでもOK
- 別の親にaddChildすると、前の親からは自動的にremoveChild
Flash swf: ステージ(Flash画面のどこでも)をクリックすると、子のballは、親parent1と親parent2にaddChild、次に親からremoveChild。
ソース:
package
{
import flash.display.SpreadMethod;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
[SWF(backgroundColor="0xfcfcfc", width="320",height="240", frameRate="15")]
/**
* ...
* @author itouhiro
*/
public class Main extends Sprite
{
private var parent1:Sprite;
private var parent2:Sprite;
private var ball:Sprite;
private var i:int = 0;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
parent1 = new Sprite();
addChild(parent1);
parent1.graphics.lineStyle(1, 0);
parent1.graphics.drawRect( -50, -50, 100, 100);
parent1.x = 60;
parent1.y = 60;
parent2 = new Sprite();
addChild(parent2);
parent2.graphics.lineStyle(1, 0);
parent2.graphics.drawRect( -50, -50, 100, 100);
parent2.x = 170;
parent2.y = 80;
ball = new Sprite();
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.graphics.endFill();
stage.addEventListener(MouseEvent.CLICK, ballHandler);
}
private function ballHandler(e:MouseEvent):void
{
i = (i + 1) % 3;
if (i==1) {
parent1.addChild(ball);
}else if(i==2) {
parent2.addChild(ball);
}else {
parent2.removeChild(ball);
}
}
}
}
このソースには同じ処理を2回している箇所がある。共通化するため、クラスを使う。以下のようにファイル分割して、classを作る。
ソース ParentBox.as:
package
{
import flash.display.Sprite;
public class ParentBox extends Sprite
{
public function ParentBox()
{
init();
}
private function init():void
{
graphics.lineStyle(1, 0);
graphics.drawRect( -50, -50, 100, 100);
}
}
}
ソース Main.as:package
{
import flash.display.SpreadMethod;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
[SWF(backgroundColor="0xfcfcfc", width="320",height="240", frameRate="15")]
/**
* ... mtm
* @author itouhiro
*/
public class Main extends Sprite
{
private var parent1:ParentBox;
private var parent2:ParentBox;
private var ball:Sprite;
private var i:int = 0;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
parent1 = new ParentBox();
addChild(parent1);
parent1.x = 60;
parent1.y = 60;
parent2 = new ParentBox();
addChild(parent2);
parent2.x = 170;
parent2.y = 80;
ball = new Sprite();
ball.graphics.beginFill(0xff0000);
ball.graphics.drawCircle(0, 0, 40);
ball.graphics.endFill();
stage.addEventListener(MouseEvent.CLICK, ballHandler);
}
private function ballHandler(e:MouseEvent):void
{
i = (i + 1) % 3;
if (i==1) {
parent1.addChild(ball);
}else if(i==2) {
parent2.addChild(ball);
}else {
parent2.removeChild(ball);
}
}
}
}
できあがるFlash swfは先ほどと同じなので省略。

0 件のコメント:
コメントを投稿