oshige: 2009年11月アーカイブ

ロクナナワークショップで「最大23%OFF 複数割」が始まりました!
有効期限は一年間。全ての講座で利用できます。

企業研修や新人研修で複数の講座を利用したい!お友達・会社の同僚と一緒にいろんな講座を受講したい!そんな方に必見のキャンペーンです。

詳しくは、ロクナナワークショップNEWS [複数割」受講チケット最大23%OFF]

67ws_bnr_23off.gif

※ぼくのActionScript3.0セミナーは来年1月21日と1月28日です。

大重美幸のActionScript 3.0初級講座(前半) 2010年1月21日
大重美幸のActionScript 3.0初級講座(後半) 2010年1月28日


image.jpg

Adobe EDGE newsletter第3回
『大重美幸のこれ見落としてませんか? ActionScript 3.0』
配列の値の並べ替えをマスターする』が公開されました。

今回のテーマは配列の値の並べ替えです。配列は複数の値を管理したいときに便利な機能です。CS4 からは配列を扱うクラスに Vector クラスが加わりましたが、基本的には Array クラスと同じです。配列を使うときに、よく分からなくて、頭の中が混乱していませんか? 配列を使いこなせてこそ一人前。配列を使ってスマートなスクリプトを書きましょう。

「Section08-01 クラス定義の構造」の「クラスメンバーを定義する」(p.245)にサンプルを追加します。このサンプルのポイントは、コンストラクタにおいてクラスプロパティfriendListにインスタンスの参照であるthisを登録することで、作ったインスタンスを管理しているところです。

[:script:]Friend4クラスの定義
package {
  public class Friend4 {
    //クラスプロパティ
    public static var seqNo:uint;
    public static var friendList:Array=new Array();
    //インスタンスプロパティ
    public var no:uint;
    public var name:String;
    public var age:uint;
    //コンストラクタ
    public function Friend4(na:String,ag:uint) {
      no= ++seqNo;
      name=na;
      age=ag;
      //インスタンスのリストに参照を保管する
      friendList.push(this);
    }
    //
    // クラスメソッド
    //
    //平均年齢を求める
    public static function getAgeAverage():Number {
      if (friendList.length==0) {
        return 0;
      } else {
        var ageSum:uint;
        //年齢の合計を出す
        for (var i:int=0; i<friendList.length; i++) {
          var friend:Friend4=friendList[i];
          ageSum+=friend.age;
        }
        //平均を計算する
        var ave:Number=ageSum/friendList.length;
        //小数点2位で四捨五入する
        ave=Math.round(ave*10)/10;
        return ave;
      }
    }
    //最年長を求める
    public static function getOldestProfile():String {
      if (friendList.length==0) {
        return null;
      } else {
        //friendListの複製
        var tmpList:Array=friendList.slice();
        //年齢でソートする
        tmpList.sortOn("age",Array.NUMERIC);
        //最後の人を取り出す
        var oldest:Friend4=tmpList[tmpList.length-1];
        //プロフィールを返す(インスタンスメソッドの実行)
        return oldest.getProfile();
      }
    }
    //
    // インスタンスメソッド
    //
    //プロフィールを返す
    public function getProfile():String {
      var info:String="no."+no+" "+name+"、"+age+"歳です。";
      return info;
    }
  }
}
ファイル一式をダウンロードする
Section14-01 外部イメージファイルを読み込んでフェードインで表示するスクリプト(p.406)のサンプルはLoaderクラスを継承した作りになっているために難しいかもしれません。そこでフレームアクションで実行できるシンプルな例を紹介しておきます。
このスクリプトのポイントは、画像ファイルの読み込み完了イベントEvent.COMPLETEのリスナーをLoaderのインスタンスのcontentLoaderInfoプロパティにaddEventListener()する部分です。(6行目)

[:script:]読み込み完了後にフェードインで表示する
//読み込む画像ファイルを指定する
var url:String = "image/IMG_8171.jpg";
var urlReq:URLRequest = new URLRequest(url);
//ローダーを作る
var photoLoader:Loader=new Loader();
photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
//画像を読み込む
photoLoader.load(urlReq);
//画像を表示する
photoLoader.x = 100;
photoLoader.y = 50;
addChild(photoLoader);
//ドロップシャドウを付ける
var dsf:DropShadowFilter=new DropShadowFilter();
dsf.alpha = 0.8;
photoLoader.filters = [dsf];

