在基于瓷砖的游戏中砌墙:我想念的是什么?


25

在花了一些时间写下有关在我的基于图块的游戏中实现墙壁的一些注释之后,我突然意识到它不会像我以前想象的那样简单。虽然我的工作的当前阶段甚至还不能真正完成与墙相关的代码,但我已经提出了三种不同的方法。现在,我不确定哪一个想法最有效,以及我是否错过了什么。

重要提示:一个字符CAN站在那个有墙,无论其形式的区块。

所有这三个变体的共同点是:瓦片映射将被“保留”在基于一维std :: vector(或类似形式)的容器中。对此的原因(非常)在回答另一个问题时得到了解释。

基于图块的游戏中的容器类。

回到墙壁。

A)简单的方法。

这里没什么好看的。每个图块容器不仅可以容纳角色,而且还可以容纳一个或多个贴在图块内部边缘的Wall对象。

第一种方法

优点:易于实现,引擎没有任何变化。缺点:两件事。一个-可能只是在我脑海中,但有些组合看起来很丑。第二-这种方法可以用两个相邻的瓷砖制作双层墙。建筑物将是游戏的重要组成部分,而双层墙允许建造者放弃通过游戏方式升级墙的材料,而只是通过将现有墙加倍来提高耐用性。那是不可取的。当然,我可以包括一个禁止双壁的程序,但是会对它造成不良影响。

B)聪明(?)方法。

我不会让玩家把整个地图都塞满,而是要击败他们。每堵墙都有两半,从内侧连接到瓷砖的边缘。因此,要制作一个“墙单元”,我必须在两个相邻的图块中创建两个“半墙”对象。

第二种方法

优点:它是对称的!同样,不需要对当前发动机规格进行重大更改。缺点:比较麻烦,对象更多,当然还有“帽子”。如您在图片中看到的,拐角基本上会为“盖帽”对象哭泣。我真的很酷,添加起来并不难。嘿,我已经有一个计划,计划由四个连接的盖子制成的细柱。甜。不过,我仍然对可能的视野和视线问题感到担忧。

C)总检修款。

或者,我可以将边框和角创建为游戏对象的单独容器。就这样

第三种方法

优点:甚至不确定。好吧,这很简单。绝对是 缺点:需要大修。幸运的是,这不是代码,而是当前的游戏机制心态-可以肯定。好处不是那么明显。此外,该aprroach需要多少比前两者更容器。索引数学也会有些痛苦。

因此,在这里我们有了它-在瓷砖之间制作墙的三种不同方法。如果有其他选择-我们将很乐意将其检查出来。如果我没有看到的任何方法都有任何优点/缺点,请指出。


2
A.2:作为A,只有两侧(例如,北和西)可以有墙。这就是X-Com使用的方法。
Martin Sojka,

@Martin Sojka在东南角留下了一个洞。尽管如此,以这种方式考虑模型C可能还是有用的,每个图块可以具有三种不同的墙元素的组合,即noth,西和西北角。
aaaaaaaaaaaaaa

所以墙壁是可见的,我接受了吗?不只是阻挡瓷砖的边缘。为什么在选项B中需要两半?为什么不只将一面墙偏移一半到另一块墙面上呢?
理查德·马斯克

@eBusiness,如果您只允许在北部和西部设置墙,则可以通过在其下方的砖块的北部和西部放置墙来模拟南部和东部的墙。
四分

我建议使用C。这就是我在jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png中所做的工作,并且效果很好。唯一的问题是地图的最南/东边缘。您必须为此做些事情。
Blecki 2011年

Answers:


14

我会用你的方法“ B”。

为避免需要“盖”,只需在两个方向上将每个壁的厚度扩展为“ 1/2壁厚”即可。这将在它们相遇的地方创建重叠的墙,但是您的图表已经表明这不是问题。

因此,在方法“ B”(图3)中,水平墙向左延伸一点,而垂直墙向上延伸一点。

[我是新来的,刚刚注册。我错过了什么吗,因为您看不到原始帖子的“添加评论”按钮。这是享有较高声誉的人的特权吗?还是我忽略了明显的东西?很抱歉将此添加为“答案”。]


1
这是一个答案,我认为这是100(?)信誉级别。欢迎来到Gamedev SE!:)
共产主义鸭子

2

您注意到角色可以站在包含墙的图块上,但是您是否考虑过将每个图块都视为墙本身?甚至以水平或垂直方式将一半瓷砖作为墙?

优点:计算和放置都很简单,碰撞很简单,其中所有计算和碰撞都仅基于墙壁放置的坐标。

缺点:这可能会影响您的整个实施,代码和图形。您也不想完全放弃您的方法,您仍然想要特殊情况,其中只有一部分瓷砖是墙(用悬崖链接到过去)。

知道我总是可以引用一个图块并根据我的角色位置和它是哪种类型的图块,就可以以此为基础来实现我的实现。

城堡墙我可以从中心进行计算,画出一个我无法通过的盒子,或者如果它是圆石,我也可以从中心进行相同的计算,但是作为一个圆,这样我的角色就​​可以像这样移动四舍五入。


1

抱歉地说,第三种方法确实是思考的方法,好吧,您已经具备了这样做的能力,因此让我们继续思考其他两种方法吧!

问题是墙是零宽度,两个二维(在3D世界中为高*长)的正方形,将两个Box分隔开。您应该这样考虑它们,但是您可以在构建地牢时使用更简单的解决方案(特别是如果其他人可能会构建零件)。

看来这是一种自上而下的2D游戏,其中墙具有“宽度”,因此它们需要该角(您的“盖帽”对象)。不过,这完全是“图形”,因此我将采用以下几种方法:

带有图块的2D地图(即图块的类型等)。

具有2面墙的2D地图,例如。底部和右侧(左侧墙就是此墙左侧的图块中的“右侧墙”)。

+绘制所有墙壁和“帽子”等的逻辑。

从而将逻辑和图形分开。您可以做一个“接口”来处理SetWall(ThisTile,LEFT,NOWALL)->将ThisTile左侧瓷砖的右墙设置为“ NOWALL”。

也许这似乎很模糊,但事实是,您应该始终尝试一方面具有逻辑(实际数据,无冗余),另一方面应具有“数据绘制”功能,该功能可以计算是否需要“上限” '等

++

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.