« 2005年07月 | メイン | 2005年09月 »
p60
図「フレームアクションに設定できる要素」の中に誤植がありました。
一番下の「関数・メソッド定義」の説明の記述です。
誤:
定義されているキーフレームが一度が再生されていなければならない。
正:
定義されているキーフレームが一度再生されていなければならない。
p62
「MovieClipオブジェクトが受け取るイベント」の項目で、イベントハンドラとタイミングの表においてMovieClip.onDragOutとMovieClip.onDragOverのタイミングの説明が逆になっていました。
誤:
MovieClip.onDragOut --- このムービークリップの上でマウスダウンしたままカーソルが外へ出て再び戻った。
MovieClip.onDragOver -- このムービークリップの上でマウスダウンしたままカーソルが外へ出た。
正:
MovieClip.onDragOut --- このムービークリップの上でマウスダウンしたままカーソルが外へ出た。
MovieClip.onDragOver -- このムービークリップの上でマウスダウンしたままカーソルが外へ出て再び戻った。
p65
「Buttonオブジェクトが受け取るイベント」の項目で、イベントハンドラとタイミングの表においてButton.onDragOutとButton.onDragOverのタイミングの説明が逆になっていました。
誤:
Button.onDragOut --- このボタンの上でマウスダウンしたままカーソルが外へ出て再び戻った。
Button.onDragOver -- このボタンの上でマウスダウンしたままカーソルが外へ出た。
正:
Button.onDragOut --- このボタンの上でマウスダウンしたままカーソルが外へ出た。
Button.onDragOver -- このボタンの上でマウスダウンしたままカーソルが外へ出て再び戻った。
p68
「onイベントハンドラ」の項目で、イベントとタイミングの表においてdragOutとdragOverのタイミングの説明が逆になっていました。
誤:
dragOut --- このインスタンスの上でマウスダウンしたままカーソルが外へ出て再び戻った。
dragOver -- このインスタンスの上でマウスダウンしたままカーソルが外へ出た。
正:
dragOut --- このインスタンスの上でマウスダウンしたままカーソルが外へ出た。
dragOver -- このインスタンスの上でマウスダウンしたままカーソルが外へ出て再び戻った。
p77
データ型の種類の説明で、Objectをobjectと小文字で書いているところがありました。
下から4行目
誤:
リファレンス型にはMovieClip、objectがあります。
正:
リファレンス型にはMovieClipとObjectがあります。
p78
データ型のチェックの表の1行目の「ストリング → string」に緑色の帯が敷いてあり、この表の項目名のように読めますが、この行は項目名ではありません。ストリングをtypeof演算子で評価するとstringが返されるという意味です。この表に項目名を挿入するならば、左は「データの種類」、右は「typeofで返る値」となります。
訂正:
ストリング → stringの下に敷いてある緑の帯を取る。
補足記事:
typeofで返る値はすべて小文字である点にも注意してください。
p84
p.84 下から4行目
誤:たとえば、MyClass()というカスタムクラスがあったとき、
正:たとえば、MyClassというカスタムクラスがあったとき、
p99
見出し、本文ともにcontinueのスペルが間違っていました。uが抜けています。
誤:contine
正:continue
これにより、p365 INDEXのC欄にあるcontinueもuが脱字になっています。
p128, p130
論理和の演算子orを使っていました。orは使用を推奨されていない演算子なので、orの代わりに||を使ってください。orでも動くんですが、やっぱ使うのはヤメましょう。申し訳ないです。(う〜ん、ちょうどこれを書いている頃にLingoを使っていたのかも・・・・)
訂正前:
//壁で跳ね返る
if ((mc._x < 0) or (mc._x > 320)) {
dx *= -1;
}
if ((mc._y < 0) or (mc._y > 240)) {
dy *= -1;
}
訂正後:
//壁で跳ね返る
if ((mc._x < 0) || (mc._x > 320)) {
dx *= -1;
}
if ((mc._y < 0) || (mc._y > 240)) {
dy *= -1;
}
p.141
スクリプトに間違いがありました。クラス名が違っています。(サンプルを途中で書き換えたのがそのままになっていた・・・)
誤:
class RotorMC extends MovieClip{
正:
class Rollover extends MovieClip {
p.133
コラムNoteの1行目に脱字がありました。
誤:オブジェクト言語
正:オブジェクト指向言語
p211〜p217
Sample 7-4の節(p211〜p217)において、右ページ側の上にある「Sample 7-4」の記述が間違ってます。
誤:
Sample 7-3
正:
Sample 7-4
p213, p217
Showcaseクラス定義ファイルのスクリプトに間違いがありました。実行結果には影響しませんが、あきらかにムダな記述があります。選ばれているオブジェクトをチェックするためにクラスプロパティ selectedObjを使いますが、執筆当初は_globalオブジェクトにselectedObjプロパティを設定していました。スクリプトを変更した際に、以前の記述が残っていました。
誤:
} else if (_global.selectedObj != this) {
正:
} else {
p.213〜p.218
クラスメンバーを参照するには、「クラス名. クラスメンバー」の書式を使いますが、クラス定義内では自身のクラスメンバーをクラスメンバー名だけで参照できました。
p.213で掲載しているShowcaseクラス定義では、インスタンスメソッドからselectedObjクラスプロパティを参照する際にShowcase .selectedObjあるいはShowcase .selectedObj.eject()のようにクラス名を付けて参照しています。これでも正しく動作しますが、クラス名を省略し、それぞれselectedObj、selectedObj.eject()と簡素に記述することができます。
したがって、p.213のShowcaseクラス定義のスクリプトは次のように書き換えることができます。(p.215〜p.218の解説ページも同様に読み替えてください)
Showcaseクラス定義
class Showcase extends Zoom {
//Showcaseクラスで共通のクラスプロパティ
static var selectedObj:Object;
//インスタンスプロパティ
var homept:Object;
var homexs:Number;
var homeys:Number;
//コンストラクタ
function Showcase(targetMC:MovieClip, n:Number) {
// スーパークラスの初期化
super(targetMC, n);
/* Showcaseのプロパティ */
//元の座標とスケール
homept = {_x:mc._x, _y:mc._y};
homexs = mc._xscale;
homeys = mc._yscale;
}
//カレントオブジェクトのエントリー処理
function entry(pt:Object, xs:Number, ys:Number):Void {
if (selectedObj == this) {
//自分をイジェクトする
selectedObj.eject();
//} else if (_global.selectedObj != this) {
} else {
//現在のカレントオブジェクトをイジェクトする
selectedObj.eject();
//自分をエントリーする
selectedObj = this;
this.zoomTo(pt, xs, ys);
}
}
//自分をイジェクトする
function eject():Void {
selectedObj = undefined;
this.zoomTo(homept, homexs, homeys);
}
}
p269
Note:コラムにマスクの中でダイナミックテキストを使う場合の対処方法を書きましたが、ウソを書いてしまいました。申し訳けないことです。とほほ。
誤:
テキストフィールドをスクリプトで作れば、・・・
正:
setMask()メソッドを使ってマスクを設定すれば、・・・
p305
四角形を描くboxメソッドのスクリプトの最終行にゴミが入っていました。
誤:
}l();
正:
};
一定時間待つ
ムービークリップの再生を一定時間だけ停止したいってことありますよね。
Flashではムービークリップが停止stop()しても、その中に配置してあるムービークリップは停止しないので、ループアニメーションを一定時間だけ再生したいというときに便利に使えるスクリプトです(言ってる意味わかります?)。
class Navi {
var mc:MovieClip;
var waitTimer:Number;
//コンストラクタ
function Navi(targetMC:MovieClip) {
mc = targetMC;
}
//一定時間待つ
function waitAndPlay(milisec:Number) {
mc.stop();
clearInterval(waitTimer);
waitTimer = setInterval(this, "timeout", milisec);
}
//タイムアウト
function timeout() {
clearInterval(waitTimer);
mc.play();
}
}
使い方は簡単。まず、再生を一旦停止したいムービークリップのタイムラインの最初のフレームアクションで次のようにNaviクラスのインスタンスを作ります。
var naviObj:Navi = new Navi(this);
次に、一旦停止をしたいフレームをキーフレームにし、3秒間止めたいならば次のフレームアクションを書きます。
naviObj.waitAndPlay(3000);
さらに別のフレームで5秒間止めたければ、そのフレームをキーフレームにして次のフレームアクションを書きます。
naviObj.waitAndPlay(5000);
メインのタイムライン、個々のムービークリップのタイムラインごとにNaviクラスのインスタンスを作っておけば、それぞれのムービークリップごとに一定時間停止を自由に指定できるようになりますね。