我是动作脚本3的菜鸟,所以请原谅这个详细的帖子! (和代码发布错误)
我正在制作一个交互式flash项目......它有17个独立场景......
我编写了Intro - >“main”序列,没有任何问题......
我的问题是“主序列”有15个按钮,我需要将它们链接到15个不同的场景......我尝试了两组不同的代码(见下文),并且不断出现编译器错误。 .. ..如果有人可以告诉我这两种格式中哪一种最适合我的目的,我将不胜感激。我究竟做错了什么......
代码1:这是我用来将各个页面链接回主序列的修改
TD_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler1);
function mouseDownHandler1(event:MouseEvent):void {
gotoAndStop(1,"Tweedlee_Dee");
}
s_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler2);
function mouseDownHandler2(event:MouseEvent):void {
gotoAndStop(1,"Sincerely");
}
ats_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler3);
function mouseDownHandler3(event:MouseEvent):void {
gotoAndStop(1,"Ain’_that_a_shame");
...重复15次...... _g
部分是指我分配给主序列上每个按钮的唯一实例名称 ...我更改了{每个#
中{1}}因为我在某处读到每个事件必须不同(?)
..每次我测试场景我都会得到以下内容......
TypeError:错误#1009:无法访问空对象引用的属性或方法。 在music_Sheet_project_14_Main_Sequence_fla :: MainTimeline / frame1(...然后场景开始,然后做动画,然后是鼠标悬停效果但按钮应该返回错误(?)如果我点击它们就不会产生“反应”
...每次我测试电影(只用那么短的代码!)我得到以下内容......
14编译器错误
所有1021:重复的功能定义。来源:MouseDownHandlr
** Code2 **这是我在尝试修复第一个代码时发现的不同代码。
function mouseDownHandler(event:MouseEvent):void {
......这种情况还有15次,包括第64行
stop();
TD_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
s_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ats_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
iyk_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
hms_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
tf_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
hd_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ld_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ll_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ts_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ipsy_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ysm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ihm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
iss_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
tl_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler(event:MouseEvent):void
{
var nameOfButton:String = event.currentTarget.name;
if (nameOfButton == "TD_g")
{
gotoAndStop(1, "Tweedlee_Dee");
}
else if (nameOfButton=="s_g")
{
gotoAndStop(1, "Sincerely");
}
else if (nameOfButton=="ats_g")
{
gotoAndStop(1, "Ain’_that_a_shame");
}
else if (nameOfButton=="iyk_g")
{
gotoAndStop(1, "I_hear_you_knocking");
}
当我尝试运行时,我得到以下内容......
“1083:语法错误:其他是意料之外的。来源{
else if (nameOfButton=="ysm_g");
{
gotoAndStop(1, "You_shook_me");
当我查看这个时,我得到了语法错误的建议......但为什么它会选择这一行而不是所有其他行......我已经尝试重新输入并重新格式化但是我一直收到这个错误..
* 哪些代码最适合使用? (为什么它不起作用?) 任何/所有建议&非常感谢帮助...谢谢! *
答案 0 :(得分:0)
问题是你在else语句之前没有相应的右括号。另外,你在else的末尾有一个分号,这会弄乱:
{
else if (nameOfButton=="ysm_g");
{
gotoAndStop(1, "You_shook_me");
应该是
{
//...Whatever code goes here
}
else if (nameOfButton=="ysm_g")
{
gotoAndStop(1, "You_shook_me");
}
答案 1 :(得分:0)
如果将对象链接到要触发的场景名称,则可以避免整个if-elseif混乱。这更容易阅读和维护,因为所有配置都在下面的init()方法中完成。方法setSceneByTarget()是公共的,因此您可以在运行时添加更多项目。
public class Main extends MovieClip
{
private var _scenesByTarget:Dictionary;
public function Main()
{
_scenesByTarget = new Dictionary(true);
//call init() or hook it to ADDED_TO_STAGE event if you want
}
public function init():void
{
//add your listeners here like this:
//myItem1.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
//setSceneByTarget(myItem1, myItem1Scene);
//myItem2.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
//setSceneByTarget(myItem2, myItem2Scene);
//...
}
public function setSceneByTarget(targetObj:Object, targetScene:String):void
{
_scenesByTarget[targetObj] = targetScene;
}
private function jumpToSceneByTarget(targetObj):void
{
if (_scenesByTarget[targetObj] != null) {
gotoAndStop(1, _scenesByTarget[targetObj]);
}
}
private function onMouseDown(evt:MouseEvent):void
{
jumpToSceneByTarget(evt.target);
}
}