Director技巧--關(guān)于text scroll 的問題
發(fā)布時間:2008-11-18 閱讀數(shù): 次 來源:網(wǎng)樂原科技
有一個朋友在論壇上問如何讓一個text sprite 自動滾屏? 還有一個要求是,當滾動到文本的最后一行,可以再回到第一行重新繼續(xù)滾動, 另外還要求如果鼠標點在文本上就停止?jié)L動,再點擊又繼續(xù)滾動。
回答:
這是一個很有趣的問題, lingo 的語句并不難, 需要了解的是一些背景知識和解決問題的過程, 事實上, lingo programming的過程就是解決問題的過程, 對于解決問題來說, 第一步莫過于定義問題是什么?從上面的問題里我們已經(jīng)了解得比較清楚了, 下面是問題清單:
1.Text sprite 自動滾屏;
2.當滾動到最后一行時回到第一行重新開始滾動;
3.鼠標點擊toggle 滾屏的on 和off.
我們知道, text member可以有幾種不同的framing 設定,對于滾屏來說,最合適的設定是fixed.見下圖:
這樣可以將比較長的文件限制在有限的舞臺空間來顯示,同時又不出現(xiàn)滾動條。 不過這只完成了第一步, 我們需要lingo 把文本文件滾動起來。 最合適的的語句是用scrollTop這個text member 的屬性。 它的定義是從member 的頂端到第一行可見文字的距離, 當movie 播放時,我們都會使用on exitFrame 句柄來制造循環(huán)。 好, 如果我們可以讓這個text sprite 在每次離開frame時,它的member.scrollTop值就增加一點,不就實現(xiàn)了滾動了嗎。
member.scrollTop=member.scrollTop + 4
這就是核心語句。 那么如何得知文本最后一行的位置以及建立與scrollTop的關(guān)系呢? 請看下圖:
我們可以很容易的得出這樣的結(jié)論, 當最后一行文本顯示在舞臺上時,那時候text member 的scrollTop 值等于member的高度減去sprite 的高度。也就是 :
member.height – sprite.height = the scrollTop when last line appear on the stage.
鼠標的控制比較容易,設定一個flag就可以了。
問題分析完了,開始寫script, 最好是寫成behavior的形式, 符合OOP的概念, 又可以使用在不同的text sprite 上。 你可以持續(xù)豐富你自己的behavior library.
property pText --文本member
property pSpeed --滾動速率
property pFlag --判斷條件
property pLastLine --scrollTop的極限值
property pCurrentTop --當前的scrollTop值
--初始化
on beginSprite me
sprite(me.spriteNum).member.scrolltop=0
pText=sprite(me.spriteNum).member
pLastLine=pText.height - sprite(me.spriteNum).height
end
--循環(huán)中監(jiān)測符合滾動的條件并發(fā)出滾動的指令
on exitframe me
if pFlag=1 then
pCurrentTop=pText.scrollTop
if pCurrentTop < pLastLine then
scrollText me
else
pCurrentTop=0
scrollText me
end if
end if
end
--核心語句使text滾動
on scrollText me
pText.scrolltop=pCurrentTop + pSpeed
updatestage
end
--toggle flag on and off
on mouseDown me
pFlag=not pFlag
end
on getPropertyDescriptionList me
return [#pSpeed:[#comment:"滾動速度: ",#format:#integer,#default:"2"],#pFlag:[#comment:"自動開始滾動?",#format:#boolean,#default:"1"]]
end
下圖是當用該行為對text sprite賦值時的screen shot: