回顾目前进展
在这一期中,讨论了游戏开发中的一个重要问题------如何处理Z轴值的表示,尤其是在一个3D游戏中,如何更好地表示和存储这些值。上次的进展中,已经解决了透视投影的问题,意味着渲染部分的Z轴代码基本上已经完成,但仍然有一个待解决的关键问题,就是如何在游戏中处理不同的楼层(z-levels)。
在3D游戏中,通常可以将各个层次视作相同的对象进行处理,但在Tschudi类型的游戏中,需要做更多的调整,考虑如何以一种有趣且健壮的方式处理这些层次。由于没有标准的答案,决定直接面对这个技术问题,展示如何在代码中做出折衷,以便找到一个合理的解决方案。
目前的主要任务是明确如何存储和处理这些Z轴的数值,确保它们能够有效表示世界中的多个层级,进而为进一步的开发工作奠定基础。
更深入地看一下透视投影
现在的目标是检查透视投影的设置,并重新思考世界的表示方式以及它应如何呈现。当前的投影参数可能并不完全现实,尤其是如果将其视作建筑物的楼层时,楼层之间的间隔看起来可能不够大。因此,调整的参数可能有些保守,尽管效果还可以,但仍显得有些不自然。
为了改善这一点,决定将楼层的高度调整为更合适的值,比如三米,这大约是建筑物楼层的标准高度,而不是像教堂那样的高天花板。这种调整看起来更符合实际,能够使得游戏中的世界呈现出更加合理的比例。
在查看这些参数时,有一个不太直观的地方需要注意:当前的设置中,摄像机到目标的距离被设定为与焦距相同。虽然这看起来合理,但也有些疑惑,因为这种设置并不完全符合预期的效果。通常当看到与预期不符的情况时,值得再三检查一下,确保所有设置都如预期工作。
虽然作为一个程序员,长期从事三维图形开发,可能会有一些特定的预期,但在二维游戏中,由于艺术风格和效果的不同,可能需要做出不同的调整。因此,虽然对这些设定有些疑虑,但也认识到这可能是一个学习的过程,最终可能会发现这种设置更适合二维游戏的表现方式。为了确保没有问题,仍然希望深入了解这些设置背后的原理。
黑板:透视方程的组成部分
现在讨论的是透视投影中的一些细节。基本上,场景中有一个世界和一些树木,这些树木分布在不同的层面上,形成一个环形结构。每个层面上都有树木,且树木环绕整个区域。在这个场景的中心,有一个虚拟的目标点,摄像机正朝这个目标点看过去。摄像机沿着Z轴上升,想要俯视这些物体。
原本期望在这个设置中使用一些参数来表示摄像机和虚拟显示器的关系。例如,假设有一个表示显示器的参数,距离显示器的焦距可以用来做透视计算,同时还有一个表示摄像机到目标点距离的参数,这些参数共同决定了透视效果。
然而,意识到的一个问题是,至今为止并没有定义显示器的实际大小。最初设定了一个"MetersToPixels"的转换值,但这个值是在当初使用正射投影时随便指定的,并没有根据显示器的实际物理尺寸来定义。这就导致了这些参数的值可能并不符合预期,可能是"MetersToPixels"的值本身设置错误,从而影响了最终的显示效果。
因此,决定今天要重新审视显示器的实际大小,明确它应该如何与世界单位(比如米)进行换算,并弄清楚像素在世界单位中的实际尺寸。这有助于更好地理解透视投影的原理,避免之前的误差。
确定我们的显示器大小
"MetersToPixels"(meters to pixels)转换的设置。最初,设定一个像素等于42毫米,意味着1米等于42像素。然而,问题在于这一设定可能并不合理,特别是在使用透视投影时。之前,使用正射投影时,像素的表示是直观的,但在透视投影中,像素的定位变得复杂了。
如果设定1米等于42像素,那么接下来需要确认显示器的大小。通过查看创建窗口时设定的分辨率(1204x800像素),可以计算出显示器的实际尺寸。经过计算,发现显示器的宽度约为28.666米,高度为19米,这相当于一个非常大的"虚拟显示器",甚至比常规的显示器大约十倍。这个尺寸显然不符合实际,导致"MetersToPixels"的转换值完全不准确。
因此,怀疑当前的"MetersToPixels"转换值并不反映实际情况,需要重新修正这个设定,确保它能正确地与世界坐标系对接。接下来的任务是修正这一值,以使其适应正确的显示尺寸。


