oshige: 2009年8月アーカイブ

(section03-01 Arrayクラスの配列から抜粋)

 配列の長さ、すなわちエレメント(値)の個数はlengthプロパティで調べます。配列のインデックス番号は0からカウントしますが、lengthは1から数えます。

[:script:]配列の値の個数を調べる
var colors:Array=["red","green","yellow"];
var weekj:Array=new Array("日","月","火","水","木","金","土");
trace(colors.length);//出力:3
trace(weekj.length);//出力:7
 lengthは読み出しだけでなく値の設定も可能です。lengthを設定すると配列がその長さに変更されます。配列の長さよりも大きな値を設定するとundefinedが追加され、小さな値を設定すると長さに合わせてエレメントが後ろから削除されます。

[:script:]配列の長さを指定する
var colors:Array=["red","green","yellow","black"];
//配列より長いlengthを指定する
colors.length=8;
trace(colors);//出力:red,green,yellow,black,,,,
//配列より短いlengthを指定する
colors.length=3;
trace(colors);//出力:red,green,yellow
note 配列の長さを固定したい場合はVectorクラスを利用します。→ベクターのエレメントの個数を制限する

 次の例は配列からランダムに値を選ぶスクリプトです。randomValue()の2行目で配列の値の個数を元にランダムなインデックス番号を作り、3行目でリストから値を取り出します。

[:script:]配列からランダムに値を選ぶ
function randomValue(list:Array):String {
	var index:uint = Math.floor(Math.random() * list.length);
	var v:String = list[index];
	return v;
}

var colors:Array = ["red","green","blue","pink","black"];
//配列colorsから1色選ぶ
var color:String = randomValue(colors);
trace(color);
(section08-03 クラス継承の補足)

 ※複数のクラスを継承する方法について補足します。p.260のextendsの補足説明になります。

複数のクラスを継承する
 MovieClipクラスはSpriteクラスやDisplayObjectクラスなどの複数のクラスを継承していますが、このように複数のクラスを継承したい場合はどうすればよいのでしょうか。結論から言えば1つのサブクラスは1つのスーパークラスしか指定できません。たとえば、MyClassAとMyClassBの両方を継承したMyClassCを作りたいとき、次のようにスクリプトを書くことはできません。

間違ったスクリプト1
class MyClassC extends MyClassA, MyClassB; 
間違ったスクリプト2
class MyClassC extends MyClassB extends MyClassA; 

 MyClassAとMyClassBの両方を継承したMyClassCを作りたいならば、まず、MyClassAを継承したMyClassBを作り、次にMyClassBを継承したMyClassCを作るという方法をとります。たとえば、次のMyClassCではスーパークラスであるMyClassBのtestB()だけでなく、そのMyClassBのスーパークラスのMyClassAのtestA()も利用できます。
 このように親がさらにその親を継承していくという手法によって結果としてサブクラスが複数のクラスを継承できます。

[:script:]MyClassAクラス
package {
	public class MyClassA {
		public function testA() {
			trace("test A");
		}
	}
}

[:script:]MyClassAクラスを継承しているMyClassBクラス
package {
	public class MyClassB extends MyClassA {
		public function testB() {
			trace("test B");
		}
	}
}

[:script:]MyClassBクラスを継承しているMyClassCクラス
package {
	public class MyClassC extends MyClassB {
		public function testC() {
			testA();//MyClassAから継承しているメソッド
			testB();//MyClassBから継承しているメソッド
		}
	}
}

 なお、インスタンスが特定のクラスを継承しているかどうかはis演算子を使って判断できます。

[:script:]指定のクラスを継承しているかどうか調べる
var mc:MovieClip=new MovieClip();
trace(mc is DisplayObject);//出力:true
trace(mc is EventDispatcher);//出力:true
trace(mc is Number);//出力:false
(section03-01 Arrayクラスの配列から抜粋)

 これまでの例では配列を演算子[]で作りましたが、配列のデータ型はArrayクラスであり、new演算子を使ってArrayクラスのインスタンスとして作ることができます。

[:script:]Arrayクラスのインスタンスとして配列を作る
var colors:Array=new Array("red","green","yellow");
var weekj:Array=new Array("日","月","火","水","木","金","土");
var vlist:Array=new Array(2900,"XA","white");
 new Array()で配列を作る場合、通常は引数で指定した値がそのまま配列のエレメント(要素)の値になりますが、引数が整数1個の場合は引数で指定した個数の配列が作られます。配列のエレメントの値は空(undefined)です。たとえば、次のスクリプトの4行目ではnew Array(5)で[5]ではなく[,,,,]が作られます。

[:script:]Array()の引数が整数1個のときに結果が違う
var vlist1:Array=new Array();//空の配列[]
var vlist2:Array=new Array("red");//配列["red"]
var vlist3:Array=new Array(5,3);//配列[5,3]
var vlist4:Array=new Array(5);//配列[,,,,]
(section03-01 Arrayクラスの配列から抜粋)

 配列の中に配列を入れた多次元配列を作ることができます。多次元配列は複雑なデータを操作する上で有効な手段となります。次のスクリプトは多次元配列から値を取り出す例です。

[:script:]多次元配列から値を取り出す
var colors:Array=[["red","pink"],["wihte","blue"],["green","black"]];
var myColor:String=colors[2][1];
trace(myColor);//出力:black
 2行目のcolors[2][1]では、まずcolors[2]の値を取り出します。位置を0から数えるので[2]は左から3番目の ["green", "black"]です。したがって、続いて ["green", "black"][1]を実行することになります。その結果、myColorには"black"が入ります。

この本を書いたわけ

|

日刊デジタルクリエーターズに紹介記事を書きました。
以下はその記事の再録です。デジクリでは9月3日までデジクリ読者1名に書籍プレゼント中!


■メイキング・オブ・ブックス&プレゼント/ActionScript3.0の楽園への招待状『Adobe Flash CS4 詳細!ActionScript 3.0入門ノート[完全改訂版]』/大重美幸

 みなさん、こんにちは。大重美幸です。2年前の2007年の8月31日にCS3のAS3入門ノートを出し、昨年の7月31日にはCS3のAS3入門ノート2を出しました。そして、今年も8月15日付けで『Adobe Flash CS4 詳細!ActionScript 3.0入門ノート[完全改訂版]』を発行することができました。図らずも毎年夏にAS3入門ノートを出しているわけで、夏に出るのは入道雲とAS3入門ノートという風物詩になりそうですかね?

 さて、3冊目に当たるAS3入門ノート[完全改訂版]ですが、AS3入門ノート2が最初のAS3入門ノートの続編だったのに対し、今年の本は初心に戻って仕切り直しのAS3入門ノートという内容です。ただ単にAS3入門ノートのCS4対応版というのではなく、完全改訂版という呼び名にふさわしく、ほぼ全ページを書き下ろしました。

