当前位置: 首页 > news >正文

评价一个网站浙江省建设厅 网站是多少

评价一个网站,浙江省建设厅 网站是多少,长春免费建网站,简单的php购物网站源码开场介绍 今天的任务是继续改进一个虚拟的瓦片地图系统#xff0c;使其适合处理更大的世界。我们希望这个系统能管理大范围的游戏世界#xff0c;其中包含按需存储的小区域。昨天#xff0c;我们介绍了“内存区域”的概念#xff0c;用于管理持久性存储。我们计划今天继续…开场介绍 今天的任务是继续改进一个虚拟的瓦片地图系统使其适合处理更大的世界。我们希望这个系统能管理大范围的游戏世界其中包含按需存储的小区域。昨天我们介绍了“内存区域”的概念用于管理持久性存储。我们计划今天继续这个主题深入探讨它的工作原理及其可能的优化方向。 目前我们的世界生成还相对简单只是随机生成了一些内容。今天的目标是进一步完善这个过程并实现一个可以存储和加载更大规模游戏地图的功能。 创建一些房间 我们开始设计一个简单的房间系统。为了让游戏中的小角色能够在这些房间里活动我们需要设置一些墙壁来限制空间。最初系统是随机生成的屏幕大小为32x32每个瓦片的值也都是随机设置的。为了改进这一点我们决定在游戏中加入一些实际的墙壁。 在实现时墙壁的放置方式是如果某个瓦片的位置位于屏幕的边缘我们就将这个瓦片的值设为1这样它就会成为一个“拦截器”或者墙壁。这样做可以在屏幕的边缘生成水平墙壁同时也可以生成垂直墙壁从而有效地创建封闭的房间。 通过这种方式我们能够创建出一个被墙壁围住的空间使得角色无法轻易离开这个房间直到墙壁的设置完成。最终这种设置形成了一个简单的房间角色被限制在其中无法脱离该区域。通过这样的方式我们为小角色提供了一个明确的活动空间。 创建一些门 目前已经有了基本的房间布局但是还没有添加任何门。接下来需要做的是为这些房间添加门。门的生成有一些条件首先需要检查是否满足条件才能在指定位置生成门。如果一个房间的高度大于 2则不需要门否则若宽度超过 2那么门会出现在中间位置。 这样就能在房间中生成门使得玩家能够通过这些门穿越不同的房间。这样创建的世界会非常庞大但目前它还只是一个简单的房间布局里面没有其他特殊内容。通过这个过程可以快速生成多个房间但这些房间目前并没有充实的内容。 进一步的想法是测试地图的稀疏性尝试进行优化或变化例如引入一些可能影响帧率的测试。当前的实现方式可能会很慢因为我们正在循环遍历所有的瓦片并对其进行操作因此需要进一步优化来提升性能。 小房间和瓷砖 ID 值的处理 瓦片尺寸调整 假设我们将瓦片的尺寸做得非常小这样在同样的屏幕空间内就能放置更多的瓦片。通过调整瓦片的大小可以使得在屏幕上显示更多的瓦片例如可能将像素单位调整为更小的值或者以更高的分辨率绘制瓦片地图。 调整世界的大小 通过改变瓦片的大小可以改变游戏世界的规模。当前测试场景的像素数量会影响地图的大小。例如将瓦片尺寸缩小使得每个瓦片占据的空间减少可以让地图的显示变得更大绘制的瓦片数量也会增加。 绘制瓦片地图 初步目标是绘制一个较大的瓦片地图版本而当前的绘制方法可能会导致帧率变慢特别是如果我们没有进行优化时。例如当瓦片数量增加绘制的计算量增大时性能可能会下降。 初始化瓦片地图 瓦片地图中的某些部分可能还没有初始化。如果某个瓦片区域没有内容即未初始化则需要使用不同的颜色或标记例如灰色来表示这些区域。这有助于在调试时看到哪些部分是空的哪些部分是有效的。 处理无效瓦片 当访问瓦片地图时如果某个区域没有被初始化或不包含任何内容可以将其标记为无效瓦片。当前如果返回值为零就意味着该位置没有瓦片。在绘制时可以选择不绘制这些无效区域避免浪费性能。 瓦片的不同值 当前的地图使用数值来表示不同类型的瓦片。例如0 代表没有瓦片空白区域1 代表可行走区域或地面而 2 可能代表墙壁或不可通过的区域。这些值可以用来定义不同的瓦片类型和其行为。 存储和数据结构 讨论中提到当前的瓦片存储方法并没有涉及到实际的存储结构和优化。瓦片存储需要更多的考虑因为随着地图的复杂性增加瓦片地图的存储需求和数据量也会变得更加庞大。可能需要考虑如何优化存储结构以更高效地管理这些数据。 下一步工作 下一步可能是进一步考虑如何设计和优化这些瓦片地图特别是在存储和访问瓦片数据时如何平衡性能和可扩展性避免无效区域的绘制并使地图可以更高效地加载和渲染。 仅在某些位置生成房间 - 随机数的使用 世界布局与坐标定义 当前世界的坐标系统定义了世界的范围然而并没有对所有位置的瓦片进行定义。例如某些区域可能没有瓦片或内容返回值为零。提到世界是“环形的”torodial即如果从一边走出会从另一边重新出现这种设计意味着世界的左右边界是连接的。 生成房间的策略 当前的想法是只在某些地方生成房间而不是遍历整个世界生成房间。这样可以减少计算量并控制房间的分布使世界变得更加有序和合理。 随机数的使用 在生成房间时讨论了随机数的使用。计划使用某些方法生成随机数字来决定哪些位置生成房间或进行其他操作。提到可以通过使用 C 运行时库来生成随机数但也在考虑其他方式来生成随机数字不一定依赖 C 库。 屏幕绘制与布局 提到当前的屏幕布局是一个 32x32 的瓦片网格而在优化时考虑到画面显示数量增加的情况下如何使得世界更加高效。计划将屏幕的生成从简单的循环播放改为更加动态的、基于随机数的方式生成屏幕。生成的屏幕数量将从 32 增加到 100且不再按固定顺序排列。 选择和移动屏幕 采用随机方式选择屏幕的位置而不是简单地按照索引顺序排列屏幕。例如可以选择一个随机位置创建一个屏幕并根据随机数字选择下一个屏幕的位置。 屏幕数量与逻辑 最初的设计使用了 32 个屏幕但现在计划增加屏幕数量至 100。新的生成方法将基于随机数来决定屏幕的位置和生成的顺序而不再是按固定的顺序进行。这种方法能够更灵活地布置屏幕提高游戏世界的多样性和复杂性。 总的来说这段内容主要讨论了如何通过改变屏幕的生成方式以及使用随机数来调整世界的布局和房间分布以创建一个更加动态和复杂的游戏世界。 回到随机地图生成 场景描述 首先讲述了一个“数字屏幕”或者“房间”的设计过程房间有门可以随机生成或调整。随机性在布局过程中起着重要作用可以通过增加或减少屏幕的X或Y坐标来生成不同的布局。 随机选择 使用随机数生成器来决定选择房间的方向例如增加X或Y坐标。采用mod操作符来通过取余数来决定随机选择的结果这通常用于生成二选一的情况例如取余2得到0或1。 随机数生成 提到了如何生成一个随机数表并使用一个随机数索引来选择数字。生成器需要在后续的世界生成中发挥作用。 实现与调试 随着系统开发出现了一些编程问题和调试细节例如代码缩进问题和性能问题。讨论中提到了生成随机数时遇到的一些困难以及尝试使用不同的技术来提高代码效率。 代码和算法 对话中涉及到使用宏例如键盘宏和文本模式来加速开发并谈论了C中的代码结构和调整。还讨论了如何有效地进行编辑、代码格式化和宏使用。 整体来看这段对话涵盖了房间布局生成的基本原理特别是在程序中如何通过随机数控制房间的排列并且提到了生成器、调试过程以及优化方面的挑战。如果需要更详细的代码示例或进一步的解析随时可以告诉我 随机生成的房间 还没有达到稀疏的效果 如何将一个本来存储整个地图的做法转变为一个更加稀疏的存储方式。起初整个地图被预先分配了存储空间但并没有实际填充任何数据只是创建了一个巨大的区域。随着开发的推进目标是让地图数据的存储更加高效只在需要的地方分配存储空间。 在实现过程中采用了16x16的块来划分地图区域每个块只有在需要填充瓷砖时才会分配实际的存储空间。这种做法称为“懒加载”或“按需分配”即只有在需要填充数据时才进行存储分配而不是预先为整个地图分配大量内存。 为了实现这一点首先会检查是否有瓷砖需要存储如果没有则不会为该区域分配存储空间。只有在访问某个区域并发现该区域没有初始化时才会为其分配存储空间。这样内存使用更加高效避免了存储不必要的空白区域。 这种方法使得游戏世界可以更加庞大因为不再需要为每个可能的区域预留大量的内存。只有实际可见或需要的数据才会被存储其他地方则不占用内存。这种“稀疏存储”的方法减少了内存的浪费并且可以轻松扩展世界的规模。 最终通过这种方法存储变得更加高效玩家也不会察觉到世界的其他部分的存在除非他们实际进入并加载这些区域。 制作门 在这个逻辑中主要任务是实现一个系统管理屏幕之间的门生成和墙绘制逻辑并且确保这些门和墙的布置能够动态地适应屏幕的布局和随机选择。 门的位置随机性 在进入屏幕时系统会随机选择门的位置。每个屏幕的门布置需要根据相邻屏幕的门状态来动态调整。例如如果左侧有一扇门那么这个屏幕的右侧也需要有一扇门以保持连通性。 门和墙的初始化 使用逻辑判断确定当前屏幕的边界顶部、底部、左侧、右侧是否需要绘制墙或生成门。如果边界在中心区域且需要生成门那么会绘制一扇门否则会绘制一堵墙。 逻辑设计要点 在生成门时必须确保上一屏幕的门状态被正确传递到下一屏幕。例如如果当前屏幕右侧有门那么相邻屏幕的左侧也需要有对应的门。对于顶部和底部边界同样的逻辑适用。 代码的改进点 初始逻辑是基于条件判断和剪切复制的代码虽然可以工作但不够优雅。可以通过优化条件判断减少重复代码使逻辑更加简洁和清晰。 测试与调试 在完成基础功能后对生成的门和墙的布局进行测试。确保门的生成逻辑与相邻屏幕的需求一致。修正了一个门生成错误具体问题在顶部门的条件判断中因符号错误导致逻辑失效。 实际运行结果 完成了基本的门和墙绘制功能能够根据屏幕布局生成合理的门。系统可以动态调整屏幕间的连接确保每个屏幕的布局与随机性生成逻辑匹配。 这个逻辑主要实现了屏幕布局的动态生成并通过门的随机性增强了地图的可玩性同时保证了屏幕之间的连通性。 回到显示单个房间的状态 从一个近距离的视角观察可以想象如果摄像机被锁定在某个位置玩家只能看到摄像机前的区域。在这种情况下玩家不会意识到世界的外部是如何被存储的因为他们永远看不到世界之外的部分。实际上虽然世界的外部并未被存储在玩家视野中但玩家会被引导去认为这个世界是无缝存在的实际上世界的外部并没有被完全渲染出来。 为了避免让玩家察觉这一点如果需要让摄像机平滑滚动至其他区域我们可以通过设计一个“围绕房间”的空间填充来确保无论摄像机如何移动都有东西供玩家查看。通过填充这些空白区域可以使玩家始终看到一些内容即使他们看不到实际的世界。 如果不想这样做也可以采取另一种策略。当到达某些没有内容的区域时可以随机生成一些图像或背景来填充这些区域而不是让玩家看到空白区域。这样做可以在视觉上维持一致性并给玩家一种完整世界的错觉。 在设计这些瓦片地图时目标是通过平铺数据来填充世界即使这个世界并不完全被储存也能让玩家认为它是无缝的。通过精心设计这些瓦片可以确保当玩家走到某个地方时他们不会注意到世界的边界。 整体而言通过这种设计可以确保玩家在探索虚拟世界时体验到一个流畅且持续的游戏环境而不必担心地图的大小或设计上的限制。通过对空间和视觉的精心布局可以保持游戏的沉浸感。 此时的地图已经相当大虽然在测试时穿越一百个屏幕需要相当长的时间但这也展现了游戏世界的广阔。而这些测试图形本身更像是展示游戏核心功能的工具。它们提醒人们曾经的经典冒险游戏也用了类似的技术。那些早期的游戏在视觉上看起来简单但依然能够给玩家带来深刻的体验。尤其是“冒险”这款经典游戏它通过非常简单的图形和有限的资源依然能够吸引玩家投入大量时间探索这个简单但充满乐趣的世界。 瓦片地图的回顾 现在瓦片地图已经基本完成接下来是讨论如何优化和改进这一实现。首先瓦片地图的尺寸可以灵活调整。一个关键点是我们不再需要将瓦片大小与像素大小绑定在一起因为瓦片地图本身不需要关心像素的具体细节它只是一个抽象的表示。瓦片的大小和像素之间的关系不再重要因此应该将这种绑定关系移除。通过这样做我们能让瓦片地图独立于实际的像素渲染从而让地图的存储和渲染变得更简洁。 接下来考虑到存储效率提出了一个虚拟化的瓦片存储方式。当前的系统在处理瓦片时仍存储一个包含指针的数组而这些指针指向实际的瓦片数据。这样尽管整个世界的大小可以非常庞大但实际上我们只存储了小块区域。存储时世界的每个区域并不是全尺寸的而是分成了较小的“块”进行存储类似于一个二维指针数组来表示世界的瓦片。 通过这种方法可以在有限的存储空间内管理一个非常大的世界。例如如果当前世界的大小是四十亿瓦片那么只存储16x16的区域块。这种分块存储的方式大大减少了内存占用因为我们只存储必要的区域数据而非整个世界的每个瓦片。 然而尽管这种方式节省了大量内存但仍然有优化空间。如果能进一步减少存储的数据量系统将变得更加高效。为了达到更高的稀疏性可以考虑进一步优化存储方法例如通过“真正的稀疏存储”方式仅在需要时动态加载和存储数据而不是将每个可能的区域都事先分配好。这种方式可以极大减少内存消耗尤其是在处理大规模世界时。 最终虽然当前的存储方式已经通过指针数组减少了内存占用但为了达到最优的稀疏性可能还需要进一步探索不同的存储策略比如基于空间位置的稀疏查找方法。这些方法可以确保只在必要时加载和存储瓦片数据从而最大化内存利用率和处理效率。 添加上下楼梯的功能 在开发城市地图时添加了对Z轴的支持以便能处理上下层次。这个修改的目标是使地图能够处理多个高度层次在这种情况下Z轴代表着垂直维度。增加Z轴的功能不难主要是通过给地图增加一个“上下”移动的能力来实现。最初Z轴只是一个附加的概念用来支持更复杂的地图层次结构。 这个过程中Z轴并不会像X轴或Y轴那样直接影响地图的存储方式因为通常我们不需要在任何时刻查看多个Z层。对于大多数情况来说Z轴层是分离的与X和Y轴的操作有所不同通常代表着“上下”之类的层次移动而不是二维空间中那样的平面划分。 接着修改了地图存储的方式将Z轴作为一个附加的维度来处理。具体来说存储时Z轴会对每个瓦片进行标记将其与X和Y坐标结合使得每个瓦片都能具备一个高度属性。这样Z轴的操作和存储方式需要特别处理尤其是在获取或设置瓦片值时每次都会附加Z轴信息。 这个过程中为了便于操作采用了三维坐标的存储方式而不是简单的二维平面。将X、Y和Z结合后形成了一个三维空间使得可以更清晰地表示不同层次的瓦片。在存储时X轴表示横向Y轴表示纵向而Z轴则用于表示上下的层级关系。每次移动Z轴时都会跨越一整块X和Y的区域。也就是说Z轴的移动代表着在三维空间中的“跳跃”每次上升一个Z层就会改变当前可见的瓦片。 总体来说添加Z轴的支持能够为地图带来更多的层次结构使得城市地图更加立体和复杂。而这个修改并不会引入太多新的复杂性因为主要的操作还是围绕着传统的二维瓦片地图展开。 继续疯狂地增加一些楼梯 这段文本描述了一段代码调试的过程涉及到随机选择和门状态控制等问题。下面是详细的总结和复述 开始时主要关注的是一个与随机选择相关的逻辑用于处理某种网格或地图系统。随机选择操作从三个选项中选择一个每个选项代表一种可能的动作或结果。根据随机选择的结果触发不同的条件。 尝试根据随机选择的结果设置不同的动作和条件具体条件与门的状态相关。例如当条件等于“二”时执行某些特定操作否则根据不同的条件切换样式或其他变量。条件似乎关注门是否存在以及门的“向上”或“向下”状态这可能是与游戏机制或关卡元素相关的设置。 在某一时刻逻辑涉及设置门的状态确保某个房间内没有出口或者根据需要调整瓦片或其他对象的状态。 接下来代码检查某些属性如库存是否相等并根据条件触发相应的操作。代码中出现了一个明显的错误导致门的状态出现异常行为可能是由于设置不当或逻辑流程错误。 还有对网格中的瓦片位置X、Y、Z坐标进行处理处理“向上”和“向下”门的状态。问题在于确保状态正确转换避免门被错误地放置或操作。 调试过程中发现与“门”状态相关的错误门的状态切换似乎存在故障导致一些预期条件没有得到满足。 在回顾这些行为后认为问题可能出在门的切换逻辑上或者是某些条件值如库存或瓦片条件的设置错误。尽管面临这些挑战仍在尝试通过追踪逻辑找到问题的根源并解决它。 调试过程涉及大量的试错目标是修正因随机选择逻辑和瓦片处理导致的错误尤其是与门状态和瓦片条件相关的问题。 核心问题是确保门的放置和状态转换符合预期同时排查在随机选择和瓦片管理中的错误。整个过程强调了在处理网格或系统中的状态变化和交互时的复杂性特别是当涉及随机结果和特定条件时。 你会使用德摩根定律DeMorgan’s Laws吗 这段对话讨论了布尔表达式的简化特别是涉及德摩根定律和真值表的使用。以下是详细总结 德摩根定律和简化布尔表达式 德摩根定律指出一些常见的布尔表达式等价关系例如not (A and B) 等同于 not A or not B这可以帮助简化复杂的布尔表达式。尽管这是一种有效的简化方法但实际中不常用尤其是在编写代码时。 实践中的做法 在实际编程中简化布尔表达式并不是常见的做法。通常情况下开发者倾向于将代码保持简洁和直观尽量通过清晰的表达式让代码易于理解而不是为了优化布尔运算的数量去做过多简化。在很多情况下编译器会自动优化这些布尔表达式因此手动简化的必要性较小。 编译器的优化作用 开发者倾向于依赖编译器来处理这类优化工作。编译器通常能够自动执行这些优化从而减少开发者的工作量。因此简化布尔表达式的主要工作交给编译器完成而开发者则更多关注代码的可读性和表达清晰性。 语言学简化的优先级 开发者更注重语言表达的简洁性而不是优化布尔运算的数量。清晰的表达式让代码更易于理解和维护因此在写代码时开发者倾向于使用更直观的表达式。 真值表的使用 真值表是一种帮助分析和简化布尔表达式的工具通过列出所有可能的输入条件并计算每种情况下的输出帮助了解布尔逻辑的行为。尽管这是一种理论上有效的方法但实际上并不常用。真值表类似于电子表格其中列出所有条件并分析每种条件组合下的布尔表达式结果。 总结 总体来说虽然德摩根定律和真值表是有用的工具但在实际编程中简化布尔表达式更多依赖编译器的优化而开发者则倾向于关注代码的清晰表达而不是手动进行布尔运算的简化。 将瓦片地图放入 3D 维度这是否与体素八叉树算法有关 三维空间和算法 提到将时间纳入三维空间虽然这种想法可能不直接相关于某个特定算法如 “Vauxhall Autrey Algorithm”但讨论的重点是如何理解空间的分割与优化。在三维空间中提到可以将一个体积分割为多个部分例如将一个立方体划分成八个较小的立方体。这种操作有点像魔方的分割可以进一步提升每个小立方体的分辨率。 在三维空间中填充 讨论了在三维空间中如何以无偏的方式进行空间填充即确保在所有维度中都有均匀分布。这种方法在某些情况下非常有效尤其是在处理三维空间时避免某一维度不均匀填充。 游戏世界的空间划分 对于游戏世界尤其是在二维游戏的上下文中这种三维分割的概念并不总是适用。二维游戏通常会集中于几个“切片”或“视图”而不是三维空间的完整填充。游戏的世界划分通常依赖于视角和地牢布局。例如可能会查看地牢的底层或顶部或者观察一定数量的“切片”而不是全景。 二维和三维视角的差异 在二维游戏中三维的空间划分并不总是有意义因为大多数游戏世界的视角和层次结构较为简单通常只处理较少的高度或深度。这里的讨论强调了二维与三维游戏中空间处理的差异。 树形结构的局限性 提到在游戏世界划分中使用树形结构来分割空间并不总是最优选择特别是当游戏涉及到复杂的世界结构时。树形结构可能在某些三维游戏中有效但在处理大规模、复杂的二维或多维地图时可能并不高效。 总的来说这段讨论将三维空间的划分和优化技术与游戏世界的设计进行了对比探讨了在不同类型的游戏中如何有效地应用这些概念。 为什么区块大小设置为 2 的幂次 这段对话深入探讨了算法优化和存储结构特别是在处理数据块大小和查找操作时的选择。以下是详细总结 块大小与2的幂 讨论了使用2的幂作为块大小的原因。这样做是因为在查找操作中使用移位和掩码shift and mask可以高效地分割数据。这种方法仅在块大小为2的幂时有效因为移位和掩码操作能够快速地提取数据的高低位部分。如果块大小不是2的幂就无法使用这种优化方法可能需要使用常规的除法和余数操作divide and remainder来代替。这样的方法虽然能完成相同的任务但效率较低因为需要进行除法运算。 移位与掩码 通过移位操作可以将数据分割成两个部分一个是块的高位部分另一个是低位部分。这个过程依赖于块大小是2的幂的前提因为这使得移位操作变得简单且高效。这使得块的划分非常清晰且能高效地进行索引。每次取余数来确定某一部分的数据比如瓷砖的索引而通过移位操作来确定数据的其他部分。 替代方案除法与余数 如果不使用2的幂理论上可以通过常规的除法和余数操作来进行划分。虽然这种方法可以工作但其性能通常不如移位和掩码高效尤其是在需要频繁进行查找操作时。 性能调优与选择 讨论了在性能优化过程中做出的决策强调在开发游戏引擎时要尽量避免做出那些会限制未来选择的设计决策。例如某些操作可能并不需要特别快但在某些情况下为了更好的存储和灵活性采用简单的除法和余数操作也是可行的。重要的是在开发过程中要确保能够保持灵活性以便未来能够根据需要调整优化方案避免过早地做出决策导致无法后续调整。 存储与操作的平衡 在决定使用哪种优化方法时需要权衡存储的效率和操作的速度。如果存储是主要考虑因素那么可以接受稍慢的操作以减少对存储空间的需求。反之如果操作速度更为重要可能需要继续使用2的幂作为块大小利用移位和掩码来优化性能。 总之这段讨论的核心在于如何平衡存储优化与操作效率。在设计和开发时必须考虑性能需求同时保持灵活性以便在实际实现中根据具体情况做出最佳选择。 什么时候会使用 #define 而不是局部变量 这段对话探讨了使用全局变量的情况及其优缺点尤其是如何在不同的情境下决定是否定义全局变量。以下是详细总结 定义全局变量的时机 使用全局变量是否合适取决于具体的需求和情况。在某些情境下使用全局变量可能是一个很好的选择但没有唯一的“正确”或“错误”的答案。关键在于理解使用它们的差异并据此做出选择。 全局变量的类型问题 无类型变量如常量在某些情况下使用没有类型的全局变量例如常量值可能是有利的。这样做的一个好处是这些变量可以在任何地方使用而不需要明确的类型定义。对于一些不需要类型约束的操作这种方式非常灵活。有类型的变量然而如果你需要对数据进行类型控制尤其是需要确保某些操作只在特定类型如无符号整数、浮点数等下进行时定义全局变量的类型是非常重要的。一个例子是如果你希望某个值只能在特定情况下如只有在 UN32 的情况下使用明确的类型定义可以避免错误发生。 移除类型的优缺点 优点没有类型的全局变量可以直接插入表达式中使得代码更加灵活。这种方法适用于那些不需要对数据进行类型严格控制的情况。缺点没有类型也意味着在某些情况下可能会导致数据使用错误。例如如果一个无符号 32 位数UN32被错误地用于不适合的场景可能会导致程序错误。为了避免这种情况可能需要对变量进行类型转换或额外的类型检查。 全局变量的具体应用场景 在某些情况下例如使用浮点数后缀或需要特定的类型全局变量可以帮助确保变量有一个明确的类型。例如如果想要一个八位类型的全局变量可能就需要通过显式定义类型来确保其大小和特性。例子如果需要使用某些操作如浮点数运算而该操作只适用于某种类型定义类型明确的全局变量就能够确保数据的正确性。 灵活性与限制 全局变量有助于在不需要特别精细控制类型的情况下实现灵活性但有时需要明确类型以避免潜在的错误。在某些复杂场景中无法简单地依靠类型推断必须使用强类型定义。 总结 总的来说使用全局变量是否合适取决于应用场景。如果不需要严格的类型控制使用无类型的全局变量可以提高灵活性如果需要控制数据类型则需要明确地定义全局变量的类型。每种方法都有其适用的场景且没有绝对的“正确”与“错误”。 为什么会偏好使用瓷砖区块数组 内联变量的使用 对于内联变量的问题提到并未使用内联变量。没有明确说明为何不使用内联变量主要是因为相关的概念并不在当前讨论范围内。 为什么不用位标志bit flags表示门的状态 标志通常用于表示二进制状态但当前的游戏设计并不适用这种方法。原因是目前的地图还未完成设计也未明确如何存储这些地图信息。门只是用一个数字表示以便进行测试并未深入实现。 为什么不使用简单的传送门 在某些情况下传送门可以简化游戏的设计使玩家在地图的不同部分之间移动。但如果只是使用传送门无法满足更复杂的游戏需求。例如传送门无法处理玩家看到的世界几何形状与实际地图之间的关系。想要展示多个房间或不同楼层之间的联系简单的传送门机制就不够用了。游戏需要一个更加持续和一致的世界其中的每个部分都能通过几何方式进行查询从而保证更复杂的互动和场景切换。例如玩家可以从一层看到另一层的内容这种设计无法通过简单的传送门来实现。 游戏世界的几何结构 游戏世界的设计应允许玩家在一个连贯的几何世界中自由移动这样不仅能够显示多个区域还能处理复杂的互动。例如假设游戏中有一个角色能破坏墙壁产生洞口玩家能看到并进入这些新的空间。为了实现这一点游戏需要知道这些空间是如何通过地图相连的而不是依赖于传送门或其他不反映真实地理关系的设计。 关于声音传播的例子 声音传播是另一个体现游戏世界几何结构的重要元素。假设玩家站在墙壁旁能听到另一房间内的声音尤其是像老板怪物这样的强大存在。如果系统仅仅依赖于传送门那么就无法处理这种墙壁穿透声音传播的问题。因此游戏设计必须具备能够处理空间连接的几何方式以便在复杂的环境中进行正确的声音传播。 为什么使用“块”Chunks而不是简单的传送门 游戏设计希望能以一种几何化的方式查询和展示世界。使用“块”可以将虚拟世界分成较小的单元在需要时可以通过几何方法查询这些单元。而不必担心将整个世界存储为一个庞大的数组或数据结构。这样设计的优势是既能保持世界的一致性也能让世界保持更大的扩展性。 是否计划按需加载/卸载瓦片区块 这段讨论主要涉及了内存管理、分页策略和游戏世界的加载与卸载。以下是详细总结 加载和卸载世界数据 关于游戏世界的内存管理提到世界的数据如瓦片块可能会保留在内存中但也有可能根据需求进行加载和卸载。加载和卸载的操作对当前设计而言非常简单因为系统已经为这一点做好了准备。如果某个瓦片块没有在内存中可以通过分页将其加载到内存中。这种加载方式非常灵活且几乎不影响性能。 分页方案 分页paging指的是按需加载数据块的方式。在当前方案中数据块的加载与卸载几乎是无成本的但仍有一些复杂的操作需要避免过于简单地进行分页。如果需要更复杂的分页方案比如根据需求动态加载或卸载数据需求分页这个过程理论上非常简单只需大约30分钟的时间进行调整。然而目前尚不确定是否真的需要实施这种复杂的分页策略。 是否计划让瓦片地图分层 这段讨论涉及到代码的复杂性和未来的计划特别是在生成游戏世界时的临时解决方案。以下是详细总结 代码的复杂性 游戏的最终程序代码看起来非常复杂尤其是语言层面的改动非常难以实施。这可能指的是代码的现有结构或设计使得任何语言上的修改都需要较大的工作量。 临时的农村生成代码 在开始进行世界生成尤其是乡村区域之前现有的代码只是作为一个临时解决方案存在。当前的目的是为测试城市地图town map提供一个简单的基础确保能够在更广泛的世界范围内进行测试。目前的代码并没有做任何实际的删除或优化只是用来进行初步的测试。这段代码并不代表最终的设计方案而只是暂时的过渡阶段。 未来的计划 这段代码被称为“垃圾”意味着它在实际项目中不会被使用。它只是一个过渡性工具用于测试和验证某些功能比如城市地图的表现。 基本稀疏瓦片地图存储是否需要压缩 图形、物理和逻辑的分层 对于游戏的图形、物理和逻辑系统的分层虽然可能存在不同的系统设计但这些系统可能并不会完全分开而是有一定程度的合并。例如图形和物理系统虽然是不同的部分但它们之间不一定会有完全分离可能会在实现时合并在一起。这样做是为了灵活性和便于修改。 资源切换和类型定义 在类型定义方面倾向于使用较为简化的方法。例如不使用特定的布尔类型而是采用整数类型来表示数据池这样可以避免频繁的转换减少性能开销。这种方式源自过去的习惯即避免过多定义和视觉化的类型从而简化了代码的书写和理解。 声音和平台的隔离 在声音管理方面游戏的声音部分需要独立管理以便在开始播放更多的声音时能有效地处理这些数据。同时也有一定的隔离意识避免过多依赖平台特定的实现保持一定的灵活性以便更好地控制声音资源。 资源压缩和内存管理 对于资源大小的担忧尤其是关于地图和艺术资产的大小虽然考虑过压缩策略但由于游戏资产如大规模的地图和图像资源可能非常庞大压缩可能不会带来显著的效益。尤其是如果瓷砖地图本身造成了内存压力压缩才可能成为一个值得考虑的方案。总体来说艺术资产的大小可能会限制压缩的有效性因此压缩方案不一定是优先选项。 内存压力和性能 对于游戏世界的大小预计不会对内存产生巨大的压力但如果瓷砖地图的内存需求超出了预期那么可以考虑使用一些技术来优化内存使用例如压缩。这些决策将依据实际的资源需求和内存使用情况来调整。 方法。 房间是否应该仅在玩家接近时才创建 是否担心内存泄漏 三目运算符不好吗 为什么无法保存完整地图 主要观点 稀疏存储的挑战 稀疏存储Sparse Storage是指只在需要时才分配内存避免预先分配过多空间。尽管这种方法可以节省内存但其代价是需要额外的计算和内存管理开销。随着资源减少稀疏存储的密集度会增加这意味着管理变得更复杂效率下降。 计算复杂度与存储的权衡 在大世界设计中如果希望通过稀疏存储减少内存占用那么在存储管理方面需要付出更高的代价。直接存储和访问稀疏世界中的数据可能会导致性能问题尤其是在动态改变世界如可破坏环境时存储需求会激增。 优化的重点是最坏情况 游戏开发中通常优化的焦点应该是“最坏情况”即当玩家处于复杂的环境中屏幕上显示的内容是最为密集和复杂的而不仅仅是优化那些玩家几乎不接触的区域。例如尽管优化那些不需要渲染的部分如被墙壁遮挡的区域看起来有意义但如果忽视了最坏情况的优化如大规模渲染的复杂环境反而可能导致游戏性能问题。 内存泄漏与资源管理 在内存管理上有些时候不需要过于担心内存泄漏的问题尤其是当所有的数据都存储在永久存储中而不常驻内存时。此时内存泄漏的风险较低但如果在游戏中涉及到动态修改如破坏环境那么数据存储和内存管理的策略就需要更加细致。 巨型纹理Mega Texture 在设计大规模世界时可能会考虑使用“巨型纹理”来存储完整的世界地图。但这种方法在内存中无法完全保存整个纹理而是通过分页的方式将需要的部分动态加载到内存中。巨型纹理的处理方式和存储方法要求在运行时将纹理分割并根据需要加载部分数据避免了将整个地图都加载到内存中的问题。 存储空间与游戏设计的平衡 在游戏设计中必须在存储空间、内存管理和计算成本之间找到平衡。例如使用稀疏存储可以减少内存占用但也可能导致存取速度的下降特别是在大规模动态世界中。当房间或环境发生变化时存储和管理这些变化的数据会变得更加复杂甚至可能导致性能问题。因此尽管理论上可以保存整个地图但由于内存限制和计算成本实际开发中通常选择动态加载和部分存储的方法。 总结 这段内容深入探讨了大规模游戏世界中如何处理存储和内存问题。关键在于如何在保持游戏世界动态和可变的同时优化内存使用和计算复杂度特别是在需要存储稀疏数据和应对动态变化时。 仓库 : https://gitee.com/mrxiao_com/2d_game
http://www.hkea.cn/news/14303452/

