Actionscript 3 Flash AS3命令如何对多个场景有效?

Actionscript 3 Flash AS3命令如何对多个场景有效?,actionscript-3,flash,adventure,Actionscript 3,Flash,Adventure,我正在创建一个房间逃生游戏,类似于那些冒险游戏。三个房间:厨房、客厅、浴室。 每个房间都在一个场景中。有按钮连接它们。例如在厨房里有一个小箭头指向右边的视线,点击它会将你移动到客厅,从而播放客厅的场景 每个场景由backgroundpicturelayer、对象(资源清册)层、按钮层和actionscript层组成 在厨房里有一把钥匙,你可以拿出来放进你的物品清单里。我用key1\u-mc和key2\u-mc来做。Key2是key1的版本,在抓取key1之前,它在资源清册中不可见。当单击键1时,

我正在创建一个房间逃生游戏,类似于那些冒险游戏。三个房间:厨房、客厅、浴室。 每个房间都在一个场景中。有按钮连接它们。例如在厨房里有一个小箭头指向右边的视线,点击它会将你移动到客厅,从而播放客厅的场景

每个场景由backgroundpicturelayer、对象(资源清册)层、按钮层和actionscript层组成

在厨房里有一把钥匙,你可以拿出来放进你的物品清单里。我用
key1\u-mc
key2\u-mc
来做。Key2是key1的版本,在抓取key1之前,它在资源清册中不可见。当单击键1时,键1变为不可见,键2变为可见,因此给人的印象是我抓住它并将其放入清单中。我可以在其他场景中从厨房复制粘贴inventorylayer。是否可以定义该层以显示在所有其他场景中

正如我所说

key2_mc._visible = false;
key1_mc._visible =  true;
key1_mc.onPress = function() {
  key2_mc._visible = true;
  key1_mc._visible =  false;
  keylocated = "keyfound"
}
问题是:一旦我拿到钥匙,我希望它留在我的库存中,不管我在这三个房间里走了多少次,直到我把它用在起居室的钥匙孔上。但目前,在抓起钥匙,离开并重新进入厨房后,一切从头开始。 但到目前为止,每当我进入这三个房间中的任何一个,他们从一开始就在玩,而不在乎我在其他房间里做了什么。所以我想说的是: 如果在场景厨房中
key2\u mc.visible=true
,则在[场景名称或所有其他场景]场景中
key2\u mc=visible
。或在起居室中:检查现场厨房钥匙2是否启用可见。如果,那么这里也可见。
还是有一个元对所有场景都有效?

首先,考虑学习如何使用类文件进行编码。使用时间线做这样的事情非常麻烦,可能会导致很多挫折。然而,这将是一个时间投资,在这一点上不一定对你有帮助

您需要做的是拥有全局变量(范围限定为应用程序生命周期的变量)。Flash只知道当前加载的内容-因此,如果您在当前未加载的场景中有显示资源,则无法访问该资源。但是,变量将持续其定义的时间线的生命周期,因此,如果在根/主时间线上定义了某些内容,它将在应用程序的生命周期中一直存在

在主时间表中,您可以执行以下操作:

var hasKey1:Boolean = false;
这使得您可以从应用程序中的任何位置访问var

然后,在关键点出现或可能出现的帧或容器电影剪辑上,执行以下操作:

key2_mc.visible = MovieClip(root).hasKey1;
key1_mc.addEventListener(MouseEvent.CLICK, key1Click, false,0,true)

function key1Click(e:Event):void {
  key2_mc.visible = true;
  key1_mc.visible =  false;
  keylocated = "keyfound"

  MovieClip(root).hasKey1 = true;
}
对于你能抓到的,做相反的事情:

Key1_mc.visible = !MovieClip(root).hasKey1;
当您“抓住”钥匙时,请执行以下操作:

key2_mc.visible = MovieClip(root).hasKey1;
key1_mc.addEventListener(MouseEvent.CLICK, key1Click, false,0,true)

function key1Click(e:Event):void {
  key2_mc.visible = true;
  key1_mc.visible =  false;
  keylocated = "keyfound"

  MovieClip(root).hasKey1 = true;
}

对于as2:

//main timeline
var hasKey1 = false;



这是动作脚本2还是3?您的代码是针对as2的,但您已将其标记为3谢谢!我在用Macr。用AS 2闪烁8。初学者的错误!所以,在我做更多的事情之前,我应该切换到ActionScript3,即Adobe Flash Professional CC 2015。我现在不应该再从头开始学习AS2了,如果我能学习AS3的话,对吗?Adobe Flash Professional CC 2015最适合这样做吗?这是正确的假设吗?我真的很抱歉用这些简单的问题来打扰你!2.你认为一场戏只有一个房间是最好的方式吗?每个场景都有背景层、对象层、资源清册层和aslayer层。我喜欢图层系统,因为我是从Photoshop.3知道的。我应该在哪个actionscript中粘贴你写的全局变量?厨房的那个?所有的动作脚本?或者AS3中是否有一个全局动作脚本?4.我根本没有弄乱时间线,因为在游戏中没有时间跑。不过,我很愿意学习,听起来很有趣。在这一点上,我不明白我的“主要时间线”在哪里。别担心,我会在youtube上看一些关于AS3和flash的东西,并寻找教程,希望将来我这边的问题会越来越少。我还将研究“类文件”。主时间线只是你们最外层的时间线。如果你的时间轴上有电影剪辑,那么这些电影剪辑就有自己的时间轴,可以有更多的电影剪辑和时间轴,因此你的脚本可以工作,但是我是否必须在每个场景中粘贴key2image的副本,给它一个单独的实例,比如keylivingroom、KeyBathway?还有,在每个场景中,我都要粘贴你给我的文本,并替换key2实例keylivingroom实例等等?我希望有一个在所有场景中都可见的目录层(不仅仅是幻觉)。因为我想制作8个或13个房间,修改每个场景(房间)的库存层似乎需要很多工作。也许在每个场景中都有一个AS层并不是一个好主意?通过嵌套电影剪辑使其更容易。因此,在你的主时间表上,将整个可玩游戏放在一个画面上。在那个框架上,有一个电影剪辑,里面有你所有的东西。您可以将密钥制作成电影剪辑,并将代码放在它的时间轴上,这样无论您何时拥有密钥,都可以运行一段代码。