我正在创建一个房间逃脱游戏,类似于那些冒险游戏。三个房间:厨房,客厅,浴室。 每个房间都在一个场景中。有连接它们的按钮。例如,在厨房里有一个小箭头到右边的视线,点击它会把你带到起居室,从而起到现场起居室的作用。
每个场景由backgroundpicturelayer,objects(inventory)图层,按钮图层和actionscript图层组成。
在厨房里有一把钥匙,你可以抓住并放入你的库存。我是通过key1_mc
和key2_mc
来完成的。 Key2是key1的版本,它在库存中不可见,直到抓取key1。当点击key1时,key1变为不可见,key2变为可见,从而给出了我抓住它并将其放入库存的印象。我可以在每个其他场景中从厨房复制清盘。是否可以定义该图层以显示在所有其他场景中?
在AS中我说
key2_mc._visible = false;
key1_mc._visible = true;
key1_mc.onPress = function() {
key2_mc._visible = true;
key1_mc._visible = false;
keylocated = "keyfound"
}
问题:一旦我抓住了钥匙,无论我在三个房间走了多少次,我都希望它能留在我的库存中,直到我在起居室的钥匙孔上使用它。但是目前,在抓住钥匙,离开并重新进入厨房之后,它从一开始就开始了。
但到目前为止,每当我进入这三个房间中的任何一个房间时,他们从一开始就玩,而不关心我在其他房间里做了什么。所以我想在AS中说:
如果在场景厨房key2_mc.visible = true
中,则在[场景名称或所有其他场景]场景key2_mc = visible
中。或者在客厅AS:检查场景厨房key2是否已启用可见。如果,那么这里也可见。
或者有一个元AS对所有场景都有效吗?
答案 0 :(得分:0)
首先,考虑学习如何使用类文件进行编码。使用时间轴做这样的事情是非常麻烦的,可能会导致很多挫败感。然而,这将是一些时间投入,对你来说在这一点上并不一定有用。
您需要做的是拥有全局变量(范围为应用程序生命周期的变量)。 Flash只知道当前加载的内容 - 因此,如果您在当前未加载的场景上有显示资源,则无法访问该内容。但是,变量将持续它们定义的时间轴的生命周期,因此如果您在根/主时间轴上定义某些内容,它将在应用程序的生命周期内保持不变。
在主时间轴中,您可以这样做:
var hasKey1:Boolean = false;
这使您可以从应用程序的任何位置访问var。
然后,在出现或可能出现该键的框架或容器影片剪辑上,执行以下操作:
key2_mc.visible = MovieClip(root).hasKey1;
对于你可以抓住的那个,做相反的事情:
Key1_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;
//where you first see or can see the key(s)
key2_mc._visible = _root.hasKey1;
key1_mc._visible = !_root.hasKey1;
//when you grab the key
key1_mc.onPress = function() {
key2_mc._visible = true;
key1_mc._visible = false;
_root.hasKey1 = true;
}