» 网友学堂 » Director教程 » Director 如何检测演员的载入进度
Director 如何检测演员的载入进度
作者:lonjew 发表时间:2008-4-15 08:45 阅读:71次 在百度搜索相关内容

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

   通过使用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
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
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

#Advertisement