(section03-01 Arrayクラスの配列から抜粋)

 配列とは仕切りで区切られた容器に複数の物を納めていくように、複数のデータを1個のグループのように扱える機能です。配列は配列演算子[]を使って作ることができます。値をカンマ(,)で区切り、[]で囲みます。データ型はArrayを指定します。

[:script:]配列演算子[]で配列を作る
var colors:Array=["red","green","yellow"];
var weekj:Array=["日","月","火","水","木","金","土"];
var vlist:Array=[2900,"XA","white"];

配列から値を取り出す
 配列から値を取り出すには、配列[インデックス番号]の式で配列の並びの位置を指して参照します。このとき、インデックス番号を左から0、1、2のように0から数えるので注意してください。値を取り出しても元の配列は変化しません。

[:script:]配列から値を取り出す
var colors:Array=["red","green","yellow"];
var colorA:String=colors[0];
var colorB:String=colors[1];
trace(colorA);//出力:red
trace(colorB);//出力:green
trace(colors);//出力:red,green,yellow

配列の値を入れ替える
 配列の値の位置を指して値を代入すれば、その位置の値が入れ替わります。

[:script:]配列の値を入れ替える
var colors:Array=["red","green","yellow"];
colors[1]="black";
trace(colors);//出力:red,black,yellow
 配列に入っている値の個数よりも大きなインデックス番号を指定して値を代入すると、途中の値は空のままで指定の位置に値が入ります。

[:script:]位置を指定して値を入れる
//空の配列を作る
var myArray:Array=[];
//値を入れる
myArray[0]="a";
myArray[1]="b";
myArray[4]="e";
trace(myArray);//出力:a,b,,,e
 配列の空の位置の値を取り出すとundefiendになります。なお、undefiendは取り出した値を入れる変数のデータ型に応じて値が変換されます。たとえば、String型ならばnull、int型ならば0に変換されます。

[:script:]値がない位置の値を取り出した結果
var myArray:Array=["a","b",,,"e"];
//値がない位置
trace(myArray[3]);//出力:undefined
//値の個数より大きなインデックス番号
trace(myArray[9]);//出力:undefined

//String型の変数に代入した場合
var v3:String=myArray[3];
trace(v3);//出力:null
//int型の変数に代入した場合
var v9:int=myArray[9];
trace(v9);//出力:0
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 関数のネスティング(入れ子で定義する)も可能です。次の例はgetUser関数の中にgetID関数とgetName関数が定義されています

[:script:]関数の中に関数を入れ子で定義する
function getUser():Array { 
	var domain:String = "jq1";
    function getID():String { 
        return domain+"abc"; 
    } 
    function getName():String { 
        return "大重美幸"; 
    } 
    return ([getID(),getName()]); 
} 
//テスト
trace(getUser());//出力:jq1abc,大重美幸
 関数をネスティングする利点には、親関数getUser()のローカル変数の値をネストされた子関数getID()が利用できることがあります。このような形態を関数クロージャ(function closure)あるは関数閉包と呼びます。関数クロージャが他の関数に引数として渡されたり、ほかの関数から呼び出された場合にも内部のローカル変数の値は保持されます。

note
関数クロージャではthisを正しく理解して使う必要があります。
var a:int=1;
trace(this, this.a, a);//出力:[object MainTimeline] 1 1
function test():void {
	var a:int=2;
	trace(this, this.a, a);//出力:[object MainTimeline] 1 2
	closetest();
	function closetest():void {
		trace(this, this.a, a);//出力:[object global] undefined 2
	}
}
//テスト
test();
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 関数はFunctionクラスのインスタンスの値として扱うことができることから、他の変数に代入したり引数として渡すことができます。たとえば、次のようにheikin3関数を定義したとき、heikin3を変数myTest(データ型:Function)に代入することでheikin3()をmyTest()で実行できるようになります。

[:script:]関数を変数の値に入れて使う
//3つの値の平均を求める
function heikin3(a:Number, b:Number, c:Number):Number {
	var abc:Number = a+b+c;
	var ans:Number = abc/3;
	return ans;
}
//関数を変数に代入する
var myTest:Function = heikin3;
var ans:Number = myTest(10, 20, 30);
trace(ans); //出力:20
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 中上級者向けの内容になりますが、関数を定義する方法には関数式を使うやり方もあります。関数式でもfunctionを使って関数を定義しますが、関数名を指定しない点に注目してください。関数名がないことから関数式で定義した関数は匿名関数あるいは関数リテラルと呼ばれます。

関数式の書式:
var 変数:Function = function (引数:データ型, 引数:データ型, ...):戻す値のデータ型{
//実行するスクリプト
}

 次の匿名関数は引数の値を10倍した値を出力します。定義した匿名関数は、続く7行目で行っているように関数を代入した変数名にカッコを付けて、test(3)のように実行できます。

[:script:]値を10倍する匿名関数を定義する
var test:Function = function (a:Number):void{
	var ans:Number = a * 10;
	trace(ans);
};

//匿名関数を使う
test(3); //出力:30
 値を戻す匿名関数も定義できます。次の匿名関数は引数の値を10倍した値を返します。

[:script:]10倍した値を返す匿名関数を定義する
var test:Function = function (a:Number):Number{
	var ans:Number = a * 10;
	return ans;
};

var ans:Number = test(5);
trace(ans); //出力:50
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 同一のタイムライン内では同名の変数は1個しか宣言することが許されません。つまり、たとえ異なるキーフレームのフレームアクションでも変数名が同じならばそれは同じ変数であり同じ値が入っています。これをグローバル変数と呼びます。
 ところが、メソッドや関数を定義するfunctionブロックの内側で変数を宣言したとき、その変数は個別のfunctionブロックの中だけで利用できる変数になります。これをローカル変数と呼びます。
 functionブロックの中と外で同名の変数が定義してあるとき、functionブロックの外の変数はグローバル変数になり、functionの中で宣言した変数はローカル変数になります。もちろん名前の重複エラーになることもありません。
 次の例では変数aをfunctionの外で宣言しています。この場合、test1()、test2()のfunction内も含めて同一タイムラインにおいて変数aは共通のグローバル変数になります。

