p045
変数theNameに値が入っていない場合だけを考慮していて、値が空白の場合を処理していませんでした。やっぱ、空白の場合もマズイですよね。
p.45 2つ目のスクリプト例 3行目のif文
訂正前:
if (myname != null) {
訂正後:
if ((myname != null)&&(myname != "")) {
変数theNameに値が入っていない場合だけを考慮していて、値が空白の場合を処理していませんでした。やっぱ、空白の場合もマズイですよね。
p.45 2つ目のスクリプト例 3行目のif文
訂正前:
if (myname != null) {
訂正後:
if ((myname != null)&&(myname != "")) {
importするパッケージのベースパスとなるクラスパスの設定は各Flashムービーのパブリッシュ設定のFlashパネルのActionScriptのバージョン設定にもあるので、補足しておきます。
p.167 本文6行目
誤:ベースパスは環境設定の
正:ベースパスは環境設定およびパブリッシュ設定の
ムービーにドキュメントクラスを指定している場合には、フレームアクションでもコアクラス以外のクラスをimportしなければならないので、このことを補足しておきます。
追加原稿:
ただし、ドキュメントクラスを指定した場合には、フレームアクションでもコアクラス以外のクラスをimportしなければなりません。
え〜、AS3で仕様が変更になっておりました。
訂正の報告が遅くなってすみませんでした。m(_ _)m
AS3では、同じパッケージ内(フォルダ内)にあるクラスファイル同士は互いにimportせずともアクセスできます。それがinternalというメンバー属性です。
削除:p.186の本文7行と1番目のスクリプトまで
この部分の記述を削除することから1ページの空きができるので、5刷以降では次の内容を追加原稿として差し込むことにしました。
これにともない、内容が被ってしまうp.187の右コラムのNoteを削除します。
追加原稿:
クラスパスの設定とパッケージ
Flashがクラスのパッケージを検索開始するクラスパスは、ファイルメニューの[環境設定...]のActionScriptパネルの[言語:ActionScript 3.0設定]で設定します。あるいは、パブリッシュ設定のFlashパネルのActionScriptバージョンからActionScript 3.0を選び、その設定パネルのクラスパスの設定でファイルごとにクラスパスを指定することができます。
クラスパスの指定では、パブリッシュするFlashファイルからの相対パスを利用できます。ファイルメニューの[環境設定...]を見るとのカレントフォルダを示す「.」が指定してあるのがわかります。
相対パスを使えることから、Flashファイルが「myTest/sample/ball/test_ball.fla」にあり、クラス定義ファイルが「myTest/src/com/oshige/Ball.as」にあったとき、test_ball.flaのパブリッシュ設定で「../../src」をクラスパスに設定すればimport com.oshige.BallでBallクラスを使えるようになります。
このとき、Ballクラス定義ではpackage com.oshigeのようにパッケージを指定します。クラスパス設定でsrcフォルダ以下を指定することで、Ballクラスのパッケージ指定を変更せずにクラスファイルを使うことができます。
最後の1文を次のように補足します。
誤:staticはクラスメンバーかどうかを示す属性なので、アクセス制限の属性と重ね合わせて設定できます。
正:static、overrideは、アクセス制限の属性と重ね合わせて設定します。
また、以下のメンバー属性についても説明を追加補足します。
メンバー属性表の定義の説明
internal --- 同じパッケージ内およびサブクラスから参照できるメンバー。
private --- クラス内でのみ参照できるメンバー。サブクラスからも参照できない。オーバーライドできない。
override --- オーバーライドを行うメンバー。
スーパークラスのクラスメンバーを利用する場合の注意についての説明のポイントがずれていたのでリライトしました。(書いていたときは何か混乱していたのかなあ・・・)
本文差し替え:
クラス継承すると、サブクラスのスクリプトからスーパークラスのクラスメンバーとインスタンスメンバーを利用できるようになります。ただし、クラスメンバーについてはそれはサブクラスのクラス定義スクリプトでの利用に限られます。
たとえば、スーパークラスMyClassAにクラスメンバーとして変数a、メソッドtestA()が定義してあるとき、サブクラスのMyClassBに対してMyClassB.aあるいはMyClassB.testA()を実行した場合を試してみましょう。
# MyClassA.asとMyClassB.asのスクリプトはそのままです。
p.202 下から5行目の2行とスクリプト。(2番目のパラグラフ)
本文とスクリプト差し替え:
MyClassBはMyClassAを継承していることから、MyClassBのクラスメンバーを参照する場合と同じようにMyClassAのクラスメンバーを利用できるように思えます。しかし、MyClassBからMyClassAのクラスメンバーを呼び出すと未定義エラーになります。
//未定義エラーになる。
MyClassB.classMethod();
trace(MyClassB.classProp);
本書の発売から1年が経過しまして、たくさん読んでいただき感謝しております。
皆様のおかげで、今回、5刷りを行うことになりましたが、4刷りまでにほぼ直したつもりが、セミナー等で使用しているうちに「ここは直しておいた方がいいかなあ・・・」と無視できない箇所がまだまだ出てきました。本当に申し訳ありません。長年ライターをやっている者として恥ずかしいです。
ときどき読者の方にお会いすることがあり、お叱りどころか恐縮するぐらい感謝されることがあります。お役に立てていてうれしい限りです。
もし、完全改訂するチャンスがあるときは、この1年余りでわかってきたことなどを注意深く検討し、より初心者のためにわかりやすいサンプルと構成に直したいと思います。
今後ともよろしくお願いします。
大重美幸