2008年6月23日

AS3.0 ピタゴラスの定理で原点からカーソルまでの距離を計算


package{

    import flash.display.Sprite;
    import flash.events.Event;

    public class distance extends Sprite{
      
       //コンストラクタ
       public function distance(){
          init();
        }

       //初期化メソッド
        private function init():void{
          addEventListener(Event.MouseEvent , onEnterFrameHandler);
        }

       private function onEnterFrameHandler(event:Event):void{
          var mX:Number = mouseX;
          var mY:Number = mouseY;

          //ピタゴラスの定理を使って、距離dを求める
          var d:Number  = Math.sqrt(mX * mX + mY * mY);
          trace("原点からの距離=" + d);
        }
    }
}

  1. このクラスはドキュメントクラスとして使用するのでSpriteクラスの性質を引き継ぐ必要があるため、extendsでSpriteクラスを継承する。
  2. カーソルの動きを毎フレーム追跡するのでEventクラスをインポート。
  3. イベントリスナーと関数を関連づけることでonEnterFrameHandlerを毎フレーム実行す。

記述の流れは
「使用するクラスのインポート → クラス定義 → コンストラクタ → 初期化メソッド → イベントハンドラ」

2008年6月16日

メモ スライドショー作成に使用したAS

numChildrenプロパティ
表示リスト内のオブジェクトの子の数を返す

import flash.display.Sprite;

var container1:Sprite = new Sprite();
var container2:Sprite = new Sprite();

var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFFCC00);
circle1.graphics.drawCircle(40, 40, 40);

var circle2:Sprite = new Sprite();
circle2.graphics.beginFill(0x00CCFF);
circle2.graphics.drawCircle(80, 40, 40);

container2.addChild(container1);
container1.addChild(circle1);
container1.addChild(circle2);

表示結果
trace(container1.numChildren); // 2
trace(container2.numChildren); // 1
trace(circle1.numChildren); // 0
trace(circle2.numChildren); // 0



removeChildAt()メソッド
DisplayObjectContainerの指定したindex位置から子リストを削除する



dataFormatプロパティ
URLDataFormatクラスのパブリックプロパティ
ダウンロードしたデータがテキスト、生のバイナリデータ、または URL エンコードされた変数のいずれであるかを制御する
dataFormat プロパティの値が URLLoaderDataFormat.TEXT の場合、受け取るデータは、ロードされたファイルのテキストを含むストリングです。

dataFormat プロパティの値が URLLoaderDataFormat.BINARY の場合、受け取るデータは、生のバイナリデータを含む ByteArray オブジェクトです。

dataFormat プロパティの値が URLLoaderDataFormat.VARIABLES の場合、受け取るデータは、URL エンコードされた変数を含む URLVariables オブジェクトです。

デフォルト値 : URLLoaderDataFormat.TEXT.

useCodePageプロパティ
Systemクラスのパブリックプロパテティ
外部テキストファイルを解析するときにどのコードページを使用するかを Flash Player に示すブール値です。このプロパティを false に設定すると、外部テキストファイルは Unicode と解釈されます。これらのファイルは、保存する際に Unicode でエンコードする必要があります。このプロパティを true に設定すると、Flash Player を実行するオペレーティングシステムの通常のコードページを使用して外部テキストファイルが解釈されます。useCodePage のデフォルト値は false です。

dispatchEventプロパティ
EventDispatcherのパブリックプロパティ
イベントをイベントフローに送出します。イベントターゲットは EventDispatcher オブジェクトです。これに対して dispatchEvent() が呼び出されます。


contentLoaderInfoプロパティ
Loaderクラスのパブリックプロパティ

 ロードされているオブジェクトに対応する LoaderInfo オブジェクトを返します。LoaderInfo オブジェクトは、Loader オブジェクトとロードされたコンテンツオブジェクト間で共有されます。LoaderInfo オブジェクトは、ロードの進行状況に関する情報と、ロードされたファイルに関する統計を提供します。

ロードに関連するイベントは、Loader オブジェクトの contentLoaderInfo プロパティで参照される LoaderInfo オブジェクトによって送出されます。contentLoaderInfo プロパティは、コンテンツのロードの前も、有効な valid LoaderInfo オブジェクトに設定されているので、ロードの前にイベントリスナーをオブジェクトに追加できます。


2008年5月29日

AS3.0 クラス定義スクリプトの中身


AS3.0から2.0にはなかったpagkageという要素が必要になる

クラス定義スクリプトの基本的な構造は↓

package パッケージ名{

    public class クラス名{
   
        //クラスプロパティ
        public static var 変数名:タイプ名;
        public static const 定数名:タイプ名;

        //クラスメソッド
        public static function メソッド名():タイプ名{
           ステートメント;
        }
   
        //コンストラクタ
        public function クラス名(){
            ステートメント;
        }

        //インスタンスプロパティ
        public var 変数名:タイプ名;
        public const 定数名:タイプ名;

        //インスタンスメソッド
        public function メソッド名():タイプ名{
           ステートメント;
        }
    }
}

