【问题标题】:How can Flash AS3 command be valid for more than one scenes?Flash AS3 命令如何对多个场景有效?
【发布时间】:2015-12-10 17:39:49
【问题描述】:

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

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

在厨房里有一把钥匙,你可以拿起来放在你的库存中。我用key1_mc 和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中说: 如果在场景厨房 key2_mc.visible = true 中,则在 [场景名称,或所有其他场景] 场景中 key2_mc = visible。或在客厅 AS:检查场景中的厨房 key2 是否启用可见。如果,那么这里也可见。 还是有一个适用于所有场景的元 AS?

【问题讨论】:

  • 这是 actionscript 2 还是 3?您的代码适用于 as2,但您已标记为 as3

标签: actionscript-3 flash adventure


【解决方案1】:

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

您需要做的是拥有全局变量(范围为应用程序生命周期的变量)。 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;
} 

【讨论】:

  • 谢谢!我正在使用马克。 Flash 8 与 AS 2。初学者错误!所以在我做更多的事情之前,我应该切换到 Actionscript 3,然后是 Adob​​e Flash Professional CC 2015。我现在不应该再从头开始学习 AS2,如果我可以学习 AS3,对吗? Adobe Flash Professional CC 2015 最适合这种情况吗?这是正确的假设吗?真的很抱歉用这些简单的问题打扰您!2.您认为在一个场景中拥有一个房间是最好的方式吗?每个场景都有背景层、对象层、库存层和aslayer。我喜欢图层系统,因为我是从 Photoshop 知道的。
  • 3.我应该在哪个actionscript中粘贴你写的全局变量?厨房的那个?所有的动作脚本?或者在 AS3 中是否有一个全局动作脚本? 4.我完全没有弄乱时间线,因为在游戏中没有时间运行。我愿意了解它,但听起来很有趣。在这一点上,我不明白我的“主要时间线”在哪里。别担心,我会在 youtube 上看一些关于 AS3 和 flash 的东西并寻找教程,希望将来我的问题会越来越少。我还将研究“类文件”。
  • 主时间线只是你最外层的时间线。如果您的时间线上有影片剪辑,那么这些影片剪辑就会有自己的时间线,这些影片剪辑上可能会有更多的影片剪辑及其时间线,依此类推
  • 您的脚本有效,但我是否必须在每个场景中粘贴 key2image 的副本,给它一个单独的实例,例如 keylivingroom、keybathroom?此外,在每个场景中,我必须粘贴您给我的文本并替换 key2 实例 keylivingroom 实例等等?我希望拥有一个在所有场景中都可见的库存层(不仅仅是幻觉)。因为我想制作 8 个或 13 个房间,并且为每个场景(房间)修改库存层似乎需要做很多工作。也许在每个场景中都有一个 AS 层毕竟不是一个好主意?
  • 通过嵌套影片剪辑使其更容易。因此,在您的主要时间线上,将整个可玩游戏仅放在一帧上。在那个帧上,有一个影片剪辑,在那个影片剪辑里面有你所有的东西。您可以将您的密钥制作成影片剪辑,并将代码放在它的时间轴上,这样无论您何时拥有密钥,一段代码都会运行。
猜你喜欢
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
相关资源
最近更新 更多