网乐原科技

直播中

news center新闻中心
首页 > 资讯中心 > 软件技术

Director技巧--关于text scroll 的问题

发布时间:2008-11-18     阅读数: 次       来源:网乐原科技
有一个朋友在论坛上问如何让一个text sprite 自动滚屏? 还有一个要求是,当滚动到文本的最后一行,可以再回到第一行重新继续滚动, 另外还要求如果鼠标点在文本上就停止滚动,再点击又继续滚动。

回答:
这是一个很有趣的问题, lingo 的语句并不难, 需要了解的是一些背景知识和解决问题的过程, 事实上, lingo programming的过程就是解决问题的过程, 对于解决问题来说, 第一步莫过于定义问题是什么?从上面的问题里我们已经了解得比较清楚了, 下面是问题清单:
1.Text sprite 自动滚屏;
2.当滚动到最后一行时回到第一行重新开始滚动;
3.鼠标点击toggle 滚屏的on 和off.

我们知道, text member可以有几种不同的framing 设定,对于滚屏来说,最合适的设定是fixed.见下图:


这样可以将比较长的文件限制在有限的舞台空间来显示,同时又不出现滚动条。 不过这只完成了第一步, 我们需要lingo 把文本文件滚动起来。 最合适的的语句是用scrollTop这个text member 的属性。 它的定义是从member 的顶端到第一行可见文字的距离, 当movie 播放时,我们都会使用on exitFrame 句柄来制造循环。 好, 如果我们可以让这个text sprite 在每次离开frame时,它的member.scrollTop值就增加一点,不就实现了滚动了吗。

member.scrollTop=member.scrollTop + 4

这就是核心语句。 那么如何得知文本最后一行的位置以及建立与scrollTop的关系呢? 请看下图:


我们可以很容易的得出这样的结论, 当最后一行文本显示在舞台上时,那时候text member 的scrollTop 值等于member的高度减去sprite 的高度。也就是 :
member.height – sprite.height = the scrollTop when last line appear on the stage.

鼠标的控制比较容易,设定一个flag就可以了。

问题分析完了,开始写script, 最好是写成behavior的形式, 符合OOP的概念, 又可以使用在不同的text sprite 上。 你可以持续丰富你自己的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

--循环中监测符合滚动的条件并发出滚动的指令
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:

网乐原科技

客服热线:0771-5761507

QQ:53290011

QQ邮箱:53290011@qq.com

工作时间:周一到周五 9:00-18:00

地址:广西南宁市江南万达写字楼C16栋1309室

物联网开发

关注我们

微信小商店 腾讯QQ客服 微信客服