パッケージ
パッケージを使わないで定義が出来ても、packageブロックで囲まなければいけない


クラスメンバー(クラスプロパティとクラスメソッド)
インスタンスメンバー(インスタンスプロパティとインスタンスメソッド)
この二つの違いはstaticキーワードを付加するかどうかで決まる


クラスのインスタンスを作る関数コンストラクタ
コンストラクタは何も実行しないメソッド。何もしないコンストラクタは記述を省略することができる
・クラスの定義スクリプトはステートメントの無いコンストラクタを簡素化できる
・コンストラクタは記述しなくても、Flashが自動的にコンストラクタを補ってくれる
・ステートメントを記述しなくてもよいが、記述すればインスタンスが作られた際に実行することができる
・インスタンスを作る際に引数を受け取ることができる

//コンストラクタの記述
asファイルの定義時
public function メソッド名(){
}
    ↓下記の記述もコンストラクタと同じ
flaファイルの記述で
var オブジェクト名:クラス名 = new クラス名();
しかしコンストラクタには値を返すためのreturnが無い
戻り値のデータ型も指定できない


例 Testクラスを定義し、コンストラクタのcolor引数で色名を受け取り、その値をインスタンスのmyColorプロファイルの値として設定する
package{
    public class Test{
        public var myColor:String;

        //コンストラクタ
        public function Test(color:String){
        myColor = color;
        }
    }
}

インスタンスを作成し、出力した場合
var test01:Test = new Test("red");
var test02:Test = new Test("blue");
trace(test01.myColor);
trace(test02.myColor);
出力
red
blue



2008年5月27日

メモ 最近使ったMathメソッド


数値の絶対値を返すMath.abs
正負の符号を無視して数値のみを返す

var num:Number = -12;
var numList:Number = Math.abs(num);
trace(num);
trace(numList);
出力
-12
12



擬似乱数を返すMath.random
例 円の塗りを毎回変える
var color:int = Math.random()*0xffffff;
var mc:Sprite = new Sprite();
mc.graphics.beginFill(color);
mc.graphics.drawCircle(100,100,100);
addChild(mc);

2008年5月26日

メモ for文で

配列オブジェクトをfor文で配列内の数だけ、処理を実行させるのは今まではfor eachなどを使っていたが

for( i ; i<配列オブジェクト.length; i++){
    (・・・・・・・・処理・・・・・・・・・・・・・・);
}
で次からやる。

2008年5月20日

AS3.0 Pointクラス

点を扱う「Pointクラス」
Pointクラスは点の座標を値として扱うことが可能になる
var オブジェクト名:Point = new Point( x座標 、 y座標 );
例  新しいオブジェクトpoint01をPointクラスとしてx=50, y=100の点の値を格納
   var point01:Point = new Point(50,100);
   trace(point01);
   //出力表示 (x=50,y=100)



Pointクラスプロパティ「length」
原点(0,0)から点までの長さを簡単に得られる
Pointクラスオブジェクト.length;
例 原点からPointクラスオブジェクトまでの長さ
   var point01:Point = new Point(50,100);
   trace(point01.length);
   //出力表示 111.80339887498948


Pointクラスメソッド「add」、「subtract」
Pointクラスの値を加算、減算できる
加算
Pointクラスオブジェクト.add(加算する別のPointクラスオブジェクト);
減算
Pointクラスオブジェクト.subtract(減算する別のPointクラスオブジェクト);

 var vec1:Point = new Point(5,20);
 var vec2:Point = new Point(0,10);
 var vec3:Point = vec1.add(vec2);
 var vec4:Point = vec1.subtract(vec2);
 trace("vec1は"+vec1);
 trace("vec2は"+vec2);
 trace("vec3は1に2を加算した為"+vec3);
 trace("vec4は1に2を減算した為"+vec4);
 trace(vec3.x);
 trace(vec4.y);
出力表示
 vec1は(x=5, y=20)
 vec2は(x=0, y=10)
 vec3は1に2を加算した為(x=5, y=30)
 vec4は1に2を減算した為(x=5, y=10)
 5
 10


Pointクラスメソッド「distance」
点と点の直線距離を求められる(2点間のベクトルの大きさを示す)
※計算で得られる値は0か正の値になる
Point.distance( Pointクラスオブジェクト-その1 、 Pointクラスオブジェクト-その2 );
例 Pointクラスオブジェクトのpt1とpt2の直線距離を求める
   var pt1:Point = new Point(50,100);
   var pt2:Point = new Point(200,250);
   var d:Number = Point.distance( pt1 , pt2 );
   trace(d);
   出力表示 212.13203435596427



