メイン

正誤データ(3版) アーカイブ

2008年4月14日

p381〜p383

TweenImageLoaderクラスのスクリプトにおいて、Tweenクラスのインスタンスをローカル変数imgTweenで保持していますが、マウス操作などを行うとトゥイーンの途中でもimgTweenがガベージコレクションされてしまい、トゥイーンが最後まで行われないことがあるようです。トゥイーンが最後まで行われるように、imgTweenをインスタンス変数で宣言してください。お手数かけます。

p.381スクリプト 10行目に挿入
訂正前:
var imgHolder:MovieClip;

//コンストラクタ

訂正後:
var imgHolder:MovieClip;
var imgTween:Tween;

//コンストラクタ

-------------
p.381スクリプト 下から10行目
訂正前:
var imgTween:Tween = new Tween(
訂正後:
imgTween = new Tween(

-------------
p.382 1つ目の例:Tweenクラスでフェードイン
訂正前:
var imgTween:Tween = new Tween(
訂正後:
imgTween = new Tween(

-------------
p.382 3つ目の例:水平スケールをトゥイーンする
訂正前:
var imgTween:Tween = new Tween(
訂正後:
imgTween = new Tween(

-------------
p.383 1つ目の例:回転角度をトゥイーンする
訂正前:
var imgTween:Tween = new Tween(
訂正後:
imgTween = new Tween(

p432

p380で紹介しているTweenImageLoaderクラスをp.432でも使用しています。こちらのスクリプトでもTweenクラスのトゥイーンが途中で中断してしまうことがないように、インスタンスをインスタンス変数imgTweenに保存するように訂正してください。
imgTweenをローカル変数で保持すると使用中にも関わらずガベージコレクションされてしまうことがあるようです。

-------------
p.432スクリプト 18行目に挿入
訂正前:
var imgHolder:MovieClip;

//コンストラクタ

訂正後:
var imgHolder:MovieClip;
var imgTween:Tween;

//コンストラクタ
-------------
p.432スクリプト 下から2行目
訂正前:
var imgTween:Tween = new Tween(
訂正後:
imgTween = new Tween(

XMLSlideShow.asに機能追加

TweenImageLoaderクラスの訂正記事だけだと申し訳ないので、TweenImageLoaderクラスと組み合わせて使うXMLSlideShowクラスにスライドショーの送り、戻し、ジャンプ、停止トグルの関数を追加したいと思います。XMLSlideShowクラスは、XMLファイルから写真リストを読み込んでスライドショーを行うクラスです。p.434に掲載されています。
次のスクリプトをXMLSlideShow.asに追加して、XMLSlideShowのインスタンスから呼んでください。この追加機能が正しく動作するように、先のTweenImageLoaderクラスの訂正を必ず行ってください。
なお、この追加機能はp.430のSlideShowクラスでも利用できます。
//--------追加関数
//1つ進む
 public function goNext():void {
	timerObj.reset();
	timerObj.start();
	//currentNoのカウントアップ
	currentNo = (currentNo>=photoXml.photo.length())?1:(currentNo+1);
	loadImageNo(currentNo);
}
//1つ戻る
 public function goPrev():void {
	timerObj.reset();
	timerObj.start();
	//currentNoのカウントダウン
	currentNo = (currentNo<=1)?photoXml.photo.length():(currentNo-1);
	loadImageNo(currentNo);
}
//指定の番号へジャンプ
 public function goNo(no:int):void {
	timerObj.reset();
	timerObj.start();
	currentNo = Math.max(1, Math.min(photoXml.photo.length(), no));
	loadImageNo(currentNo);
}
//停止と再生のトグル
 public function togglePause():void {
	if(timerObj.running){
		timerObj.stop();
	}else{
		timerObj.start();
	}
}
使用例は次のようになります。p.437の最初に書いてあるフレームアクションに加筆したスクリプトです。ステージにはnext_mc、prev_mcのムービークリップを作っておきます。
import XMLSlideShow_work;
var xmlUrl:String = "xml/photolist.xml";
var slideObj:XMLSlideShow = new XMLSlideShow(container_mc, xmlUrl);

container_mc.addEventListener(MouseEvent.CLICK, onClick);
next_mc.addEventListener(MouseEvent.CLICK, onNext);
prev_mc.addEventListener(MouseEvent.CLICK, onPrev);

function onClick(event:MouseEvent):void {
	slideObj.togglePause();
}
function onNext(event:MouseEvent):void {
	slideObj.goNext();
}
function onPrev(event:MouseEvent):void {
	slideObj.goPrev();
}

About 正誤データ(3版)

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

前のカテゴリは正誤データ(2版)です。

次のカテゴリは正誤データ(4版)です。

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