
前言:director中制作一个可以活动的三态按钮是一个基本的技巧。对于这一个按钮的制作有着不同的方法。以下是两位朋友的一些方法希望对大家有所启示。有更多的见解请到5dbbs.yeah.net来告诉我们。
首先解释以下什么是三态按钮举一个例子一个红色按钮。鼠标移动上去是蓝色,按下去是黑色。这个按钮有三种状态。常规、鼠标在上面、按下去。下面就是两种方法。
----------------------------
东影默:
按钮有三个状态,一、常规,二、滑过时,三、按下时.分别命名为:xxx1,xxx2,xx3;区别主要在最后一个字符
则xxx1的脚本为
on mouseEnter ---移入按钮时
set cn= the name of the member of sprite the currentSpriteNum
delete the last char of cn
set cn=cn&"2"
set the member of sprite the currentSpriteNum to cast member cn
end mouseEnter
xxx2的脚本为
on mouseLeave --移出按扭时
set cn= the name of the member of sprite the currentSpriteNum
delete the last char of cn
set cn=cn&"1"
set the member of sprite the currentSpriteNum to cast member cn
end mouseLeave
on mousedown --按下时
set cn= the name of the member of sprite the currentSpriteNum
delete the last char of cn
set cn=cn&"3"
set the member of sprite the currentSpriteNum to cast member cn
end mousedown
xxx3的脚本是
on mouseup 按下时
set cn= the name of the member of sprite the currentSpriteNum
delete the last char of cn
set cn=cn&"1"
set the member of sprite the currentSpriteNum to cast member cn
... ...
end mouseup
以上是我的方法,
还有一种法就是用Flash做按钮,然后在DR中使用,这样在DR中只要写
on mouseup
....
end mouseup
的脚本就可以了。
各位大虾如果有更好的方法请指教。
========================================================================
谢谢东影默的分享。 我想这是一个好的例子来学习behavior, 和oop的概念。
lingo中一个效果可以有多种方法实现, 最好的code应该是简洁,易懂, 易扩展,可重复使用的。 behavior就是一个范例。
director 说穿了, 是控制sprite的艺术, score 窗口的power 是我们大家都了解的。 而lingo 可以完全替代score窗口来完成对sprites 的控制。sprite behavior在lingo script的优先次序中名列首席, 我们就从这里开始。
button的效果最基本的就两种, 常态, 和鼠标划过时, 为了把问题简化,我们就看这两种状态。
基本思想是鼠标划过时, 舞台上的button sprite动态的替换为表现为rollover 的那个cast member, 而当鼠标离开这个sprite时, 该sprite 回复为表现为常态的那个member.
用lingo 来翻译就成了:
on mouseEnter
sprite("button").member=member "rollover"
end
on mouseLeave
sprite("buton").member= member"常态"
end
为了让这个表达更具有普适性, 我们可以用两个变量来分别代表常态的button member和rollover的button member, 就用normal 和rollover来作为变量名字吧, (最好在它们前面加上一个"p", 代表是 property variable). 好, 改写一下, 先宣布一下属性变量,
property pNormal
property pRollover
on mouseEnter
sprite("button").member=pRollover
end
on mouseLeave
sprite("buton").member= pNormal
end
问题是sprite 没有名字只有channel 的number, 我们不能用sprite("button")来表示, 解决的方法其实出乎你意料的简单, 我们知道sprite script需要附在某个sprite 上来接受message, 而script 本身也是一个object 存储在RAM中, 我们可以利用一个简单的参数“me”来传递这个重要的信息, me 就代表附在当前那个sprite上的script , me 也有一个属性- spriteNum, 告诉我们当前的sprite 所在的channel number. Cool, 再改写一下,
property pNormal
property pRollover
on mo