Pointクラスメソッド「equals」
2点の値が等しいかどうかを調べる
等しい場合はtrue、等しくない場合falseとして値を得る
Pointクラスオブジェクト.equals(調べるPointクラスオブジェクト);
例 pt1とpt2の値が等しいかどうかを調べる
  var pt1:Point = new Point(50,100);
  var pt2:Point = new Point(200,250);
  var d:Boolean = pt1.equals(pt2);
  trace(d);
  出力表示 false



Pointクラスメソッド「interpolate」
2点の間を計算して点を出す
Point.interpolate(点1,点2,補間レベル);
補間レベルは0~1で調整する
補間レベルの値が0に近づけば点1に、1に近づけば点2に計算結果が近くなる
例 pt1とpt2の値をpt3に補間レベル0.5(半分)で代入
  var pt1:Point = new Point(0,100);
  var pt2:Point = new Point(550,100);
  var pt3:Point = Point.interpolate(pt1,pt2,0.5);
  trace(pt3);
  出力表示 (x=275,y=100);



2008年5月 9日

AS3.0 No.03  Spriteクラスの表示リストの切り替え


三つのオブジェクトの並び順を切り替える


var container:Sprite = new Sprite();
addChild(container);


var circle:Sprite = new Sprite();
circle.graphics.beginFill( カラー配列 、1);
var cx:int = 100;
var cy:int = 100;
var r:int = 70;
circle.graphics.drawCircle(cx,cy,cr);

var triangle:Sprite = new Sprite();
var tx:int = 170;
var ty:int = 50;
var tw:int = 100;
var th:int = 150;
triangle.graphics.beginFill( カラー配列 、1);
triangle.graphics.moveTo(tx,ty);
triangle.graphics.lineTo(tx+tw/2,th);
triangle.graphics.lineTo(tx-tw/2,th);
triangle.graphics.endFill();

var box:Sprite = new Sprite();
box.graphics.beginFill( カラー配列 、1);
var bx:int = 60;
var by:int = 80;
var bw:int = 100;
var bh:int = 100;
box.graphics.drawRect(bx,by,bw,bh);
box.graphics.endFill();


container.addChild(circle);
container.addChild(triangle);
container.addChild(box);

//クリックイベントを受け取るように設定
container.addEventListener(MouseEvent.CLICK , clicked);

//クリックされたオブジェクトを最前面に表示する
function clicked(event:MouseEvent) : void{
container.setChildIndex(DisplayObject(event.target),2);
}
5.9_as3.0.swf※上記は全て手打ちですので決してそのまま試用しないでください。


新しい範囲

1.塗りを終了するendFillメソッド
    例 変数.graphics.beginFill( カラー配列 、透明度 );
        変数.graphics.endFill();


2.基本データ型 int
    符号付きの32ビット整数を表すデータ型。正または負の整数を表すときに使用。
    ちなみに正の整数のみを表す場合は「uint」のデータ型を使用する。


3.表示オブジェクトを制御するクラスDisplayObject


4.子オブジェクトのインデックスを設定するsetChildIndex()
    例 mc.setChildIndex( 表示オブジェクト名 、 インデックス位置 );
    インデックスの数値が大きいほど手前に表示される。


2008年5月 8日

AS3.0 No.02 Spriteクラスで描画する

透明度50%の青い四角をステージの左上に描画する

var 変数:Sprite = new Sprite();//新しいSpriteクラスを作る

変数.graphics.beginFill(0x0066cc、0.5);//SpriteクラスにbeginFillメソッドで色と透明度を指定
変数.graphics.drawRect(0,0,300,300);//座標と四角の形を指定

addChild(変数);//表示リストに追加
5.8_as3.0.swf

※addChildでSpriteクラスの表示リストに追加する時、後に追加したものが表に表示されていく。


今回使ったgraphicsクラスのメソッド

1.色と透明度を指定するbeginFillメソッド
    例 変数.graphics.beginFill( カラー配列 、透明度 );
    ・カラー配列は「0x」を頭に付けて記述。
    .透明度は%を0~1で記述。(たとえば75%は0.75で記述)

2.四角の形を指定するdrawRectメソッド

    例 変数.graphics.drawRect( x座標 、y座標 、幅 、高さ );

3.円の形を指定するdrawCircleメソッド
    例 変数.graphics.drawCircle( x座標 、y座標 、半径 );



2008年4月26日

AS3.0 No.1 新しくなったイベント処理 ムービークリップインスタンスのクリック編


AS3.0はイベント処理の方法が大きく変化。
AS2.0では、インスタンスのクリックはonPressイベントハンドラを使って処理をしていた。

例:ステージ上にあるインスタンスmy_mcをクリック(AS2.0)
my_mc.onPress = function(){
trace("hello!");
}

上記と同じ処理をAS3.0では、イベントリスナーを使って次のように記述。

my_mc.addEventlistener(MouseEvent:CLICK, onClick);
function onClick(event:MouseEvent):void{
trace("hello!");
}