相关文章:

  • 2015做那个网站致富wordpress网站有哪些
  • c 做网站怎么居中饮料代理招商网
  • 网站建设修改建议书网站的特征包括哪些方面
  • 毕业设计网站建设流程免费查找资料的网站
  • 天津品牌网站建设好处哈尔滨建站优化定制
  • 网站开发费怎么做会计分录网站开发的后台开发工具
  • 网站开发ckplayer加载失败wordpress子页面怎么修改密码
  • 自己建网站做电商还赚钱吗网线制作过程图片
  • seo查询官方网站天津住房与城乡建设厅网站首页
  • 滨州市住房和城乡建设局网站wordpress主题页脚信息修改
  • 做好的网站做html的软件
  • 绿茵足球网站建设网站域名如何注册
  • 知名网站建设定制广告牌设计
  • 如何自己开发一个自己的网站什么是线上营销和线下营销
  • 网站制作公司哪儿济南兴田德润有活动吗阿里企业邮箱下载
  • 网站开发有关书籍做刷网站怎么赚钱
  • 做外贸在什么网站最好电子商务网页制作
  • 汕头潮南网站建设在网上做企业网站怎么做
  • 大众服务器网站定制版软件
  • 网站建设 客户拜访腾讯wordpress 建站
  • 用自己电脑建网站拓者设计吧账号
  • 新建网站如何让百度收录酒店加盟
  • 福州网站大全深圳广告公司集中在哪里
  • 那个网站做视频能挣钱服务器机房托管价格
  • 2017最佳网站设计wordpress 转 ios app
  • 网站页面背景基金会网站建设方案
  • 遵义城乡和住房建设厅网站网站开发的技术问题
  • 百度推广需要备案的网站吗微信小程序研发
  • 网站空间租赁合同wordpress .mo文件编辑
  • 域名注册好了如何做网站有没有免费看的视频