メイン

note アーカイブ

2006年10月11日

Spriteの作成と表示

Siprteは、タイムラインのない1フレームだけのMovieClipと言えます。継承を見ると次のようにMovieClipの1つ上のスーパークラスです。

MovieClip → Sprite → DisplayObjectContainer → InteractiveObject → DisplayObject → EventDispatcher → Object

逆に言えば、MovieClipクラスはSpriteクラスにフレームを追加したクラスです。なので、MovieClipクラスにはgotoAndPlay()といったフレーム移動のメソッドがありますが、Siprteにはフレームに関するメソッドやプロパティがありません。

//メインのタイムラインでは省略可能
import flash.display.Sprite;

//スプライトを作る
var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFFCC00);
circle1.graphics.drawCircle(50, 80, 40);
// メインのタイムラインにcircle1を追加する
addChild(circle1);
sprite01.jpg

2006年11月14日

SpriteにSpriteを追加する

//メインのタイムラインでは省略可能
import flash.display.Sprite;

//スプライトcontainer1を作る
var container1:Sprite = new Sprite();

//円を作る
var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFFCC00);
circle1.graphics.drawCircle(50, 80, 40);
//四角形を作る
var box1:Sprite = new Sprite();
box1.graphics.beginFill(0x00CCFF);
box1.graphics.moveTo(50, 50);
box1.graphics.lineTo(200, 150);
box1.graphics.lineTo(150, 220);
box1.graphics.lineTo(50, 200);
box1.graphics.endFill();

//スプライトcontainer1に2つのスプライトを追加する
container1.addChild(circle1);
container1.addChild(box1);

// メインのタイムラインにスプライトcontainer1を追加する
addChild(container1);
sprite02.jpg

2006年11月15日

MovieClipのクリック

//メインのタイムラインでは省略可能
import flash.events.MouseEvent;

//指カーソルになる
ball_mc.buttonMode = true;
//クリックイベントを受けてclickHandlerを呼び出す
ball_mc.addEventListener(MouseEvent.CLICK, clickHandler);
//応答
function clickHandler(event:MouseEvent):void {
	trace("クリックした");
}

AS3.0ではvoidの先頭のvが小文字になったので注意です。

Spriteのクリック

//メインのタイムラインでは省略可能
import flash.display.Sprite;
import flash.events.MouseEvent;

//スプライトを作る
var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFFCC00);
circle1.graphics.drawCircle(50, 80, 40);
// メインのタイムラインにcircle1を追加する
addChild(circle1);

//指カーソルになる
circle1.buttonMode = true;
//クリックイベントを受けてclickHandlerを呼び出す
circle1.addEventListener(MouseEvent.CLICK, clickHandler);
//応答
function clickHandler(event:MouseEvent):void {
	trace("クリックした");
}

2006年11月17日

Spriteを動かす

//メインのタイムラインでは省略可能
import flash.display.Sprite;
import flash.events.Event;

//スプライトを作る
var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFFCC00);
circle1.graphics.drawCircle(50, 80, 40);
// メインのタイムラインにcircle1を追加する
addChild(circle1);

//連続してenterFrameHandlerを呼び出す
circle1.addEventListener(Event.ENTER_FRAME, enterFrameHandler);

//ステージ内でランダムに座標を変える
function enterFrameHandler(e:Event):void {
	var h:int = Math.random()*stage.stageWidth;
	var v:int = Math.random()*stage.stageHeight;
	circle1.x = h;
	circle1.y = v;
}

AS3のStageクラスを参照するときにはstageのように小文字になるので注意。
プロパティにはx、yのように_が付かなくなった。

2006年11月21日

AS3.0 Language Referenceの見方

ActionScript 3.0 Language and Components Referenceで新しくなったMovieClipのプロパティを調べてみましょう。すると、currentLabelsなんて新しいプロパティが増えているのがわかりますが、_xや_yといった見慣れたプロパティが書いてありません。これはどうしたことでしょう?!

続きを読む "AS3.0 Language Referenceの見方" »

2007年1月18日

trace()

ActionScript 3.0でtrace()が少し便利になりました。 AS2.0までのtrace()は値を1つしか出力できなかったので、変数a、b、cの値をtrace()で出力するにはtrace([a,b,c])のように変数の値を配列に入れて1つの値にする必要がありました。

AS2.0の場合:
var a:Number = 1;
var b:Number = 2;
var c:Number = 3;
trace([a, b, c]);
出力 → 1, 2, 3
AS3.0のtrace()では、次のように複数の値を出力できます。a、b、cを配列に入れる必要がありません。

AS3.0の場合:
var a:int = 1;
var b:int = 2;
var c:int = 3;
trace(a, b, c);
出力 → 1 2 3

intクラスとint()

先のtrace()のAS3.0の例では変数aのデータ型にintと指定していますが、intは整数のデータ型を示します。intを指定した場合、数値(typeof number)以外を指定するとコンパイルエラーになりますが、整数ではない数値を指定すると整数化した値が入力されます。

int型の例:
var a:int = 1.6;
var b:int = 0.3;
var c:int = -4.2;
trace(a, b, c);
出力 → 1 0 -4
intはintクラスであり、intクラスのオブジェクトは次のようにnew intコンストラクタで作ることができます。
var a:int = new int(5.3);
なお、Global Functionにint()関数があります。たとえば次のようにint(3.6)を実行すると値を整数化して3を返します。
var b:int = int(3.6);
trace(b);
出力 → 3

2007年1月24日

日本語でAS3.0リファレンスを読む

