我一直在用时间线代码编写游戏。我希望游戏中的不同帧(房间)能够在彼此之间共享信息。当然,时间轴代码仅限于写入的帧。
在做了相当多的阅读(“基础游戏设计与Flash”和一些文章,教程,论坛等)后,我决定使用一个文档类。这也不起作用。它似乎只适用于第一帧而不是其他帧(我有四个)。
我怎样才能让第四帧回应第一帧中幸福的东西?例如,如果玩家在第一帧中获得某些东西,我希望第四帧中的影片剪辑可见。
答案 0 :(得分:2)
如果您在时间线上编写代码,我的建议是在时间轴中创建两个图层,一个用于“框架操作” - 在此图层中插入特定于单个框架的代码(将在movieclip在该特定帧上停止了。)还创建了一个名为global-actions的层(对于整个时间轴)。只有第一帧才是关键帧,并且应该有空帧直到时间轴结束。 在此图层中,操作会在同一时间轴中的任何关键帧中编写您要访问的代码。
如果在为整个时间轴(全局操作)编写的操作中定义一个变量,那么它将在所有帧上可用。
现在,如果您想基于某个动作转到不同的帧,只需在包含全局动作的图层中编写一些函数,并通过帧动作调用该特定函数。要转到不同的帧,请使用flash的'gotoAndStop(frameNumber)'功能。
我想告诉你,虽然它会起作用,但我不建议以这种方式使用它。
HTH。
答案 1 :(得分:1)
您可以使用静态变量 - 这些是链接到类的变量,而不是它的实例。
假设您的文档类名为Document.as,并且您希望从程序的任何部分可以看到变量playerLives。
在Document.as中声明它:
public static var playerLives:int = 3;
然后,您可以使用以下代码直接从代码中的任何其他位置引用它:
Document.playerLives
(请注意,变量是类本身的成员,而不是它的实例)。
如果您希望保持文档整洁,或者将它们附加到相关类(例如Player.lives
)
我几年没有使用时间轴/帧,但我相信这就是我以前的做法!
NB Statics可以用于您的目的,但在某些方面,它们相当于AS2中的_global
变量(至少,它们可以以相同的方式使用) - 许多人不赞成它们的使用或过度使用,因为它们可以从你的程序中的任何地方免费访问(因此诅咒OO的封装概念),但我个人不小心在小的情况下担心它 - 最重要的是要了解它任何设计模式的规则都是可以破解的!
它们的访问速度也比实例成员稍慢,但你不会注意到这一点,除非你经常访问/更改它们(制作播放器速度之类的东西,需要每帧引用/更改,静态,是不是个好主意。)
希望这有帮助。
答案 2 :(得分:1)
您可能会发现将所有内容与文档类链接起来的最简单方法是将四个帧一起移动到一个动画片段中,然后将其放在第一帧上,然后与该动画片段进行交互。
E.g。在文档类中,时间轴上的movieclip实例被称为' game'。
game.gotoAndStop(4);
game.objectToDisplay.visible = true;
如果在IDE中遇到引用错误,则可以通过使用[]表示法来引用游戏属性来避免这些错误。游戏[" objectToDisplay"]。visible = true;
请注意,这并不是最好的做法,但它至少可以帮助你完成第一场比赛,这在你学习的这个阶段非常重要。之后,如果你想了解更多,那么我建议" Flash游戏必备指南"来自8bitrocket.com的Jeff Fulton - 它将教你如何有效地使用文档类。