(4)在滑动块mark上添加行为slider on mark来实现图文混排的滚动功能。这个行为要包含以下功能:鼠标对滑动块的拖动,滑动块在滑动条上的滚动,与之相对应的图文的滚动。 当鼠标在mark精灵上按下时,滑块随鼠标移动。用如下代码来实现:
property pposition --鼠标按下的状态
on beginsprite me
pposition =false --初始鼠标按下状态为否
end beginsprite
on mousedown me
pposition = true --鼠标按下状态为是
end mousedown
on mouseUp me
pposition = false --鼠标按下状态为否
end mouseUp
on mouseUpOutside me
pposition = false --鼠标按下状态为否
end mouseUpOutside
on exitframe me
if pposition then
sprite(me.spritenum).locv = the mouseV --滑块随鼠标移动
end if
end exitframe
on mouseEnter me
sprite(me.spritenum).cursor= 280 --改变鼠标的形状
end mouseEnter
on mouseLeave me
sprite(me.spritenum).cursor = 0 --恢复鼠标的形状
end mouseLeave
试试看,有问题了,滑块的移动超出了滑动条的范围。怎么办呢?别着急,修改一下行为,将exitframe函数程序改动一下。
on exitframe me
if pposition then
pHow = float(the mouseV - sprite(me.spritenum).rect.top)/sprite(pBarNumber).rect.height
if pHow > 1 then
pHow = 1
end if
if pHow <0 then
pHow = 0
end if
changeloc(pHow)
end if
end exitframe
on changeloc pHow
sprite(pButton).locv = pButtonlocv + pHow * (sprite(pBarNumber).rect.height -20)
updatestage
end changeloc
注意上面的代码增加了几个新的变量,需要在beginscript句柄中初始化。全局变量pHow定义为滑块的移动距离与滑动条范围的比值,它限制在0和1之间(需要在影片剧本中startmovie处理程序中初始化其值为0);pBarNumber是滑动条的通道号;pButton代表滑动块的通道号;pButtonlocv是滑块的原始位置。而变化滑块的位置用函数changeloc()来实现。试试看,效果不错吧。
可是如何让混排的图片和文字也相应的移动呢?其实很简单,在changeloc函数里添加修改它们的位置的语句就可以了。首先要得到图片文字的通道号,它们的原始位置,还有移动的距离,然后根据pHow的值在changeloc()函数里移动图片和文字。具体来说,就是图片文字的通道号以及移动的距离作为参数,在beginscript处理程序中添加如下代码:
--图文的原始位置
pSpriteslocv =[]
i = 1
repeat while (i <= pSprites.count)
add pSpriteslocv ,sprite(pSprites[i]).locv
i = i+1
end repeat
这里又增加了两个变量,pSpirtes记录的是图片和文字的通道号,作为参数来设置;pSpriteslocv记录的是图片和文字的纵坐标位置,以上两个变量都是列表,一一对应。接下来在changeloc()函数中添加如下代码:
i= 1
repeat while (i <= pSprites.count)
sprite(pSprites[i]).locv = pSpriteslocv[i] - pHow * pLength
i =i+1
end repeat
上面的代码中pLength是图片和文字总的移动距离,以像素为单位,是可以设置的参数。参数太多了吧,是不是有些头痛了?没关系,下面的代码可以看到那些参数需要设置。
on getPropertyDescriptionList
mylist = [:]
addProp mylist, #pLength, [#comment:"moved length" , #format: #integer, #default : 0 ]
addprop mylist,#pSprites, [#comment: "moved sprites", #format: #list, #default:[]]
addprop mylist,#pBarnumber,[#comment:"Bar Sprite:",#format:#integer,#default:0]
return mylist
end getPropertyDescriptionList
试试看,如图1.4设置参数,是不是效果出来了?
图片如下:
图1.4 slider on mark的参数设置
(5)还有向上和向下移动的按钮功能没有实现呢。现在就搞定它。在sprite 11上添加行为slider on button,打开脚本窗口输入如下代码:
property pMode --向上还是向下的按钮#up #down
property pBili --移动比例
global pHow --实际比例
property pButtonSpriteNum -- 滑块的通道号
property pDown --按钮是否按下
on beginsprite
pDown = false
end beginsprite
on mousedown me
pDown = true --按钮按下
end mousedown
on mouseUp
pDown = false --按钮抬起
end mouseUp
on mouseUpOutside
pDown = false --按钮抬起
end mouseUp
on mouseEnter me
sprite(me.spritenum).cursor = 280 --鼠标改为手形
end mouseEnter
on mouseLeave me
pDown = false
sprite(me.spritenum).cursor = 0 --鼠标恢复原来形状
end mouseLeave
on exitframe me
if pDown then
if pMode = "up" then
pHow = pHow - pBili --减少pHow
else if pMode = "down" then
pHow = pHow + pBili --增加pHow
end if
--限制pHow的范围
if pHow<0 then pHow = 0
if pHow>1 then pHow =1
--调用滑块上的changeloc函数改变滑块和图文的位置
sendsprite(pButtonSpriteNum,#changeloc,pHow)
end if
end exitframe
on getpropertydescriptionlist
mylist = [:]
addprop mylist , #pButtonSpriteNum, [#comment:"Button Sprite Number:",#format:integer,#default: 0]
addprop mylist , #pMode, [#comment:"mode",#format :#string,#range:["up","down","over"],#default:""]
addprop mylist, #pBili, [#comment:"bili",#format :#float,#range:[#min:0.001,#max:0.999],#default:0.05]
return mylist
end getpropertydescriptionlist
如图1.5设置参数。并在sprite 12上添加同样的行为,只不过参数mode改为down。
图片如下:
图1.5 slider on button的参数设置
完成效果
图片如下:
图1.6 图文混排的滚动效果
源文件下载