考虑 MetersToPixels 和分辨率独立性
目前,MetersToPixels
(meters to pixels)转换主要用于两个地方:一个是透视投影的计算,这个地方需要使用它;另一个是在计算位图偏移时需要用到,因为位图的偏移是以像素为单位的。由于计算位图偏移时依赖像素,使用这个转换就显得有些麻烦。
为了简化这一过程,可以尝试将MetersToPixels
的转换从整个流程中去除。具体来说,可以将目前需要的数值转换成其他单位,这样就能让透视变换成为唯一一个需要考虑像素和世界单位如何互动的地方,其他部分的代码就不需要再处理像素了。这样做的好处是,游戏的其他部分不再直接依赖像素单位,这使得支持多分辨率变得更简单,不需要复杂的调整。举例来说,如果需要从当前分辨率切换到1920x1080分辨率时,处理起来会更直接,不需要每个部分都考虑像素,最终实现分辨率独立性,从而提高灵活性和可扩展性。
将我们的热点编码为与位图大小成比例
当前的计划是将热区(hot spots)编码为位图大小的比例,而不是使用MetersToPixels
的转换。这意味着,位图不再包含与MetersToPixels
相关的任何信息,也不再依赖该概念。通过这种方式,位图的尺寸可以以百分比表示,而不是直接与物理单位(如米或像素)相关联。
具体来说,将原来以像素为单位的对齐操作,改为以百分比表示对齐位置。这样,无论是使用像素、米,还是其他单位,百分比都能保持一致性,因为距离的百分比是独立于单位的。通过这种方法,位图的对齐点会依据位图宽度和高度的百分比来计算,从而避免了直接依赖MetersToPixels
的转换。
在代码实现上,需要对位图宽度和高度进行处理,计算出合适的对齐百分比。首先,定义一个align
变量来表示对齐位置,并使用位图宽度和高度来计算该位置。接下来,修改现有的对齐逻辑,使其支持百分比的对齐方式。最后,确保在所有涉及对齐的地方都采用这种新的百分比方式,而不是像素值。
经过修改后,代码中的偏移计算应该会正常工作,且所有的对齐操作都会根据位图的相对尺寸来进行,而不再依赖于像素或米之间的转换。这一改动不仅解决了原来的问题,还为将来支持多分辨率提供了更好的灵活性。

出现段错误