note
ムービークリップのタイムラインで定義してあるグローバル変数の値は、ムービークリップのインスタンスごとに保存されます。

[:script:]functionブロックの外で宣言するグローバル変数a
//変数aの宣言
var a:int=100;

function test1():void{
	//変数aに1加算する
	a += 1;
	trace(a);
}

function test2():void{
	//変数aを2倍する
	a *= 2;
	trace(a);
}

//テスト
test1(); //出力:101
test2(); //出力:202
trace(a); //出力:202
 一方、次の例では変数aをfunctionブロックの外だけでなく、test1()のfunctionブロックの中でも宣言して使っています。このとき、続くテストの結果を見るとわかるように、test2()で参照している変数aはブロックの外で宣言している変数aと同じ変数ですが、test1()の中で宣言してある変数aは名前が同じでもtest1()の中だけの変数、すなわちローカル変数であることがわかります。

[:script:]test1()ではローカル変数aを宣言して使う
//変数aの宣言
var a:int=100;

function test1():void{
	//ローカル変数aの宣言
	var a:int=5;
	//ローカル変数aに1加算する
	a += 1;
	trace(a);
}

function test2():void{
	//変数aを2倍する
	a *= 2;
	trace(a);
}

//テスト
test1(); //出力:6
test2(); //出力:200
trace(a); //出力:200
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 関数は次のようにfunctionで定義し、returnで演算結果を戻します。値はfunctionを呼び出した位置に戻ります。関数では演算に使用する値を引数で受け取ることができます。
 引数で受け取る値のデータ型と関数で戻す値のデータ型を指定できます。データ型の指定は省略可能ですが、データ型を指定することでコンパイル時にデータ型の妥当性がチェックされます。
 メソッドと同様に関数定義はタイムラインのキーフレームで行いますが、関数を定義してあるキーフレームを再生していなくても、同じタイムラインであればどこからでもその関数を利用できます。同一のタイムラインで同名の関数を定義することはできません。

書式:
function 関数名(引数:データ型, 引数:データ型, ...):戻す値のデータ型{
//実行するステートメント
return 戻す値;
}

次のheikin3()は引数で与えられた3つの数値の平均を求めて返す関数です。

[:script:]3つの値の平均を求める
function heikin3(a:Number, b:Number, c:Number):Number {
	var abc:Number = a+b+c;
	var ans:Number = abc/3;
	return ans;
}	
 次の例がheikin3()を使って3教科の点数の平均を求めた場合です。ここに示すようにheikin3(kokugo, sugaku, eigo)を実行して得られた値が変数heikintenに入ります。heikin3()で戻る値のデータ型をNumberに指定しているので、変数heikintenのデータ型と一致します。

[:script:]3教科の平均点を求める
var kokugo:uint = 76;
var sugaku:uint = 62;
var eigo:uint = 70;
var heikinten:Number = heikin3(kokugo, sugaku, eigo);
trace(heikinten); //出力:69.33333333333333

この秋に注目の本が出ます。ActionScriptのエラーメッセージを解説しよう!という、今までにないタイプのActionScript本です。この本の監修をさせてもらいました。

cover.jpg
ActionScript 3.0 エラーアーカイブス
- コンパイルエラー・コンパイラ警告・ランタイムエラーの解法 -

第一章 基礎知識
第二章 コンパイルエラー
第三章 コンパイラ警告
第四章 ランタイムエラー
総ページ数 376ページ

著者 加茂雄亮/監修 大重美幸
出版社 ソシム株式会社
発行日 2009年9月(予定)
定価 2800円
-----------------------------------------------------------------------------
「このエラーを出すヤツが居たら、そいつはクレイジーだ!」
エラーを出すのもプログラマの技術です。
ActionScriptの裏読み物として、この本は最高です!
(監修:大重美幸)
-----------------------------------------------------------------------------
(帯:推薦文から)

書いたのはロクナナが誇るActionScript界の注目株、JSFLにも精通した加茂雄亮(かもゆうすけ)君。加茂君はBeInteractiveことSpark project新藤愛大(しんどうよしひろ)君と同い年の20歳!二人ともすごいねー。

