-1

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

每个场景由背景图片层、对象(库存)层、按钮层和动作脚本层组成。

在厨房里有一把钥匙,你可以抓住并放入你的库存中。我用key1_mcand来做key2_mc。Key2 是 key1 的版本,在抓取 key1 之前它在库存中是不可见的。当点击 key1 时,key1 变得不可见,而 key2 变得可见,因此给人的印象是我抓住了它并把它放在了库存中。我可以在每个其他场景中从厨房复制粘贴库存层。是否可以定义该层以显示在所有其他场景中?

正如我所说

key2_mc._visible = false;
key1_mc._visible =  true;
key1_mc.onPress = function() {
  key2_mc._visible = true;
  key1_mc._visible =  false;
  keylocated = "keyfound"
}

问题:一旦我拿到钥匙,我希望它留在我的库存中,无论我在三个房间里走多少次,直到我在客厅的钥匙孔上使用它。但目前,拿到钥匙,离开再进入厨房后,一切从头开始。但到目前为止,每当我进入这三个房间中的任何一个时,它们都会从头开始播放,并不关心我在其他房间场景中做了什么。所以我想在 AS 中说:如果在 Scene kitchenkey2_mc.visible = true中,那么在 [name of scene, or all other scene] scene 中key2_mc = visible。或在客厅 AS:检查场景中的厨房 key2 是否启用可见。如果,那么这里也可见。或者有一个适用于所有场景的元 AS?

4

1 回答 1

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;
} 
于 2015-12-10T18:06:31.450 回答