从编码调用中去除 MetersToPixels
目前,尽管通过将对齐操作改为使用百分比的方式,已经消除了米到像素
的转换,但在存储实际的生产数据时,依然使用了位图的宽度和高度。这意味着,米到像素
的转换仍然在编码过程中被直接使用,仍未完全摆脱这一依赖。
为了解决这个问题,计划引入一个新的概念:位图本身应该具有一个原生的缩放值,用于表示位图的缩放比例(即原生缩放比例)。通过这个缩放值,可以避免直接使用米到像素
的转换,使位图的存储和处理更加灵活和独立于像素和米之间的转换。
这种方法的目的是将位图的原生缩放比例与其实际宽度和高度分离,从而彻底摆脱原来基于像素的依赖,使得整个系统更加独立于分辨率和单位的转换。
黑板:我们将指定尺寸为米
目标是将物体的尺寸从像素单位转换为实际的米单位。当表示物体的高度时,将直接以米为单位进行定义。例如,在某一维度(如Y轴)上指定物体的高度,之后会通过计算来确定X轴的值。这个计算是基于精灵的宽高比(即其横向像素宽度与纵向像素高度的比例)来进行的。
该宽高比将作为一个比例因子存储在位图中,这样就可以消除"像素"这一单位的干扰。通过这种方法,宽高比将不再依赖于具体的像素尺寸,而是成为一个无单位的比率,这使得整个系统能够在处理过程中脱离像素和世界单位之间的转换。
通过这样的调整,系统将转向一个"像素中立"的方式来定义和处理物体的尺寸,进一步简化并标准化了对物体尺寸的处理。
引入 WidthOverHeight 并指定我们的预期大小
每次加载位图时,需要计算其宽高比(即宽度除以高度),并将这个比例存储下来。计算这个比例非常简单,只是一个基本的比率计算。计算完后,位图的宽高比将用于推算其他维度,确保无论传入的是多大的值,能够根据这个比例推算出相应的宽度或高度。
为了实现这一点,在加载位图时,可以将计算得到的宽高比存储为一个永久的值。具体来说,宽度与高度的比例会通过将结果宽度与结果高度相除来得到。
在进行位图推送调用时,传统的"米到像素"的转换机制将不再适用。取而代之的是,直接定义期望的物体尺寸(以米为单位)。如果希望保持当前的方式,可以在加载位图时,根据原有的"米到像素"比例来计算物体的尺寸。例如,可以通过位图的原始高度值与米到像素的转换值相结合,继续基于原来的像素尺寸来推算物体在物理空间中的尺寸,但这种做法并不是最理想的。
每当我们进行读取时
每次读取位图时,需要指定像素到米的转换值。通过这种方式,位图加载程序将成为唯一一个关心像素到米转换的地方。具体实现时,位图加载函数中将插入像素到米的比例,类似于"每42个像素等于1米"的转换关系。
然而,这个像素到米的比例可能需要进一步调整,因为目前的值可能并不完全符合预期尺寸。具体的值是否合理还需进一步确认,并可能需要根据实际需求进行修改。
在没有管道中任何值的情况下做这件事
目前的目标是清除不再需要的像素到米的转换,并且使整个过程更加简洁。在进行位图推送时,尺寸计算会根据位图的原始高度进行调整,同时确保每个对象都可以单独指定其高度,而不是通过固定的转换比例来计算。
在这过程中,像素到米的转换不再需要在渲染和存储过程中使用,只保留在与位图加载相关的部分。其他部分的代码则需要清理掉与像素到米转换相关的内容,确保所有计算都可以直接在米为单位的基础上进行。
之后,所有的渲染操作都将基于米来进行,而最终的像素计算将通过屏幕分辨率的转换因子来处理,这样可以确保无论分辨率如何变化,渲染效果都保持一致。这将使得系统更灵活,且避免了不必要的转换步骤,简化了代码。
黑板:单位立方体
在讨论二维和三维图形渲染时,提到两种常见的处理方式,一种是将它们融合为一个乘法操作,另一种是将其转换为单位立方体进行进出处理。尽管后者涉及更复杂的步骤,但由于对三维的兴趣,还是会简要提及这一方法。
在二维图形处理中,裁剪是一个相对简单的操作,几乎不容易出错,通常会使用一种称为"守卫带裁剪"的技术。这种技术在二维空间中是直接有效的,不会遇到复杂的边界问题。而在三维图形处理中,裁剪则变得复杂,通常需要借助"单位立方体"和四维单位齐次立方体来进行裁剪。
单位立方体是一个三维空间的表示,可以被看作是三维世界的"缩小版"。假设整个世界被压缩并映射到一个单位立方体内,裁剪的过程就是将这个单位立方体与世界空间的视锥体进行匹配。视锥体是由摄像机确定的可视区域,包含近裁剪面和远裁剪面。通过将这个视锥体映射到单位立方体,裁剪过程就可以在这个简化的空间内进行,最终筛选出正确的可视图像片段。
在这个过程中,三维坐标通常被映射到[-1, 1]的范围内,无论是X、Y还是Z坐标。这一过程通过投影矩阵完成,GPU负责将这些坐标从单位立方体空间转换到屏幕坐标。这通常会涉及一个额外的转换步骤,将坐标映射到实际像素坐标。
然而,对于某些简单场景,我们并不需要进行这两步处理(单位立方体到屏幕坐标的转换),因为可以直接将世界坐标转换为像素坐标,这样就省略了将坐标映射到单位立方体的过程。通过直接将世界单位(例如米)转换为像素单位,我们可以简化整个渲染流程,避免不必要的复杂性。
在这种情况下,使用一个从世界单位到像素单位的比例值就足够了,而不需要像三维渲染管线那样进行多重变换。