(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 returnを実行することでメソッドの中の残りの処理を中断できます。returnは関数の中で値を戻すためのステートメントですが、メソッドの中では戻す値を指定せずに使用します。
 次のtest()は引数aが0のときは処理を中断します。このスクリプトでは2行目で条件分岐のif文を使っています。これによりaの値が0のときだけ4行目のreturnが実行され、続く6行目が実行されずにtest()が終了します。aの値が0でないときはif文で囲った中が実行されずに6行目が実行されます。

[:script:]引数が0のとき処理を中断する
function test(a:int):void {
	if(a==0){
		trace("中断");
		return;
	}
	trace(10/a);
}

test(0);//出力:中断
test(5);//出力:2
(section01-05 データ型から抜粋)

 関数の引数に渡す値がプリミティブ型なのかリファレンス型なのかにも注意が必要です。プリミティブ型の変数を引数として渡したときは、関数の中でその引数に対して操作しても元の変数には影響がでません。一方、リファレンス型の変数を関数の引数として渡した場合には、関数の中で引数の値を変更すると元の変数の値が変化してしまいます。

値渡し(プリミティブ型)
 次の例では価格と個数から金額を計算するkeisan()を使っています。keisan()では変数tankaの値を引数kakakuで受け、それに個数を掛けた値をそのままkakakuの値として上書きしてます。結果を見るとわかるように演算後の変数tankaの値は2400のまま変化していません。

[:script:]引数で渡した変数は変化しない
var tanka:int = 2400;
var kingaku:int = keisan(tanka, 2);
//結果を調べる
trace(tanka); //出力:2400
trace(kingaku); //出力:4800

//引数で渡された変数を使って計算する
function keisan(kakaku:int, kosu:int):int {
	kakaku = kakaku * kosu;
	return kakaku;
}

参照渡し(リファレンス型)
 次の例は最小値を調べるためにArray型の変数を引数で渡した結果、元の配列の並びが変化してしまう例です。Arrya型の変数pricesを作り、数字の並びを配列として代入します。8行目以降で定義してあるgetMin()は引数で受けとった配列の中の最小値を調べて返す関数です。このとき、getMin()は引数vlistで受けた配列の値をvlist.sort()を実行して直接並べ替えています。この結果、2行目が実行されると最小値が変数lowPriceに代入されるだけではなく、引数として与えたpricesの値の並びも変えてしまうことになります。

[:script:]引数で渡した変数に入っていた配列の並びが変化してしまう
var prices:Array = [20, 56, 12, 40];
var lowPrice:int= getMin(prices);
//結果を調べる
trace(prices); //12,20,40,56
trace(lowPrice); //12

//引数で渡された変数を使って計算する
function getMin(vlist:Array):int {
	//vlistをソートする
	vlist.sort();
	//1番目の値を返す
	return vlist[0];
}

(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 引数の個数が決まっていない場合には、残りの引数を...restのように書いて変数restで受けることができます。restは変数名なので...vlist、...nokoriのように好きな変数名を使えます。引数の値は指定の変数に配列で入ります。
 次の例では引数はすべて変数vlistに配列で入ります。

[:script:]引数の個数を指定せず、すべて配列に入れる
function test(...vlist):void {
	//配列vlistの値を出力する
	trace(vlist);
}

//引数をテストする
test(10, 20, 30, 40);
//出力:10,20,30,40
 次の例では第1引数は変数aに入りますが、残りの引数はすべて変数restに配列で入ります。

[:script:]2個目以降の引数は配列に入れる
function test(a:String, ...rest):void {
	//引数の値を出力する
	trace(a);
	trace(rest);
}

//引数をテストする
test("色", "red", "green", "blue", "black");
 出力結果は次のようになります。変数aには"色"と入り、変数restには色の名前が配列で入ります。

出力結果:

red,green,blue,black
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 メソッドに引数を渡すことができます。引数にはデータ型を指定できます。次のスクリプトは、動かすインスタンスと移動距離を引数で指定できるようにmoveXメソッドを変更したものです。

[:script:]動かすインスタンスと距離を引数で指定する
//moveX()の定義
function moveX(mc:MovieClip, v:Number):void {
	mc.x = mc.x + v;
}

//moveX()を実行する
moveX(my_mc1, 150);
moveX(my_mc2, 200);
 このサンプルではmoveX()を2度実行しています。moveX(my_mc1, 150)ではmy_mc1を右へ150ピクセル移動させ、moveX(my_mc2, 200)ではmy_mc2を右へ200ピクセル移動させます。このように引数を使うことで同じような処理を1つのメソッドで実現できるようになります。
 メソッドに引数が指定してある場合、メソッドを実行する際に引数と同数の値を渡す必要があります。引数の個数が一致しない場合はエラーになります。また、引数のデータ型が一致しない場合もエラーになります。たとえば、次のようなケースではエラーになります。

[:script:]引数が一致せずにエラーになるケース
//moveX()の定義
function moveX(mc:MovieClip, v:Number):void {
	mc.x = mc.x + v;
}

//エラーになるケース
moveX(my_mc1);//引数の個数が合わない
moveX(my_mc2, 200, 15);//引数の個数が合わない
moveX("my_mc1", 200);//引数のデータ型が合わない

引数の省略と初期値
 メソッドの引数が省略されたときに初期値を指定することができます。引数に初期値を指定するには、「引数=初期値」のように指定します。次の例では引数a、bの初期値をそれぞれ1と10に設定しています。

[:script:]引数に初期値が設定してあるメソッド
function ab(a:int=1, b:int=10):void {
	trace(a+b);
}

//引数による結果の違いのテスト
ab();//出力:11
ab(5);//出力:15
ab(5,50);//出力:55
 引数を変えてテストした結果をみるとわかるように、初期値が設定してあれば引数の個数が不足してもエラーにはならず、省略した引数はその値に初期値が使用されます。  なお、引数に初期値が指定してあっても前の引数の値を省略することはできません。また、指定の引数の個数以上の引数を渡すとエラーになります。

[:script:]エラーになるケース
ab(, 30);//前の引数は省略できない
ab(5,6,7);//引数の個数が多い
 メソッドを定義する場合、複数の引数があるとき引数の省略は後ろから可能です。次の例では第2引数にのみ初期値を指定しているので、第2引数のみ省略可能になります。

[:script:]第2引数のみ省略可能
function ab(a:int, b:int=10):void {
	trace(a+b);
}

//引数による結果の違いのテスト
ab(5);//出力:15
ab(5,50);//出力:55

 次のように初期値を指定していない引数より前の引数に初期値を指定することはできません。

[:script:]前の変数の初期値だけ指定するとエラーになる
function ab(a:int=1, b:int):void {
	trace(a+b);
}

note関数の引数の値渡しと参照渡し」も参照してください。

来週に迫りました!新刊を購入予定の人はこの機会にぜひ!
新刊+ランチ付きのセミナーです。

as3note67ws.jpg

Summer Camp 2009:2Days
大重美幸のActionScript 3.0入門 CS4 集中特訓

8月20日(木)21日(金)
10:00 - 15:30(1日4時間 2日間で8時間の講義です)

詳しい情報と
お申し込みはこちらへ→Summer Camp 2009:2Days

bnr_summercamp2009.gif

(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 スクリプトの中でよく利用する処理はfunctionを使ってメソッドとして定義することができます。メソッドでは処理に使用する値を引数で受け取ることができます。メソッドのデータ型は省略可能ですが、省略しない場合には必ずvoidを指定します。
 メソッド定義はタイムラインのキーフレームで行いますが、メソッドを定義してあるキーフレームを再生していなくても、同じタイムラインであればどこからでもそのメソッドを利用できます。同一のタイムラインで同名のメソッドを定義することはできません。

メソッドの書式:
function メソッド名(引数:データ型, 引数:データ型, ...):void{
//実行するスクリプト
}

 次のスクリプトはmy_mcを右へ200ピクセル移動させるmoveXメソッドを定義するスクリプトです。このメソッドには引数はありません。

[:script:]moveX()メソッドの定義
function moveX():void {
 my_mc.x = my_mc.x + 200;
}

 moveXメソッドはmoveX()で実行できます。

[:script:]moveX()の定義と実行
//moveX()の定義
function moveX():void {
	my_mc.x = my_mc.x + 200;
}	
	
//moveX()を実行する
moveX();

書評04

|

廣畑大雅さんにFlexユーザーの立場から本の紹介をしてもらいました。ありがとうございます。(^ ^)/
今、blog.taiga.jpではTLF (Text Layout Framework) のレポートが絶賛更新中なので、Flexユーザーはそっちも要チェックです。
以下、リンクと書評の抜粋です。


blog.taiga.jp(廣畑大雅さん)

個人的には、「 Chapter06 Point クラスと Rectangle クラス」が一押しです。 Flex 開発者でも、少し変わったカスタムコンポーネントを作るときには、結局 UIComponent をベースにフルスクラッチしなければならないので、この手のネイティブな Flash のクラスの知識も必要になるんですよね。...webから抜粋...

taiga.jpg

(section01-02 変数と定数から抜粋)

 定数はconstで宣言します。定数名も変数名と同様に英数半角と記号を使った名前にします。一般的には定数名には大文字だけを使い、単語は_で区切るという表記規則が使われています。変数の場合と同様にconstで定数を宣言する際に同時にデータ型を指定できます。データ型を指定することでコンパイル時に型チェックが行われエラーを検出できます。
 次の例ではPRRとVERSIONの2つの定数を宣言しています。Numberは数値を示すデータ型です。

[:script:]定数の宣言
const PER:Number = 0.3;
const VERSION:String = "y10.02.a5";
 定数の値は変数と違って宣言と同時に1度しか設定できず、定数の値を後から代入しようとするとエラーになります。次の例は定数の値を後から変更しようとした場合です。このような操作はエラーになります。

[:script:]定数の値を後から変更するとエラーになる
const PER:Number = 0.3;
PER = 0.5;// ここでエラーになる。

[:script:]定数の値は宣言と同時に指定しなければならない
const VERSION:String;
VERSION = "y10.02.a5";// ここでエラーになる。
(section01-02 変数と定数から抜粋)

 変数はvarで宣言します。変数名には英数半角文字と半角記号を使うことを推奨されています。ただし、変数名を数字で始めることはできません。また、ActionScriptのキーワードを変数名に使ったり、演算子を名前の中に含めることもできません。
 varで変数を宣言する際に同時にデータ型を指定できます。データ型は値の属性や範囲を定義します。たとえば、変数をuint型に指定するとその変数には0または正の整数のみが入ります。データ型を指定することでデータの初期値が決まり、コンパイル時や実行時に型チェックが行われエラーを検出できます。
 次の例ではage、address、colorstの3つの変数を宣言しています。それぞれのデータ型はuint、String、Arrayです。uintは0または正の整数、Stringはストリング(文字列)、Arrayは配列を示すデータ型です。

[:script:]変数の宣言
var age:uint;
var address:String;
var colors:Array;
 変数を宣言すると同時に初期値を設定することもできます。

[:Script:]変数の宣言と初期値の設定を行う
var age:uint = 24;
var address_home:String = "茅ヶ崎市";
var colors:Array = new Array();
 次のように式を使った初期値の設定も可能です。

[:Script:]初期値の宣言で式を使う
var a:int = 1;
var b:int = 2+5;
var c:int = a*b;
 変数名をカンマで区切ることで複数の変数を同時に宣言することもできます。

[:Script:]1行で複数の変数を宣言する
var a:int = 1, b:int = 2, c:int = a+b;
trace(a, b, c);
//出力:1 2 3
 このとき、左の変数から先に宣言されていく点に注意が必要です。次の例のように変数aを宣言すると、変数b、cには未だ値が代入されおらずどちらも初期値の0のままなので、変数aの値は0になります。

[:Script:]変数aを宣言したときには、変数b、cには値が入っていない。
var a:int = b+c, b:int = 1, c:int = 2;
trace(a,b,c);
//出力:0 1 2

データ型を指定しない *
 変数にどんなデータ型の値が入るか特定できないときなど、データ型を指定せずに変数を宣言することもできます。この場合には明示的に*を型注釈として使うことができます。また、undefinedを代入したい変数のデータ型も*で宣言します。データ型を指定した変数にundefinedを代入するとnullと置き換えられます。

[:string:]データ型指定なしで変数を宣言する
var tmp;
var loadData:*;
var ghost:* = undefined;

正誤表20090812

|

■この訂正は初版のものです。補足の新規追加原稿も含んでいます。

p.36 スクリプト 行番号19の出力結果

誤:19  trace(a);//出力:200
正:19  trace(a);//出力:202


p.110 修正内容は次の投稿に書いてあります。
配列から値を抜き取って新しい配列を作る splice()


p.190 下から5行目

誤:長さ距離と角度
正:距離と角度


p.267 noteに加筆:

誤:privateに指定してある
正:private、finalに指定してある


p.273 メンバー属性の表組み staticの次の行に挿入。

final オーバーライドを禁止するメンバー。

p.289、p.290 サンプルファイルのアイコン抜け
アイコンを置く位置は、それぞれのスクリプトの横です。図のswfのタイトルバーにファイル名があるので、それを参考にしてください。

スクリプト:楕円を描く drawEllipse.fla
スクリプト:長方形を描く drawRect.fla
スクリプト:角丸四角形を描く drawRoundRect.fla


p.290 スクリプトの末尾にセミコロンが抜けてました。
(エラーにはならないんですが・・気持ち悪い)

長方形を描く
5  shape1.graphics.drawRect(0,0,150,100);

角丸四角形を描く
5  shape1.graphics.drawRoundRect(0,0,150,100,30,30);


p.291 1行目

誤:次の書式ように
正:次の書式のように


p.316 最後のスクリプトの見出し

誤:ビットマップデータのパターンで塗った四角形を描く
正:ビットマップデータのパターンで塗った円を描く


p.330 中見出し

誤:点の座標と番号の振り方
正:頂点の座標と番号の振り方


p.480 本文下から3行目

誤:ageとsexの変数
正:sizeとsexの変数


p.494 INDEX 「と」のグループ

誤:ドキュメントクラス・・・・253, 282
正:ドキュメントクラス・・・・282

書評03

|

沖縄のブロッコ・デリ・アーキテクツの木曽隆さん、大阪の宇都宮ウエブ製作所の宇都宮正宗さん、名古屋のアップルップルの山田拓生さん、そしてPicklesのタナカミノルさんに本の紹介をしてもらいました。ありがとうございます。(^ ^)/
以下、リンクと書評の抜粋です。ぜひ各ページへ行って全文を読んでください。


blocco deli architects(木曽隆さん)

今回はCS4の新機能追加にとどまらず、全面書き下ろしされたとのこと。前半のスクリプト基礎の話もより一層整理され、AS2を知らない層、プログラミングがこれからという方でもすっと始められる内容になっていると感じました。また、表示オブジェクトの話やTweenクラスやPointクラスなども網羅されているので、スクリプトでのアニメーションにこれから挑戦したい方に特にお奨めかな。...webから抜粋...

blocco_deli.jpg


宇都宮ウエブ製作所(宇都宮正宗さん)

というわけでこれからActionScript3を学ばれる方にとってはプログラマ、デザイナなど職種を問わず絶対にお勧めの一冊です。
冒頭でも説明したように、もともとAS3なんて全くさわったこともなかった僕が、この改訂前のほうの本でAS3を使えるようになったことからも、ステップアップの先ず初めの一冊として価値のある本だと思います。...webから抜粋...

utsunomiya.jpg


アップルップル(山田拓生さん)

表紙の帯には「これを読め!!」と書かれていますが、まさに「これを読め!!」ば一通りの事はできる印象でした。まだざっと見た感じではありますが、特にライブラリを使って簡単に解決するのではなく、基本的な原理を解説してくれているので、ライブラリに頼ることなくまずは基本を押さえなさい、というメッセージが込められている感じがしました。...webから抜粋...

appleple_yamada.jpg


Pickles(タナカミノルさん)

入門ノートとなってますが、プログラムのまったくの初心者の人には、ちょっと難しいかなと思います。スクリプトが多少解ってて、次のステップアップを自主的にしようと思っている人向けな本かなと思います。サンプルを一つ一つクリアして、基礎固めをする感じの本です。(そーゆう意味の入門か...)
辞書的な本では無いので、ヘルプ大好きッコにはちょっと物足りないかもしれません。
とはいえ、毎度の事でサンプルが充実しているので、そっちから見ると楽しく学べるかもです。...webから抜粋...

pickles.jpg

(section09-03 Flash Player10の新しいGraphicsメソッドから抜粋)

 図形を分割する頂点をマウスでドラッグするように動かして再描画すれば、図形をマウスドラッグで変形させることができます。次の例では四角形を図のように4分割し、2番の頂点をマウス座標に合わせて移動させています。

fig09-03-18_shiji.jpg fig09-03-19.jpg
fig: マウス座標の位置に頂点2を作り、頂点をマウスドラッグで移動させます。
swfを試す

 ただし、クリックした座標に単純に2番の頂点を移動させるとドラッグしなくてもマウスダウンしただけでテクスチャが変形してしまいます。そこでマウスダウンした位置のUV座標も再計算して再描画します(52行目)。この状態からマウスドラッグに合わせて頂点を移動させれば(61行目)、マウスダウンした位置から頂点をドラッグすることになり、マウスでイメージをつかんで引っ張っているように見えます。

面白法人カヤックの閃光部のみなさんからお礼のメールを頂きました!
あざーす。 (^ ^)/

松村 昌宏さん

カヤックに入る前は海で生活してました。
1年の数ヶ月を冒険に費やしていた自分は
スキル的にもまだまだ未熟で知識も不足してます。
そんな自分がまさにこれだ!と唸った一冊でした。

matsumura2.jpg

原 真人さん

ご献本ありがとうございます!
FlashCS4もってるのですが、いつも使い慣れたCS3を使いがちでいいかげんシフトしなきゃな、と思っていました。
これを機会にシフトします!ありがとうございます!

hara.jpg


鈴木佐武郎さん

以前から大変お世話になってます

これで僕もXYZ軸が完璧におぼえられそうです!
ありがとうございました!!

suzuki.jpg

村井 孝至さん

プログラミングの基礎知識からもりもり書いてあるのが印象的でした。
安心して新人におすすめできる内容で非常にありがたいです!
是非新人くんに読み込ませたいと思います。
ありがとうございました!!

murai.jpg


松山太一さん

「Adobe Flash CS3 詳細ActionScript3.0入門ノート」にとても助けられています。
CS4版となった今回の書籍を今から読むのが楽しみです。
どうもありがとうございます!

matsuyama.jpg


中村元宣さん

AS3の初学の参考書として入門ノートには非常にお世話になりました。
改訂版をざっと拝見させて頂きましたが、
FP10やCS4の新機能だけでなく、匿名関数や再帰など
基礎的な部分もかなり補足されていて、最初からこの本で
勉強できる人は幸せだなぁとしみじみ思いました。
この度はありがとうございます!

nakamura.jpg


安藤諒さん

以前、学生の時にCS3の入門ノート初版を読ませていただきました。
改訂を重ねて今回が完全改訂版!とのことで、
まだ自由が丘支社へは来ていないのですが、読めるのを楽しみにしています。
今使ってるのがCS3なので、これを機にCS4へアップデート
考えてみます!
すばらしい本をお送りいただきありがとうございます。

ando.jpg


嶋田 俊宏さん

ASの入門書に関しては少しうるさい
カヤックのタイムライン派の嶋田と申します。

今まで数々の入門書に挑んでは破れ、はや9連敗・・。
心が富士の樹海に向かっている時に目に入ってきたのは
「これを読め!!」の文字。

・・・。

僕は運命なんかは信じないタイプですが
こればっかりは運命だと思いました・・。

ありがとうございます。
生きていく事が出来そうです。

shimada.jpg


來島政史さん

つい最近CS4に触れてCS3との違いに戸惑ったばかりなので、改訂版が届くのを楽しみにしています!また、話は変わりますがAS3を始めた頃は大重さまの著書に大変お世話になりました。合わせてお礼申し上げます。ありがとうございます!

kijima.jpg


中野聡子さん

お久しぶりです。本有難うございます!!
いつも大重さんの本にはお世話になってます。
だいぶAS3に慣れてはきましたが、
まだまだなのでこの機会にもう一度基礎からやり直したいと思います。
ただCS4がない...
体験版をいれてやります!

nakano.jpg


日高一明さん

入門ノートからずっと大重さんの本のお世話になっています。
まだまだ身についてない部分がたっぷりありますので1から勉強させていただきます
ありがとうございました

hidaka.jpg


小林太郎さん

説明が平易であるのに、内容はしっかりと書かれているので
一冊読み通せば大抵のことは自分でリファレンスとかみながら
かけるようになる。
この本以上にバランス感覚の良いAS3の本はないと思います。
完全改訂版が出たことにお祝い申し上げますと同時に
本を贈っていただきありがとうございます。

kobayashi.jpg

書評01

|

カタマリのSaqooshaさん、trick 7さん、F-siteの沖良矢さん、カヤックの中村元宣さん、ロクナナの加茂雄亮さんに、本の紹介をしてもらいました。ありがとうございます。
お願いして褒めてもらったというわけではありませんが(献本なので、まあ、ちょっとそれある?)、それぞれの目線から本を紹介してもらってます。

以下、リンクと書評の抜粋です。どんな本かな?と思っている方は、ぜひ各ページへ行って読んでください。各サイトは内容も濃いので、知らなかった人はブックマークするといいですよ。


Saqoosha(さくーしゃ)さん

あー、いや、でもこれわかりやすいよ。初心者がわからないところをよく理解してる人が書いてるから。これをじっくりやってもわかんないんだったらたぶん向いてないw 500ページ (!) 近くあって初心者だけじゃなく中級レベルまでカバーされてるからこれだけあれば、まー、たいていのことはなんとかなるんじゃないかしらん。...webから抜粋...

saq.jpg


trick 7(寺井周平さん)

Flashの本にもいろいろあって、本によっては、そこに何が書かれてたかを記憶にフックさせておいて、あとで必要になったら都度調べるっていうタイプの本もありますが、この入門ノートは、お作法として記憶に定着させておくべきタイプの本、Flash系の制作会社受けるなら身に付けとくべき知識の足固めという感じでしょうか。...webから抜粋...

trick7.jpg


F-site(沖 良矢さん)

いきなりクラス定義などから始めるのではなく、フレームアクションの入力から進めていきますので、スクリプトに抵抗のある方でもじっくりと読み進めていけば、きっとActionScript 3マスターへの階段を登る助けになることでしょう。もちろん、クラス定義の章もきちんと用意されていますので、「入門段階はクリアしたけど、クラスはちょっと難しい......」という方も、必読です。...webから抜粋...

fsite.jpg


面白法人カヤック閃光部 _level0.KAYAC(中村元宣さん)

全体として、正直これで勉強したかった...!と思うくらいのアップグレード感です。
新機能以外の部分はCS3でも対応できますので、AS3を一通りさらっておきたい方はひとつ試してみてはいかがでしょうか...webから抜粋...

kayac.jpg


xingxx(加茂雄亮さん)

今夏注目の一冊ですね。優しくも深い概念と実践的なサンプルが多く、シンタックスに関してはじっくりと学習でき、躓きやすいサーバーとの連携やXMLのトラバース、またFlashPlayer 10で加わった3Dに関しても掘り下げており、初心者さんに大変おすすめの内容です。この夏にAS3を習得してはいかがでしょうか?...webから抜粋...

kamo.jpg

■この訂正は初版のものです。

p.110 のsplice()の説明が間違っていました。内容を訂正しお詫びします。間違っていたのは、第2引数で指定する値がendIndexではなく、deleteCountである点です。さらに第3引数以降で値を挿入できます。
splice()は次のようなメソッドです。p.108のslice()とスペルが似ているので注意です。また、インデックス番号は0から数えるので、「1番目」とは2個目の値を指しています。番目を「インデックス番号」と読み替えてください。

訂正文:
 抜き取る際に値を複製せずに元の配列から値を削除します。また、値を抜き取った位置に新しい値を代わりに挿入することもできます。これにより、splice()は値を抜き出すだけでなく、配列の値の削除や置換の目的でも利用できます。
 splice()の書式は次のとおりです。第1引数startIndexは抜き取り開始位置のインデックス番号、第2引数のdeleteCountでは抜き取る値の個数を指定します。入れ替える値は第3引数以降にカンマで区切って指定します。

書式:
splice(startIndex:int, deleteCount:uint, ... values):Array

 次の例では配列stockListのインデックス番号1から4個の値を抜き取って新しい配列pickUpListを作成します。元の配列stockListからは抜き取られた値が削除されています。

[:script:]配列のインデックス番号1から4個の値を抜き取る
var stockList:Array = ["a","b","c","d","e","f"];
var pickUpList:Array = stockList.splice(1,4);
//取り出した配列
trace(pickUpList);//出力:b,c,d,e
//元の配列からは値が抜き取られて削除されている
trace(stockList);//出力:a,f
 splice()は第2引数以降を省略できます。splice(3)のように引数を省略するとインデックス番号3から最後までの値を抜き出します。

[:script:]配列のインデックス番号3から最後までの値を抜き出す
var stockList:Array=["a","b","c","d","e","f"];
var pickUpList:Array=stockList.splice(3);
trace(pickUpList);//出力:d,e,f
trace(stockList);//出力:a,b,c
 引数をマイナスにすると末尾から個数を数えて取り出します。次の例は末尾から4個の値を取り出した配列を作ります。元の配列のstockListからは末尾の4個が削除されています。

[:script:]配列の末尾から4個を抜き出す
var stockList:Array=["a","b","c","d","e","f"];
var pickUpList:Array=stockList.splice(-4);
trace(pickUpList);//出力:c,d,e,f
trace(stockList);//出力:a,b

追加サンプル:
値を入れ替えるサンプルがないので、ここに新しいサンプルを追加しましょう!

[:script:]配列のインデックス番号2から3個の値を抜きとり、代わりに"X"、"Y"を挿入する。
var stockList:Array=["a","b","c","d","e","f"];
var pickUpList:Array=stockList.splice(2,3,"X","Y");
trace(pickUpList);//出力:c,d,e
trace(stockList);//出力:a,b,X,Y,f
(section09-03 Flash Player10の新しいGraphicsメソッドから抜粋)

 次のサンプルは図形を8個の三角形に分割した場合です。頂点は9個になり、それぞれの座標は6〜9行目でverticesに登録しています。8個の三角形は頂点を0-1-3、1-3-4、1-2-4のよう結んで作ります。この頂点の並びを11〜19行目でindicesに登録します。0〜8の各頂点のUV座標は21〜24行目でuvtDataに登録します。たとえば、7番の頂点のUV座標は(0.5, 1)になります。

fig09-03-16_shiji.jpg

[:script:]]図形を8個の三角形に分割してテクスチャを貼る
var shape:Shape=new Shape();
//ビットマップデータで塗る
var bmpdata:BitmapData=new IMG_8268(0,0);
shape.graphics.beginBitmapFill(bmpdata);
//頂点の座標
var vertices:Vector.<Number>=new Vector.<Number>();
vertices.push(0,0, 160,0, 320,0);//頂点0-1-2
vertices.push(0,120, 160,120, 320,120);//頂点3-4-5
vertices.push(0,240, 160,240, 320,240);//頂点6-7-8
//三角形を描く頂点
var indices:Vector.<int>=new Vector.<int>();
indices.push(0,1,3);//三角形A
indices.push(1,3,4);//三角形B
indices.push(1,2,4);//三角形C
indices.push(2,4,5);//三角形D
indices.push(3,4,6);//三角形E
indices.push(4,6,7);//三角形F
indices.push(4,5,7);//三角形G
indices.push(5,7,8);//三角形H
//頂点のUV座標(0〜1)
var uvtData:Vector.<Number>=new Vector.<Number>();
uvtData.push(0,0, 0.5,0, 1,0);//頂点0-1-2
uvtData.push(0,0.5, 0.5,0.5, 1,0.5);//頂点3-4-5
uvtData.push(0,1, 0.5,1, 1,1);//頂点6-7-8
//三角形を描く
shape.graphics.drawTriangles(vertices,indices,uvtData);
shape.graphics.endFill();
shape.x=100;
shape.y=50;
addChild(shape);

 さきほどと同じように頂点の座標を変更すると、頂点の移動に合わせてテクスチャとして貼ったビットマップデータも変形します。
vertices.push(0,30, 160,0, 320,30);//頂点0-1-2
vertices.push(30,120, 190,120, 290,120);//頂点3-4-5
vertices.push(0,210, 160,240, 320,220);//頂点6-7-8

fig09-03-17.jpg
(section09-03 Flash Player10の新しいGraphicsメソッドから抜粋)

 図形にビットマップデータをテクスチャとして貼るには、各頂点がビットマップデータのどの位置になるかをUV座標で指定します。UV座標はビットマップデータの左上角を(0,0)、右下角を(1,1)とした比率で示す座標です。

fig09-03-10_shiji.jpg
 次のサンプルは三角形を描き、ビットマップデータの左上半分をテクスチャとして塗るスクリプトです。三角形の頂点の座標をvertices、描画する頂点番号をindices、そして頂点に対応するビットマップのUV座標をuvtDataで指定しています。ビットマップデータはビットマップシンボルをIMG_8268の名前でリンケージ書き出ししています。

[:script:]三角形にビットマップデータのテクスチャを貼る
var shape:Shape=new Shape();
//ビットマップデータで塗る
var bmpdata:BitmapData=new IMG_8268(0,0);
shape.graphics.beginBitmapFill(bmpdata);
//頂点の座標
var vertices:Vector.<Number>=Vector.<Number>([0,0, 320,0, 0,240]);
//三角形を描く頂点
var indices:Vector.<int>=Vector.<int>([0,1,2]);
//頂点のUV座標(0〜1)
var uvtData:Vector.<Number>=Vector.<Number>([0,0, 1,0, 0,1]);
//三角形を描く
shape.graphics.drawTriangles(vertices,indices,uvtData);
shape.graphics.endFill();
shape.x=50;
shape.y=50;
addChild(shape);

fig09-03-12.jpg

(section09-03 Flash Player10の新しいGraphicsメソッドから抜粋)

 drawTriangles()は三角形を描くためだけの単純なメソッドではありません。
drawTriangles()は図形を三角形で分割し、図形の変形に応じて変形するビットマップを貼るためのメソッドです。この機能は3D物体のテクスチャ表現が主目的ですが、2Dのアニメーションでも利用できます。drawTriangles()の書式は次のとおりです。なお、第4引数のcullingは3D空間でのカリング(隠れた部分を描画しない)の設定なので、ここでは初期値であるカリングを行わない"none"のまま使用します。

書式: drawTriangles(vertices:Vector, indices:Vector = null, uvtData:Vector = null, culling:String = "none"):void

頂点の座標と番号の振り方
 drawTriangles()の第1引数のverticesは頂点の座標、第2引数のindicesは頂点の番号です。verticesは先の例でも見たように頂点のローカル座標(x,y)をペアにしてベクターに入れます。indicesは頂点の番号を0から順に振った連番です。頂点の番号の振り方は自由ですが、この頂点番号の並びとverticesの座標の並びを合わせます。また、図形を分割する三角形の形や個数も自由です。

fig09-03-09.jpg
[:note:]カリングを行う場合は、三角形の頂点を時計回りに指定します。

本日、販売開始です。さっそくAmazon入荷してます。よろしくー!!

まったく新しいAS3の世界にようこそ。
全面書き下ろし!Flash CS4の楽園への招待状。

Adobe Flash CS4 詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

定価3500円+税、496ページ、2色刷り

---------------------------------------------------------------------------------
初心者にもわかりやすい。すぐに試せる実践的なサンプルを満載。
本質を突いた解説が確実にあなたのスキルを高めます。
上・中級者がこぞって推薦する、初心者が真の実力を備えるための標準書。
ActionScript 3はこの本からスタート!(本書の帯より)
---------------------------------------------------------------------------------

(section09-03 Flash Player10の新しいGraphicsメソッドから抜粋)

 drawTriangles()を使うと簡単に三角形を描くことができます。drawTriangles()では、三角形の頂点をベクターで指定します。次のサンプルではローカル座標(0,0)、(150,80)、(-50,120)を頂点とした三角形を描いています。drawTriangles()の引数のベクターverticesではこの3つの座標を連続した6個の数値で指定します(4〜6行目)。

[:script:]drawTriangles()を使って三角形を描く
var shape:Shape=new Shape();
shape.graphics.beginFill(0xFF0000);
//頂点の座標
var vertices:Vector.<Number>=Vector.<Number>([0,0, 150,80, -50,120]);
//三角形を描く
shape.graphics.drawTriangles(vertices);
shape.graphics.endFill();
shape.x=200;
shape.y=100;
addChild(shape);
fig09-03-08_shiji.jpg
まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

このアーカイブについて

このページには、oshige2009年8月に書いたブログ記事が含まれています。

前のアーカイブはoshige: 2009年7月です。

次のアーカイブはoshige: 2009年9月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