您的位置: 首页-> 电脑文摘-> 图象图形-> Director-> 正文

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

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


[文章录入员:nancy]

相关文章 相关软件:
::PCBOOKCN'ADS::


::Director::
PhotoShop
CorelDraw
3D-MAX
AutoCAD
FreeHand
Illustrator
Authorware
Director
Maya/Rhino
其它
::阅读排行::
·内存中对象的配置
·在Director中使用Powe...
·音频与数字视频、flash音频的...
·Director小技巧
·控制动画GIF
·认识Director中的Xtra
·Director中各种内部事件发...
·用Lingo解决组合问题
·Director8行为库的应用
·行为库创建技巧