最后做 MetersToPixels 投影
可以将世界坐标直接转换为像素坐标,而无需经历单位立方体的转换步骤。尽管这种简化处理在当前情况下有效,但在未来如果转向OpenGL等框架时,可能需要更对称地处理转换,具体问题可以在需要时再解决。
在实际操作中,首先是将坐标从世界单位(米)转换为像素单位。这个转换是当前流程中唯一需要进行的,之后在渲染时,只需要确保这些转换正确应用即可。在代码中,这一过程涉及将世界坐标与像素坐标映射,并在相应的地方进行适当的投影处理。
在进行转换时,遇到了一些细节问题,比如不希望某个部分继续执行不必要的操作,或者在进行渲染资源分配时出现不符合预期的行为。虽然这些问题暂时不会影响主要流程,但在进一步开发时需要注意。
此外,在代码中还调整了一些变量名称,以便更清晰地反映它们的功能。例如,改进了与比例缩放有关的命名,以便更好地与原始尺寸相关联,并避免混淆。
整体来说,主要的目标是简化当前的处理过程,避免不必要的复杂步骤,同时确保每个转换环节都能按照预期的方式执行。
在游戏中查看它γ
目前的进展接近完成目标,但仍需调试最近的修改。尽管在去除"米到像素"的转换方面取得了进展,问题依然存在,特别是当对象变得非常小并快速移动时,表现出一些意外的行为。下一步需要专注于调试这些细节,以确保一切按预期运行。
调试它
在当前的实现中,基础缩放的计算看起来是正确的,基础缩放的作用是处理透视变换,确保最终的投影 x 和 y 坐标输出符合预期。问题出在缺少了正确的缩放值,特别是 Z 坐标的计算。为了正确生成像素级别的大小,必须在计算结果时适当缩放,确保最终的显示尺寸正确。

检查它并让 PushBitmap 开始指定它认为物体应该的尺寸
目前的目标是为位图推送(push bitmap)添加缩放功能,不仅仅是位置偏移,还要包括世界高度。通过这样做,可以确保图形元素的大小与实际世界中的物体高度相匹配。为了实现这一点,首先调整了位图推送的API,使其接受额外的高度参数,来指定物体在世界中的实际高度。
目前正在调试角色的高度。设定角色的高度为1.2米,这是大致的人物身高,同时需要为其他对象如阴影、树木和剑设定合适的尺寸。虽然这些值还不确定,目的是在之后调整和调试过程中细化。
一开始,位图的高度可能没有完全对齐角色的实际身高,因为位图的显示并不一定精确到角色的头顶。需要进一步检查和调整,特别是在计算角色身高时,考虑位图的实际占用空间。这可能是当前存在的一个问题,需要进一步的调试。


方便缩放

在 GIMP 中查看位图δ
在查看位图时,发现角色的位图尺寸存在问题。位图顶部和底部有很大的空白区域,这意味着角色的实际大小并没有正确匹配位图中的尺寸。具体来说,角色的躯干部分虽然在位图中,但上方和下方都留有空白,导致角色在显示时并不符合预期的尺寸。因此,当前角色的位图并未正确地表示其实际大小,需要进一步调整和修正。
合成地缩放 HeroBitmaps
目前,角色的尺寸需要在位图中进行合成缩放,以便使其看起来更接近实际的大小。角色的实际尺寸似乎比预期要小,大约缺少三分之一的高度。经过缩放后,角色相对于树木的大小看起来更加合理。然而,仍然不完全满意角色与树木的比例,认为它们之间的大小关系可能需要微调。为了达到更符合二维游戏美学的效果,可能需要引入一个大小系数来调整角色与树木的尺寸比例,以便更符合视觉需求。
查看并调整相机数值
目前,角色的大小已经调整到与树木相对较为合适的比例。接下来,需要调整视角的焦距以便更好地呈现场景。焦距的值看起来需要比之前的小一些,但考虑到要显示整个房间,可能需要较长的焦距。尽管这样,焦距的调整仍显得有些不自然,因此决定继续调整这些参数,直到获得更合适的视野。
对于角色的大小,尽管实际尺寸不应与树木相等,但为了更符合游戏的视觉效果,认为将角色大小设置为大致与树木相同会更合适。通过这种调整,角色的大小看起来更合理,并且感觉与环境更加匹配。最后,计划清理和优化相关代码,以便更好地实现这些调整。

