翻译:alphachi
我们经常使用单独的位图创建分支菜单,这样做的最大问题是纵向占用了Score中过多的空间。如果想要添加新的项目,就不得不为了腾出空间而移动周围的角色,从而使整个操作变得非常麻烦。其实,使用一小点图像Lingo,就能够仅使用单独角色来定制完整的分支菜单。
下面就是使用图像Lingo创建的完整的分支菜单:
如果想在自己的项目中创建一个这样的菜单,根据下面的步骤即可完成:
1. 下载本例的Director 8影片源代码。
2. 打开样本影片的Cast Window,会看到有两个剧本。一个是名为“Branching Menu Behavior”的行为,另一个是名为“Branching Menu Parent Object”的父代剧本。将这两个剧本复制到自己的影片中。
3. 给菜单中的每一项创建单独的位图。由于使用了Ink效果来显示掠过状态,因此不需要创建同一个位图的多种版本。此时创建一个仅由1个像素组成的位图,此演员迟些将被用于影片运行时菜单的显示。
4. 给每个位图适当的命名,这是最复杂的一步。Branching Menu Parent Object的代码需要使用确定名称的位图,其名称由三个不同部分组成,彼此之间用分号隔开,包括:
菜单名称;
[描述分支菜单按钮的数字列表];
描述被点击按钮的关键字
下面是样本影片中的一些示例命名:
DOUGMenu; [1];Item 1
DOUGMenu; [2,4,3];Item 2, 4, 3
DOUGMenu; [7,2];Item 7, 2
第一部分是分支菜单的名称,可以是任何字符串,例如“myMenu”、“mainNavBar”或本例中的“DOUGMenu”。Branching Menu Parent Object会根据名称寻找相应的演员,并将其包含在分支菜单中。如果需要多个分支菜单,只要使用不同的名称即可。
下一部分是描述菜单中项目位置的数字列表。如果是[1],就代表菜单的第1项;如果是[7,2],就代表菜单的第7项的第2分项。
最后一部分是一个唯一的标识符,用来标识这个按钮,可以是任何单词或字符串,这一信息在点击按钮时会被使用。在样本影片中,它们是类似于“Item 2, 4, 3”或“Item 7,2”的字符串。
5. 一旦演员被正确命名,就可以把整个菜单放置到Score中。将傀儡角色(使用第3步中创建的那个1像素的演员)置于菜单出现的左上角,同时确保根据菜单的风格将其Ink效果设置成了Matte或Background Transparent。
6. 给这个1像素的角色添加第2步中的Branching Menu Behavior,此时会显示一个需要两个参数的对话框。第一个参数是菜单的名称,它应该与第4步中位图的名称一致。另外一个参数用来选择掠过时的Ink效果,这一效果在鼠标掠过此角色时显示。
7. 编写特定的代码,以便当用户点击菜单时执行相应的命令。这一步要做的就是在影片剧本中创建一个如下的处理程序:
on executeBranchingMenu menuName, uniqueIdentifier
-- insert code here
end
当用户点击菜单时,Branching Menu Parent Object自动调用executeBranchingMenu处理程序,并传递此处理程序中的两个值。第一个是在Behavior中指定的菜单名称,第二个是第4步中为每个菜单项创建的唯一标识符。根据菜单的名称和唯一标识符,就可以为每一个按钮执行相应的代码。
样本影片中的executeBranchingMenu处理程序类似这样:
on executeBranchingMenu menuName, uniqueIdentifier
tempStr = "You clicked button '" & uniqueIdentifier & "' in menu '" & menuName & "'"
member ("results").text = tempStr
end
这些代码接受传递给处理程序的参数并将其置于一个字符串中,然后在指定域中显示。
这就是创建分支菜单的基本步骤。你可以像本例那样使用这些代码,也可以在其他类型和尺寸的菜单中使用,因为这些代码对菜单的数量和层次都没有限制。此外,你还可以使用更多的位图来表示菜单按钮的更多状态,例如按钮的非活动状态。
相关附件
