翻译: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