最近有不少的朋友問(wèn)我有關(guān)在dr中如何實(shí)現(xiàn)文本滾動(dòng)效果的問(wèn)題,我只給了一些方法的提示,我本身認(rèn)為這個(gè)問(wèn)題是比較的簡(jiǎn)單的,但是隨著問(wèn)的多了,也就意識(shí)到這個(gè)問(wèn)題涉及的問(wèn)題還真不少(自己是小瞧了這個(gè)問(wèn)題了),后來(lái)就想找個(gè)典型的范例來(lái)和朋友們共同討論這個(gè)問(wèn)題,在網(wǎng)上無(wú)意的瀏覽時(shí)候發(fā)現(xiàn)了下面的這個(gè)行為,使我對(duì)這個(gè)問(wèn)題的認(rèn)識(shí)更深了一步(里面還是有不少的技巧的),我從下面的程序里面也得到了一種新的行為編寫(xiě)思維方式,同時(shí)在其他方面也得到了應(yīng)用。下面就是這個(gè)程序,我做了一些簡(jiǎn)單的注釋:
property pmem
property pimage
property pscroll
property pwidth, pheight
property pvisibleheight
property pbackgroundcolor
###定義這個(gè)行為的屬性設(shè)置###
on getpropertydescriptionlist me
list = [:]
addprop list, #pvisibleheight, [#comment: "visible height", #format: #integer, #default: 100]
return list
end
on beginsprite me
n 獲得text member 的大小
pwidth = sprite (me.spritenum).member.width
pheight = sprite (me.spritenum).member.height
n 獲得文本圖象的大小
pimage = duplicate (sprite (me.spritenum).member.image)
pbackgroundcolor = sprite (me.spritenum).member.bgcolor
n 創(chuàng)建一個(gè)新的位圖以供我們使用
pmem = new (#bitmap)
pmem.image = image (pwidth,pheight,32)
pmem.regpoint = point (0,0)
sprite (me.spritenum).member = pmem
n 實(shí)現(xiàn)圖象從低部向上滾動(dòng)
pscroll = -pvisibleheight
setimage (me)
end
on setimage me
n 利用fill命令使圖象充滿背景色
pmem.image.fill (rect (0, 0, pwidth, pvisibleheight), pbackgroundcolor)
n 放置圖象到相應(yīng)的位置上
pmem.image.copypixels (pimage, rect (0 ,0, pwidth, pvisibleheight), rect (0, pscroll, pwidth, pvisibleheight + pscroll))
end
on exitframe me
n 設(shè)置滾動(dòng)的速度為一個(gè)象素
pscroll = pscroll + 1
n 如果滾動(dòng)文本結(jié)束了,在這里設(shè)計(jì)循環(huán)
if pscroll > pheight then pscroll = -pvisibleheight
setimage(me)
end
on endsprite me
erase pmem
end
這個(gè)行為比我以前常用的方法是方便多了,先面我介紹一下這個(gè)行為的基本編寫(xiě)思路,如果對(duì)lingo很熟悉的朋友通過(guò)上面的程序就能夠看的出來(lái)了,我再說(shuō)這些就現(xiàn)的羅嗦了。但我還是想說(shuō)一下我的體會(huì)(真是不可救藥啊!)
這個(gè)行為的最大的特點(diǎn)就是節(jié)約了空間,只要一個(gè)score就可以了。還有一個(gè)巧妙的用法就是用了fill命令,這樣在移動(dòng)文本圖象的時(shí)候擦除舊的圖象。
新聞熱點(diǎn)
疑難解答