Luar's Flash Playground:《闪客实战》勘误
《闪客实战》勘误 (10-04-2004)
(新增以橙色表示)
印刷错误:
  • 第IV页:网址由ttp://www.luar.com.hk改为http://www.luar.com.hk
  • 彩页第2页:穿越隧道的颜色相反了。
  • 第22页中间部分:假设将nextmovie.swf加载到代码...应改为假设将nextmovieA.swf加载到代码...,代码loadMovieNum("nextmovie.swf", 1);应改为loadMovieNum("nextmovieA.swf", 1);。(谢谢读者Oscar提供)
  • 第73页第9行:代码duplicateMovieClip应改为attachMovie。(谢谢读者piao提供)
  • 第97页,倒数第10行,第2帧的代码:gotoAndPlay(2);应为:gotoAndPlay(1);。(谢谢读者并州一号提供)
  • 第100页,倒数第3行,第2帧的代码:gotoAndPlay(2);应为:gotoAndPlay(1);。(谢谢读者并州一号提供)
  • 第125页第8和12行,源文件名称应该分别为2-11b.fla2-11c.fla
  • 第370页底部:代码fscommand("trapallkeys", "false");应改为fscommand("trapallkeys", "true");。(谢谢读者hetengsh提供)
  • 第429页A.1第7点:特别是制作的...应改为特别是著名的...
技术错误:
  • 第28页中间部分:duplicateMovie时复制Movie Clip的depth修正,详情请按此
  • 第212和213页,定时器组件制作中,_formatvalue()_timerLoop()并不是私有方法,只是一个时间轴里函数,根据教程做法,是无法做到私有方法的。