import fl.transitions.Tween;
import fl.transitions.easing.*;
var tw:Tween;
//フェードインで表示する
function onLoaded(eventObj:Event):void {
	tw = new Tween(photoLoader,"alpha",Regular.easeInOut,0,1,1,true);
}

fadein.jpg
swfを試す

ファイル一式をダウンロードする
Section14-02 テキストファイルの読み込み(p.408)のサンプルはちょっとややこしいので、フレームアクションで実行できるシンプルな例を紹介しておきます。

なお、1〜18行目までは読み込んだテキストデータを表示するためのテキストフィールドを作っています。あらかじめ作ってあるテキストフィールドに表示するならば、この部分は必要ありません。

UTFファイルを読み込む例を示していますが、Shift-JISのファイルを読み込む場合は24行目のSystem.useCodePageの値をtrueに設定します。

[:script:]テキストフィールドを作り、外部テキストファイルを読み込む
import flash.text.TextFieldAutoSize;
//テキストフィールドを作る
var fld:TextField=new TextField();
fld.x = 100;
fld.y = 50;
fld.width = 280;
fld.height = 180;
fld.border = true;
fld.multiline = true;
fld.wordWrap = true;
fld.autoSize = TextFieldAutoSize.LEFT;
addChild(fld);
//書式の設定
var tf:TextFormat = new TextFormat();
tf.size = 18;
tf.color = 0x333333;
fld.defaultTextFormat = tf;

//URLLoaderのインスタンスを作る
var txtloader=new URLLoader();
var urlReq:URLRequest=new URLRequest();
urlReq.url = "./data/sample_utf.txt";
//unicodeならばfalse
System.useCodePage = false;
txtloader.load(urlReq);
//読み完了イベントのリスナーを登録する
txtloader.addEventListener(Event.COMPLETE,completeHandler);
//リスナー関数
function completeHandler(eventObj:Event):void {
	//読み込んだテキストをフィールドに表示する
	fld.text = txtloader.data;
}

ファイル一式をダウンロードする

新しい本のお知らせです。翔泳社より「ActionScript3.0辞典[FlashPlayer10/9対応]」が発売になります。800ページという箱のようなボリュームです。
(だから表紙デザインは段ボール箱になっている)

大重美幸、植木友浩、林拓也、野中文雄、伊藤のりゆき (順不同) の5人の共著です。
価格2980円+税、発行日は11/17です。どうぞよろしくお願いします。

4798119016

ActionScript3.0辞典[FlashPlayer10/9対応]

最初にswfを表示する際の読み込み待ちについて簡単に紹介しましょう。AS2まではframesLoadedプロパティを使って、特定のフレーム、特定のインスタンスが読み込まれたどうか判断して読み込み待ちを行いました。

[:script:]最後まで読み込まれたらtopへ進む。それまではループする。
if (this.framesLoaded == this.totalFrames) {
    gotoAndPlay("top");
}else{
   gotoAndPlay("loop");
}

framesLoadedプロパティを使った方法はAS3でも使えますが、AS3からは次に示すようにloaderInfoのprogressイベントのリスナーになり、bytesLoadedとbytesTotalのプロパティを使うことでダウンロード量を調べることができます。

[:script:]プログレスバーを表示するフレームアクション
stop();
var bar:Sprite = new Sprite();
bar.graphics.beginFill(0x000000);
bar.graphics.drawRect(0,0,1,5);
bar.graphics.endFill();
bar.y=stage.stageHeight/2;
addChild(bar);
loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
loaderInfo.addEventListener(Event.COMPLETE, completeHandler);

function progressHandler(eventObj:ProgressEvent):void {
	var per:Number = loaderInfo.bytesLoaded/loaderInfo.bytesTotal;
	bar.width = stage.stageWidth*per;
}
function completeHandler(eventObj:Event):void{
		removeChild(bar);
		loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
		loaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
		gotoAndStop("top");
}
swfを試す
1回実行するとブラウザにキャッシュされるので、2回目以降はプログレスバーが表示されない場合があります。

これを見て外部jpegやswfを読み込むLoaderでの処理と同じと思った人も多いはず。そうです。LoaderのcontentLoaderInfoですね。contentLoaderInfoは読み込むコンテンツオブジェクトのloaderInfoの値なんですね。

まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

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

このアーカイブについて

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

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

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

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

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