清理这些东西
当前,角色的碰撞尺寸需要与角色的实际大小对齐,这个问题需要尽快处理。同时,已决定去除"NativeHeight"部分,因为它在当前阶段并不需要,直接移除可以简化代码。
接着,需要对渲染部分进行调整,确保渲染使用的是世界坐标,而不是像素坐标。在渲染函数中,所有的输入应该是世界坐标,如果某些特殊情况下必须使用像素,才会明确标注。这样可以减少像素坐标的使用,保持一致性。
在渲染过程中,涉及到从世界坐标转换到像素坐标的步骤时,想要基于屏幕的实际尺寸来处理输出目标。因此,想要传入屏幕尺寸信息,并根据屏幕尺寸来计算相应的屏幕中心。这样可以避免固定值,确保在不同的显示器上都能正确计算。

基于 ScreenDim.x 进行 MetersToPixels
目前,想要通过屏幕尺寸来确定每米对应的像素数量。为了实现这一点,决定通过计算显示器在世界坐标空间中的实际大小来确定像素与世界单位之间的比例。这意味着需要计算显示器在世界空间中的宽度,以此推算每米对应多少像素。
此外,还考虑在特定的距离下,如何在屏幕上呈现该显示器的大小,可能会涉及到一个百分比的屏幕尺寸来做调节。这将帮助确定每米与屏幕尺寸的映射关系。
最终,目标是使这个转换尽可能独立于分辨率,即无论使用什么分辨率,都能得到一致的显示效果。通过这种方式,可以确保显示的尺寸和世界空间之间的比例关系更加合理,不受分辨率的影响。

演示分辨率独立性
在设置分辨率时,目标是确保无论分辨率如何变化,显示在屏幕上的内容保持一致。例如,假设显示器的分辨率是1920x1080,而场景中有一排树,显示的数量依赖于分辨率。如果分辨率变化,树的数量应保持相同,确保不论分辨率如何,显示的内容都能适应屏幕。
为了解决这个问题,决定根据屏幕的实际大小来调整显示内容,避免分辨率变化时发生不一致。通过计算"每米到像素"的比例,可以确保无论分辨率设置如何,显示的内容都能按照预期的比例显示。这种方法使得显示内容与分辨率独立,确保在不同分辨率下,显示的物体数量和位置不会出现偏差。
此外,还需要计算"像素到米"的转换,这样可以确保屏幕尺寸和世界空间单位之间的关系是一致的。通过这种方式,可以在不同的分辨率和显示条件下,保持统一的显示效果,确保内容适应各种屏幕尺寸和分辨率设置。
最后,目标是让外部渲染系统能够统一获取这些值,以便其他部分不需要单独计算这些转换,从而提高代码的整洁性和一致性。

