房间属性

Room Editor Properties房间属性部分,您可以设置设置的继承切换,更改选项(如持久性、房间大小)和管理视口。当您在资源浏览器中选择房间资源时,此部分可见。

持续

通常,当您离开房间并稍后返回同一房间时,该房间将被重置为其初始设置。这通常适用于大多数游戏,但它可能不是你想要的,例如,RPG或任何非线性游戏,在这些游戏中,你想在房间之间来回穿梭,让它们保持上次离开时的样子。选中标记为持续的框就可以做到这一点。房间状态将被记住,当您稍后返回它时,它将与您离开它时完全相同,只有在游戏重新开始时才会重新设置为开始状态。请注意,这有一个例外--如果您将某些对象标记为永久对象,则此对象的实例将不会留在房间中,而会移动到下一个房间。

清除显示缓冲区

之后,您可以选择清除显示缓冲区。如果选中此选项,则在为特定帧绘制任何其他内容之前,会使用颜色预先填充显示缓冲区。如果你知道你的视窗将一直覆盖整个屏幕,或者你有一个全屏的,不透明的背景被绘制,那么你可以取消选中这个选项,这样可以节省重画,从而帮助优化你的游戏。

但是,如果您有多个视图,当屏幕上留有空白处,或者您的背景有透明部分时-您可以选中此选项,以便使用您选择的绘制颜色填充任何空白区域。 目前,此颜色只能通过代码使用window_set_color()进行设置。

有关清除视图,请参阅清除视窗背景

注意:如果您使用的是自动宽高比校正(如在游戏选项中设置的),则应始终选中此选项,否则您可能会在游戏所在的"信箱"上获得奇怪的效果。如果你不使用这个选项,那么你可以取消选中这个选项,并对你的游戏性能进行小幅提升(特别是在Android和其他移动平台上尤其明显)。

宽度、高度和其他选项

房间必须有大小,这是由您为其宽度和高度输入的值(以像素为单位)定义的。

然后,如果需要,您可以添加房间创建代码。创建代码是从底部的按钮添加的(与继承切换一起,表示房间是否应该继承它的创建代码),如果您单击它,您将打开一个代码或可视化编辑器。通过该编辑器,您可以输入在房间开始时、所有实例的创建事件之后、房间开始事件之前运行的函数/动作和代码(有关事件顺序的更多信息,请参阅此处)。此代码将在您每次进入房间时运行,除非房间被标记为持久的,在这种情况下,它将只在第一次进入房间时运行一次,而不是在以后访问房间时运行。

实例创建顺序

房间属性中的最后一个按钮允许您打开实例创建顺序窗口:

Instance Creation Order Window此窗口按照创建的顺序(从上到下)列出房间中的所有实例。如果您需要在创建任何其他实例之前创建特定实例,只需单击LMB Icon 并将其拖动到您需要的位置即可。请注意,实例将按照列表从上到下的顺序创建。

NOTE 房间中的实例是按照一定的 顺序 创建的,其创建事件也是在逐个创建的过程中执行的。这意味着在从创建事件中的其他实例读取变量时必须小心,因为其他实例可能还没有运行其创建事件!

例如:假设在 ObjectB 之前创建了 ObjectA,并且在这些对象的创建事件中有以下代码:

ObjectA Create -myValue=objectB.myValue;
ObjectB Create -myValue=10;

首先创建对象 A,然后运行它的创建事件,这会使游戏崩溃:

" 在读取变量 objectB.myValue(100003, -2147483648) 之前未进行设置。"。

这很简单,因为 ObjectB 甚至还没有创建,所以在它的创建事件中初始化的任何变量都不存在。这就是为什么在创建事件中引用其他实例时必须格外小心,包括在 with() 块内运行的任何代码。

 

 

摄影机和视口

您可以为房间定义的下一组属性是与房间相机视口. 相机视图相关的属性,这些属性提供了一种机制,用于在屏幕上的不同位置绘制房间的不同部分,或仅绘制房间的一部分以覆盖整个屏幕。例如,在大多数平台游戏中,相机视图跟随主要角色,因为如果你可以在屏幕上看到整个关卡,你的角色会太小而看不到,对玩家来说不会有任何惊喜。摄像机视图也可以用于多人游戏或合作游戏,因为它们允许您创建一个分屏设置,在屏幕的一个部分可以看到一个玩家,在另一个部分可以看到另一个玩家。这一切都可以在使用摄像头视图的GameMaker中轻松实现。

Camera And Viewport Properties在视图属性的顶部,您可以打开或关闭视图继承,然后会有一个标记为启用视窗的框。必须先标记此,然后才能在游戏中使用任何相机视图。

注意:您可以打开或关闭三个主要视区设置的继承,然后打开或关闭每个单独相机视图的继承。

