• 当前位置:首页>>Director教程>>Director综合技巧>>Director 如何检测演员的载入进度
  • Director 如何检测演员的载入进度
  • Director 如何检测演员的载入进度
       原著:lingoworkshop
       翻译:alphachi

       为了优化影片,我们经常需要预载演员。虽然通过使用相关的预载命令或设置演员本身的预载模式就能够达到这一目的,但不要忘记在进行预载时反馈一些相应的动态信息,以保持与用户之间的交互,也就是说,需要检测并显示演员的载入进度。

       通过使用idleLoadtag命令,便可以轻松做到这一点。这个命令允许通过使用一个列表来监测整个载入过程,因此我们可以在发出一个演员预载的命令之前用其来跟踪每个演员。由于只是测算列表项目的载入进度而不是测算演员本身的载入进度,所以无论对于几个小型演员的载入还是许多大型演员的载入,这个方法都非常有效。

       首先让我们来认识一下IdleLoadTag命令:

       语法:
       the idleLoadTag

       描述:
       系统属性,用于在系统等待时标记或识别加载队列的成员数量。这个属性为识别预加载一组成员提供了方便。此属性可以测试和设置。

       例如:
       这条语句将等待加载的成员数量设置为10。
       the idleLoadTag = 10

       下面就是一个控制载入演员列表的父代剧本实例,通过它能够获得演员载入的百分比。

    property myDefaultIdleMode
    property myLoadtag
    property myIndexMax
    property myIndex
    property myMemberList
    property myTimeout

    on new ( me , aListofMembers)
    me .mInitClass()
    me .mInitInstance()
    if aListofMembers. ilk = #list then me .mLoadMembers(aListofMembers)
    return me
    end

    on mDestroy ( me )
    if myTimeout. ilk = #timeout then myTimeout. forget ()
       myIndex = myIndexMax
    cancelIdleLoad (myLoadtag)
    the idleLoadMode = myDefaultIdleMode
    end

    on mLoadMembers ( me , aListofMembers)
       myMemberList = aListofMembers. duplicate ()
       myIndexMax = myMemberList. count
       myIndex = 0
       myTimeout = timeout ( me . string ). new ( 0 , #nothing , me )
    the idleLoadMode = 3
    end

    on mGetPercentageDone ( me )
    if myIndexMax > 0 then
    return ( float (myIndex)/(myIndexMax))* 100
    else
    return 100
    end if
    end

    on exitframe ( me )
    if idleLoadDone (myLoadtag) then
    if me .mLoadNextMember() = 0 then
           myTimeout. target = VOID
           myTimeout. forget ()
    the idleLoadMode = myDefaultIdleMode
    end if
    end if
    end

    on mLoadNextMember ( me )
    if myIndex < myIndexMax then
         myIndex = myIndex + 1
         thisMember = myMemberList[myIndex]
    if thisMember. ilk = #member then preLoadMember thisMember
    return myIndex
    else
    return 0
    end if
    end

    on mInitClass ( me )
       myDefaultIdleMode = the idleLoadMode
    end

    on mInitInstance ( me )
       uniqueName = string ( me ). word [ 4 ]
    delete the last char of uniqueName
       myLoadTag = symbol (uniqueName)- 0
       myTimeout = VOID
    end


       将下面的Behavior赋予一个进度条,即可显示载入的百分比:

    property myLoader

    on beginSprite ( me )
       myMembers = [ member ( "blah1" , member ( "blah1" ), member ( "blah3" ))
       myLoader = script ( "MemberLoadMgr_class" ). new (myMembers)
    end

    on exitframe ( me )
    if myLoader. ilk = # instance then
         amntLoaded = myLoader.mGetPercentageDone()
    put "loading " & integer (amntLoaded) & "%"
    if amntLoaded = 100 then
           myLoader.mdestroy()
           myLoader = VOID
    end if
    end if
    end

    [1]

  • 上一篇:Director生成文件减肥技巧
    下一篇:常见的Director MX 2004全屏问题