本文章由發表。
意見
"; print "沒有意見。
 "; } ?>
  • 第73页第9行:duplicateMovieClip应改为:attachMovie

    由piao於02-05-2003發表

  • may need an errata page

    由sim_irv於16-05-2003發表

  • 第75页第10行:影片剪辑fade_mc是一个空影片剪辑,没有时间轴,他的程序可以看成是在主影片时间轴中执行。

    这种解释是错误的。事实上fade_mc.onEnterFrame=function () {
    .....
    }
    这段代码在那里执行,onEnterFrame的时间函数就在那里执行。

    例如:big_mc中包含small_mc,在big_mc的frame 1中写入:small_mc.onEnterFrame=function () {
    trace(_name);
    }
    把bag_mc放到stage,运行发现trace输出big_mc。

    由蒋冠雄於26-05-2003發表

  • localToGlobal()和globalToLocal()的解释好像有问题。反正我看不太懂。

    由蒋冠雄於26-05-2003發表

  • 回應空影片剪輯沒有時間軸問題,這其實是關於Function應用域(Scope)問題,在“2.1.5 目標路徑問題”一節有解釋,Function有效控制範圍是它身處的時間軸,因此對空影片剪輯的Function,它的控制範圍是它身處的主影片時間軸;也就是我所謂空影片剪輯沒有時間軸意思,至於影片剪輯時間軸裡定義的Function,無論它是否依附在子影片剪輯上,它的應用域仍然是它身處的時間軸。
    Function應用域執行次序是先本地變量(即本地應用域Local Scope),例如那些用var定義在Function裡Variable,用this指示是自己等例子,其次執行次序就是Function所處時間軸應用域Function Scope。關於這一點,可以參考“2.1.4 函數的本地變量”一節。

    所以big_mc中有small_mc.onEnterFrame=function () { trace(_name); }的例子,應用域在big_mc時間軸,輸出big_mc,如果改為small_mc.onEnterFrame=function () { trace(this._name); },變成本地應用,輸出small_mc。

    luar於26-05-2003發表

  • 回應localToGlobal()和globalToLocal()的問題,只要打開CD-Rom的Ch1\1-17.swf和1-18.swf,前者是全局位置,後者是本地位置。所有在主影片的影片剪輯的_x,_y都是全局位置,所有在影片剪輯裡的子影片剪輯的_x,_y都是本地位置,如果要知道big_mc.small_mc相對主影片的全局位置,單靠small_mc的_x,_y是沒有可能,因此利用localToGlobal()就可以做到這種本地位置到全局位置轉換。globalToLocal()則相反,希望以上解釋能令你明白。

    luar於26-05-2003發表

  • 谢谢Luar。fucntion的scope问题,我已明了。
    关于localToGlobal(),我不理解的是第36页:“mcB的红心在舞台左上角时,mcx和mcy并不是0、0”。后来我发现,你是在onClipEvent(mouseMove)中执行localToGlobal(pt);所以实际上执行的是mcB.localToGlobal(pt),也就是把mcB内部的本地位置转换成全局位置(公式应该是pt.x=big_mc._x+big_mc.small_mc._x+pt.x,而pt.x转换前=big_mc.small_mc_x。)所以才会造成那种奇怪的现象。

    由蒋冠雄於29-05-2003發表

  • 总的来说,书写得很不错。很多重要、实用的问题其他falsh的书中提都不提。因为他们是抄Flash的帮助,而不像luar你,的确是把自己的Flash编程经验整理后写到书中的。加油,希望能再出一些好书。例如,针对程序员,而不是美工人员的书。

    由蒋冠雄於29-05-2003發表

  • 你的公式是怎樣計算出來?

    luar於30-05-2003發表

  • 「《閃客實戰》勘誤」裡的錯誤可真多,不知可否把錯誤的消息發到我的郵箱。
    ————一個好學的,極普通的閃客。

    由柳平洋於30-06-2003發表

  • 請問台灣地區買得到您寫的書嗎?

    由R於16-09-2003發表

  • 台灣好像有書店入口大陸簡體字書。

    luar於16-09-2003發表

  • 第97頁,倒數第10行:
    第2幀的代碼如下:
    gotoAndPlay(2);
    應為:gotoAndPlay(1);

    由並州一號於27-09-2003發表

  • 第100頁,倒數第三行:
    gotoAndPlay(2);
    應為:
    gotoAndPlay(1);
    嘻嘻,俺的水平不高只能發現些小錯誤......

    由並州一號於27-09-2003發表

  • 拜讀大作,發現在 P.73 頁中,有關 attachMovie() 與 onLoad() 之間的關係,似乎有所不正確。

    該例指出 onLoad()可放入 mc 的時間軸中,利用連結 Link 方式,由 attachMovie() 呼叫產生新 mc,則該新 mc 的 onLoad() 會執行。

    經實際執行後發現,這 onLoad() 並不會執行;可在 this.onEnterFrame 中,加入 trace( fade_dir ) 這指令於前,會發現到輸出為 undefined。

    後來我在 \"ActionScript for Flash MX: The Definitive Guide, 2nd Edition\" 這書中的 MovieClip.onLoad() Reference 發現到,這的確不會執行,而是用在物件類別建立時才能執行。 it is used at the class level to initialize the instances of a MovieClip subclass.

    想就這問題向你請教,謝謝!

    由tonys於30-12-2003發表

  • 同上帖。

    我發現該例1-31c能執行的原因,是在big_mc的this.onEnterFrame()這出了問題。

    因當新 mc 產生,其 onLoad()並未執行,所以 fade_dir 為 undefined。當 onEnterFrame()第一次執行時,if(fade_dir == 1)這為false,所以執行 else 部份的指令,將 fade_dir 設為1;故其後就如同 1-31b一般執行!

    所以新 mc 的 onLoad() 還是沒有執行。

    由tonys於30-12-2003發表

  • 對不起,最近工作忙,現在才回覆。
    你說得對的,attachMovie()出來的MovieClip沒有onLoad事件,createEmptyMovieClip()出來的MovieClip都沒有onLoad事件
    在書中第75頁已經交待了。

    luar於04-01-2004發表

  • Luar¡AÁÂÁ§Aªº¦^ÂÐ!

    ¦ý¥HP.75ªº¤èªk¦Ó¨¥¡A§Úµo²{¦³­Ó¤èªk§ó¦n¥Î!

    ¨º´N¬O Flash MX ©Ò¤ä´©ªº attachMovie ²Ä¥|­Ó°Ñ¼Æ initObject¡A³o¦b Flash Help ¤¤¡A¥u¦³¦C¥X¦Ó¤w¡A¥¼´¿¸Ô²Ó¤¶²Ð¹L¡F¥i¦b "ActionScript for Flash MX: The Definitive Guide, 2nd Edition" ³o®Ñ¤¤ªº MovieClip.attachMovie() Reference ¦³¸Ô²Ó¤¶²Ð!

    ºK¿ý­ì¤å¡A¦p¤U:

    When the optional initObject parameter is provided, its direct properties (properties attached directly to initObject, not those retrieved via the prototype chain) are copied into the new clip and become immediately accessible. For example:

    // Create a generic object to transfer properties to the new tennisBall_mc instance
    var tempObj = new Object();
    // Add a speed property for transfer to tennisBall_mc
    tempObj.speed = 200;
    // Pass tempObj to attachMovie()
    court_mc.attachMovie("ball_symbol", "tennisBall_mc", 1, tempObj);
    // Check the value of speed on tennisBall_mc
    trace(court_mc.tennisBall_mc.speed); // Displays: 200
    However, properties inherited through initObject\'s prototype chain are not copied to the clip. Only direct properties are transferred. To determine whether a property is inherited or direct, use Object.hasOwnProperty( ). Built-in movie clip properties, such as _x and _rotation, and event handlers, such as onEnterFrame( ), can be set (i.e., copied to the newly created movie clip instance) via initObject. For example:

    var tempObj = new Object();
    // Set _rotation
    tempObj._rotation = 200;
    // Assign an onEnterFrame() callback
    tempObj.onEnterFrame = function () {
    this._x++
    };
    // Once attached, tennisBall_mc will be rotated by 200 degrees and will
    // start moving one pixel right per frame due to the onEnterFrame() handler
    court_mc.attachMovie("ball_symbol", "tennisBall_mc", 1, tempObj);

    In Flash 6, the initObject parameter is used to set properties in newName that will be used by its class constructor (effectively the same as passing arguments to the constructor). A movie clip symbol\'s class constructor is defined by the Object.registerClass( ) method. For convenience, initObject can be specified as an anonymous object. For example:

    court_mc.attachMovie("ball_symbol", "tennisBall_mc", 1, {speed: 200, _x: 165} );
    The initObject parameter is not supported prior to Flash 6.

    由tonys於05-01-2004發表

  • p278
    加入char出現問題,因為冇定義char.x=???
    char.y=???
    所以attachMovie時char出現在0,0. 在char movieclip的script 層先加入 _x=x及_y=y就可解決.

    lamfan於22-05-2004發表

同組文章