下一个复选框显示清除视区背景,这类似于上面给出的清除显示缓冲区选项,只是专门针对视区。启用后,它会在绘制每个帧之前用窗口颜色清除应用程序表面。这可确保您不会通过背景中的透明区域看到任何意外的图形,例如任何先前帧的内容。如果您的背景包含任何透明度,启用此选项(以及"启用视窗")是很重要的。

摄像机视图由两组不同的值定义,摄像机视图本身和屏幕上绘制该视图的端口。这有时会导致混淆,所以在解释如何定义它们之前,让我们先解释一下:

Camera View Example 例如,这意味着您可以在房间中设置 640x480 摄像头视图,然后将端口设置为 320x240,这将在屏幕上显示缩小到该大小的端口的视图,您也可以执行相同的操作,将视图设置为较小的值,并将端口设置为较大,以使图像缩放到适合端口大小,并在屏幕上显示得更大。这样,您可以在更改相机视图的同时保持屏幕 (端口) 大小,以在屏幕的同一区域显示或多或少的房间。

摄像机视图始终定义为房间中的一个矩形区域,您可以在其中指定左上角的位置、该区域的宽度和高度。然后,您必须通过定义视区来指定此区域在屏幕窗口中的显示位置,并再次在其中指定左上角的位置和大小 (请注意,左上角不是 0,0 的任何值都可能产生奇怪的结果)。您可以有多个端口,并且它们可以重叠,在这种情况下,它们将按指定的顺序一个在另一个的上方绘制。

请注意,整个屏幕区域始终定义为矩形区域,因此您的端口即使在偏移时也会形成一个矩形,任何空白区域都将由显示缓冲区的窗口颜色填充,这意味着在这些情况下,您应该始终选中清除显示缓冲区,否则您将在端口之间的空间中绘制奇怪的人工制品。下图说明了这一点,其中有两个可见的偏移视图口,但它们形成了一个正方形窗口,并且在其下面绘制了到显示缓冲区的线:

Object Editor Post Draw相机也有对象跟随选项。这适用于当你想让相机“跟随”(即:保持聚焦于)某个对象的时候。为此,您必须单击菜单图标上的LMB Icon ;并从弹出的列表中选择一个对象(如果房间中有该对象的多个实例,则摄像机只跟在其中一个实例后面)。

摄影机的正常行为是,只有当被跟踪的实例太靠近在视图边缘形成不可见边界的"缓冲区"时才移动。您可以使用水平边框垂直边框值来定义该区域,因此,例如,将这些值设置为64将意味着,在距离视图边缘达到64像素之前,视图不会开始移动和跟随字符。

最后,您可以指示角色到达缓冲区时摄影机移动的水平垂直速度,其默认值为-1。这个缺省值基本上是"瞬时"的,意味着当下面的实例超出水平边框或垂直边框缓冲区时,视图将跳到其当前位置。现在,这并不总是您想要的,因此您可以通过将值设置为-1以外的值来设置相机的垂直和水平滚动速度。请注意,值为0将导致视图完全不移动,任何其他正值都是它将在任何帧中移动的像素数,因此将水平速度设置为5将使视图以每帧5像素的水平方向跟随对象。

 

 

房间物理

在您的游戏中使用内置物理功能之前,您必须告诉 GameMaker 该房间是一个物理室。为此,您必须勾选 房间物理 部分顶部的 启用物理 选项 (您也可以独立于其他房间设置切换此部分的继承)。完成此操作后,您可以继续设置物理世界属性,这些属性是一些基本属性,您必须先预定义这些属性,然后您的房间才能允许物理实例按此方式工作。为了更精确地控制世界,你可以使用代码 (有关更多信息,请参阅 物理函数 )。

Room Physics Properties你必须做的下一件事就是设置这个世界的重力。其强度和方向计算为围绕(0,0)点设置的x/y位置的向量。因此,x为0,y为1,将重力方向设置为向下,力为每秒1米(有关更详细的解释,请参阅物理世界)。

最后,您必须为 GameMaker 设置 像素与米的比率,以用作其所有物理计算的基础。这是因为物理函数适用于真实世界的测量,这就是我们必须设置此值的原因,您需要调整此设置,直到您正在使用的对象的平均像素大小大致转换为适当大小的模拟物理对象。

需要注意的是,在房间中启用物理意味着房间中所有启用物理的实例都必须使用物理函数和变量来移动。基本上,你有"传统的"移动,你可以设置一个实例的X/Y位置或设置它的速度和方向,然后你就有了"物理"移动,它需要物理力和脉冲来四处移动。这些系统是互不相关的,您不能使用非物理函数移动物理实例,也不能使用物理函数移动非物理实例。