关于text scroll
的问题
|
有一个朋友在论坛上问如何让一个text sprite 自动滚屏? 还有一个要求是,当滚动到文本的最后一行,可以再回到第一行重新继续滚动, 另外还要求如果鼠标点在文本上就停止滚动,再点击又继续滚动。 |
回答: 先来看这实例电影。 |
这是一个很有趣的问题, lingo 的语句并不难, 需要了解的是一些背景知识和解决问题的过程, 事实上, lingo programming的过程就是解决问题的过程, 对于解决问题来说, 第一步莫过于定义问题是什么?从上面的问题里我们已经了解得比较清楚了, 下面是问题清单: 1. Text sprite 自动滚屏; |
我们知道, 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值 --初始化 --循环中监测符合滚动的条件并发出滚动的指令 --核心语句使text滚动 --toggle flag on and off on getPropertyDescriptionList me |
下图是当用该行为对text sprite赋值时的screen shot: |
![]() |
事实上根据这个行为可以衍生很多变化,下面的星球大战特效就是在上面的例子里稍加修改而产生的。 |
Please click the movie to start. |