Flash用のActionScript 3.0 Language Referenceのlivedocsは英語のものしかありませんが、Flex 2のlivedocsは日本語で読むことができます。
Adobe Flex2リファレンスガイド(日本語)

2007年1月25日

フレームアクション

Flash 8までは、フレームアクションが設定されているキーフレームが再生されるまで、定義されている変数や関数を利用することができませんでした。また同一タイムライン上の同名の変数や関数は最後に実行されたステートメントが値を上書きしていました。Flash 9ではこれが変更されています。

変更点1:
同一タイムラインであれば、たとえ再生していないキーフレームで定義してある関数でも利用できます。

変更点2:
同一タイムラインでは同名の変数や関数を定義することができません。たとえば、次のようなフレームアクションはFlash 8ではエラーになりませんが、Flash 9ではエラーになります。
var a:Number = 1;
var a:Number = 2;
trace(a);

これは1つのクラス定義ファイルの中に同名の変数や関数を定義できないのと同じですね。同一タイムラインに書かれているフレームアクションを1個のクラス定義と解釈するようになったと考えるとわかりやすいと思います。

2007年1月26日

scaleX、scaleY

インスタンスの伸縮率のプロパティの_xscale、_yscaleが、AS3ではscaleX、scaleYに変更されました。名前が変わっただけではありません。AS2では伸縮率100%ならば値は100.0でしたが、scaleX、scaleYは伸縮率100%ならば値は1.0です。たとえば、縦横スケールを2倍にするスクリプトは次のようになります。
my_mc.scaleX = my_mc.scaleY = 2;

2007年4月17日

ActionScript 3.0 Language.. LiveDocs正式版

いよいよ英語版のAdobe CS3が発売になったそうです。これにともない、Flash Professional 9 ActionScript 3.0 Previewが終わり、正式なLiveDocsが公開されました。

メインの目次:Flash CS3 Documentation

AS3.0リファレンスへのリンク:ActionScript 3.0 Language And Components Reference


しばらく止まっていたAS3.0入門ノート更新ですが、日本語版出荷も秒読み段階(2,3ヶ月後?)というわけで更新再開しま〜す!

2007年9月14日

イベントフロー(targetとcurrentTarget)

Flashのヘルプの「ActionScript 3.0 のプログラミング > イベントの処理 > イベントフロー」を見ると、表示リスト内をイベントオブジェクトが伝わる経路の説明があります。

LiveDocで見る→イベントフロー

stage_parent_Node.png

この図を見ると「キャプチャ段階>ターゲット段階>バブリング段階」というようにイベントオブジェクトが伝わるんだということがわかりますが、で、これがどういう意味をもっているのか?という続く説明文がなんだか難しくてよくわからないーという感じですね。

たとえば、次のようなスクリプトがあるとき、クリックイベントがあるとonClickメソッドを呼び出す際にMouseEventオブジェクトが引数として送られてきます。このMouseEventオブジェクトのプロパティにtargetとcurrentTargetというものがあります。この両者の違いは何だろう?とギモンに思ったときに、イベントフローの図が大事になってくるのです。
parent_mc.addEventListener(MouseEvent.CLICK, onClick);

function onClick(event:MouseEvent):void {
	trace("target="+event.target.name);
	trace("currentTarget="+event.currentTarget.name);
}

で、さらに追求するならば、次のように子供のmcにも親と同じようにMouseEvent.CLICKイベントを処理するスクリプトを書いてみましょう。すると、いよいよ理解が深まりますよ。
parent_mc.child_mc.addEventListener(MouseEvent.CLICK, onClick);

2007年10月 9日

引数の初期値

function定義での引数(パラメータ変数)に初期値を指定できるんですよ。たとえば、次のようにtest(a,b)関数を定義したとき、引数a、bのデータ型の指定と同時に初期値をインラインで指定できます。
すると、test()の呼び出しで引数を渡さない場合にコンパイルエラーにならず、初期値が採用されます。
function test(a:int = 1, b:int = 2):void {
	trace(a,b);
}

test();//出力結果→1 2
test(30);//出力結果→30 2
test(30,40);//出力結果→30 40

2007年12月19日

Papervison3Dはじめます〜

Papervison3DはActionSriptで3D空間を作るクラスライブラリです。これまでにも何度もWeb業界では3Dが熱くなっては冷めの繰り返しだったので静観してたんですが、遅蒔きながら、春の収穫を目指して年を越す前に畑を耕しておくかという気分になりました。

というわけで、「Papervison 3D入門ノート」ブログをつくったですよ。(ブログ作るだけなら、あっと言う間だけどね)

2008年1月23日

WOW-Engine

ActionScript 3の3D物理(3次元での質量とか加速とか衝突とか)のクラスライブラリWOW-Engineってのが出ましたよ。

WOW-Engine
http://seraf.mediabox.fr/wow-engine/as3-3d-physics-engine-wow-engine/

ちなみに、2Dならbox2dflash
こっちは3D描画をしなくていいので、そのぶん手軽。
でも、2D描画でも3Dで考えた方がいろいろ応用が効くように思えますね。
Zの値は重なりとかサイズとか、別のプロパティ表現に置き換えればいいわけだし・・・

2008年2月 5日

Flash Player 9の普及率

AS3で制作するには、Flash Player 9の普及率も気になるところ・・・
この数字があれば、クライアントも説得できるのではないでしょうか。

Flash Playerバージョン普及率

About note

ブログ「ActionScript3.0入門ノート」のカテゴリ「note」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはchap11 XMLファイルの読み込みと活用です。

次のカテゴリはsampleです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。