英雄/树的大小不应该由艺术分辨率决定吗?即为了保持恒定的像素密度?
在高分辨率的游戏中,并不需要追求像素级的精确度,尤其是像1920x1080这样的分辨率。过于追求像素精确可能会导致失去很多灵活性和艺术上的表现空间,因此,决定不将游戏中的英雄树的大小固定为与分辨率相适应的像素尺寸。相反,树木的大小可以根据不同的因素动态调整,这种调整方式有助于增加视觉上的多样性和趣味性。
不追求像素完美是为了允许更多的灵活性和艺术效果。例如,可以通过缩放来增加树木的大小差异,使得每棵树看起来都不一样,这样做能带来更丰富的视觉效果,而不需要严格控制像素的精确度。对于像素艺术而言,精确的像素可能更为重要,但一旦分辨率达到一定水平后,像素的精准度就不再那么重要。
相比之下,允许图形略微模糊,并且在一定范围内进行缩放,能带来更多的视觉趣味。尽管如果有人希望坚持像素精度,也可以这么做,但由于像素的摆放本身就有些许模糊(如总是介于两个像素值之间),因此过于强调像素的准确性可能会适得其反,甚至影响画面的流畅性。
总结来说,在高分辨率下,不必过分强调像素精确度,而是应当关注如何在艺术上提供更大的表现空间,增加画面的吸引力。
如果你想让游戏全屏,如何处理不同宽高比的屏幕?
在处理不同纵横比的屏幕时,仍需做出决策。例如,在全屏模式下,如果屏幕比例是4:3而非16:9,应该如何处理?一种选择是让玩家看到更少的屏幕内容,接受这一限制,并告知他们如果想要更广阔的视野,需要更大的屏幕;另一种选择是为屏幕加上黑条,形成类似信箱式的显示效果。
目前,虽然这一决策非常重要,但它并不会直接影响渲染过程。因此,可以在未来根据需要自由调整,而不必在当前阶段对其进行过多考虑。总之,纵横比问题可在将来灵活处理,不会对当前的渲染产生实质性影响。
问:宝宝伙伴
计划中将会添加一些"小型宝宝版"的伙伴角色,它们会跟随玩家并提供帮助。这一功能已经被记录,并计划加入待办事项清单。这是一个被认为必要的元素,大家都认同这个方向。
小阴影看起来很有趣
目前发现影子的大小有些问题,调整后影子的尺寸看起来更合适。尽管一些元素,如伙伴的大小,可能还需要调整,但当前的效果还算可以接受。此外,还注意到某些角色的缩放比例有问题,特别是伙伴角色。虽然这些问题还没有完全解决,但整体来说,调整后的效果已经不算差。同时,也考虑到可以将一些角色,例如躯体怪兽,放大,营造更加威胁的感觉。

问:如果树木跨越多个 Z 轴层级,那会很有趣。我们风格下能否实现?
考虑到让更大的树木跨越多个层级的想法,虽然这个概念看起来很有趣,但实际操作起来可能会遇到一些困难。因为如果树木跨越多个层级,这意味着玩家需要在树上上下攀爬,而树木本身在视觉上的表现也需要调整。具体如何实现,还不完全确定,可能需要设计一些小坡或者其他机制来实现这种跨层级的效果。
游戏现在支持缩放到任意分辨率了吗?
目前,游戏已经支持动态缩放到任意分辨率,能够在不同的分辨率下正常工作。虽然可以切换到更高的分辨率,但在渲染优化之前,最好避免使用过高的分辨率。即使渲染得到优化,也不建议在大多数机器上使用过高的分辨率,除非机器性能非常强大。因为要在像1920x1080或更高的分辨率下运行,可能需要使用GPU渲染,而不是CPU渲染。CPU渲染虽然可以支持高分辨率,但在性能上可能不理想。
在引入GPU后,才可以实现较高分辨率下的流畅帧率,CPU渲染主要是为了验证和了解整个渲染流程,而不是真正用于高效的玩家体验。因此,虽然CPU渲染支持高分辨率,但不适合在性能上有较高要求的情况下使用。
你能解释一下 #if #endif 这段代码的用途和何时/如何使用它吗?
if
语句和 #if 0
等预处理指令是用来有条件地启用或禁用某些代码段的工具。通常情况下,这种方法用于暂时关闭某些代码块,便于逐步开发和调试。
有两种常见的使用场景:
-
分阶段调试和开发 :当进行代码更改时,特别是当修改的部分影响较多时,可以先将一部分代码注释掉,专注于处理当前需要关注的部分。通过使用
#if 0
等指令,可以暂时禁用一部分代码,这样可以让开发人员在进行更大更复杂的修改时,确保能够逐步验证功能是否正常,避免一次性更改带来大量未知问题。 -
快速开关某些功能 :当有些功能代码是可选的,例如调试代码、测试功能等,可以通过
#if
来快速启用或禁用。这种方式可以不需要删除或手动注释掉代码块,只需切换开关即可方便地控制功能是否生效,而不会影响其他部分的开发工作。
总体来说,这种方法使得开发过程中能够灵活地管理不同功能块的启用状态,特别是在进行大范围的修改或调试时,可以保持代码清晰,并且减少不必要的重复工作。
楼梯的顶部和底部会有不同的艺术设计吗?如果是的话,如何使它们无缝连接?每一步的艺术设计是否会根据高度不同?
对于楼梯的艺术设计,考虑到它们可能会有不同的上下部分,设计思路是将楼梯的图形以位图的形式统一处理。在楼梯所在的楼层及位置,楼梯的图形会始终出现在正确的地方,这样就不需要为每个层级单独绘制不同的艺术作品。
至于如何使上下楼梯的视觉效果无缝连接,可以通过让楼梯成为不同楼层之间的过渡区域来处理。考虑到楼梯的图形在不同高度上展示是一样的,可以避免需要为不同的高度设计不同的艺术作品。然而,可能需要一些处理方法来使过渡效果更自然,例如调整楼梯在Z轴上的高度,或者在两个不同层级之间逐渐淡化切换的效果,但目前看来这种处理可能不必强制执行。
虽然这种处理方式看似可行,但由于这是一个涉及连续在不同Z轴高度之间移动的游戏,还没有看到其他游戏采用类似的设计,因此还需进一步验证效果。如果发现这种方式太复杂,或许可以考虑将视角切换为正交视图,这样只需要停止进行除法运算就能轻松实现,并且依然能够保持Z轴的功能。
我们能不能至少加入一些简单的 MS Paint 程序员风格的楼梯,而不是黄色方块?
目前考虑到楼梯的设计,虽然不希望使用黄色块作为占位符,至少可以考虑使用一些简陋的图形(例如用"画图"程序做的楼梯图形)来替代这些块状物,暂时填补楼梯的视觉设计空缺,直到最终的艺术设计完成。这种简陋的图形可以作为临时解决方案,让视觉效果看起来更完整一些。
楼梯的速度提升功能去哪了?
关于楼梯的速度提升效果,似乎目前没有明确讨论过这个问题,也不清楚曾经提到过这种速度提升。可能之前并没有专门提到过楼梯与速度提升相关的内容,或者这个功能还没有被实现或记录下来。
在打包时,是否会展示压缩方法和如何将所有资产打包成一个文件?
在打包资产时,计划将所有的艺术资产打包成一个文件,可能使用一种基础的压缩方法,比如采用类似 zlib 的压缩方式。然而,压缩方法不会进行深入讨论,也不会介绍复杂的压缩技术。计划使用的压缩工具是基本的 LZ 压缩器。至于是否会处理三维艺术和不对称图形,项目中采用的是类似于 TTR 艺术风格的三维方式,即允许世界在三维空间中运作,目的是展示如何在程序中健壮地实现三维功能,并帮助人们理解如何编写相关的三维程序。
英雄在楼梯上是不是应该变小?
英雄在楼梯上发生缩小的原因是因为当前位置的 Z 坐标更新与相机的位置更新存在一帧的延迟。这个问题出现在角色的 Z 坐标在移动时被计算出来,而相机的位置是在渲染后才更新的,导致角色在一帧内移动,而相机紧随其后更新。因此,角色的移动位置和相机的位置不同步,造成了一帧的延迟,表现为缩小的现象。
为了解决这个问题,需要确保更新过程中的各个部分按正确的顺序进行,特别是要确保渲染时相机的位置已经更新。在进行模拟计算时,需要将相机的更新放在正确的位置,避免由于相机位置滞后于角色位置而产生的延迟。可以通过适当的更新策略来确保相机和角色的同步,从而解决这一问题。
双分号!
关于双分号的问题,对它不满,认为它可能是不必要的或者不喜欢它的表现形式。提出如果不喜欢双分号,可以考虑使用三分号,认为这是更好的选择。这种讨论似乎带有一些幽默成分,表达了对语法细节的轻松探讨。