我有一个“ amoeba”游戏机制。关于如何实施的任何想法?


19

一个之外的俄罗斯方块克隆,一个蹩脚的2D自上而下的射手,和一些与像团结和Flixel东西乱搞,我意识到,我还没有完成一,抛光,钟声和口哨声游戏。我想更改此设置,并且对下一个项目有一个想法。

这个想法是你是变形虫。变形虫具有这些像眼睛一样的核心(或者类似的东西,我不了解生物学),而你有两个。您可以控制一个具有WASD与其他同IJKL。每个核心周围必须有恒定的填充半径:

2meba1

而且变形虫的面积必须保持恒定。因此,如果您在一个方向上移动核心,则会增加变形虫的面积,但其他地方的减少可以弥补这一增加:

2兆

我要实行一个阴道技工。您可以像老板一样吞噬事物来吸收事物。甚至可能是多余的核心,或者是一根针刺破了您,导致您所有的内在东西开始涌出

2meba3

但这是问题所在:我不知道该怎么做。但是,我想要一些有关如何实现它的想法。我应该探索Box2D之类的物理库吗?或者也许涉及流体物理学?任何帮助将非常感激。

PS随意窃取这个想法。我有很多主意。如果您这样做,请告诉我您的制作方式,以便我自己尝试。


3
名词-和动词形式是内陷invaginate分别,仅供参考。(我做过生物学。)好照片。
工程师

2
你从哪里得到那张可爱的黑纸?
brendan

5
@brendan:如果您将黑色与白色,红色与蓝色和白色与黑色交换,那么他得到这份“黑纸”的地方就变得更加明显。;)
knight666

1
你们太聪明了:D
Jason Tu

Answers:


16

在我脑海中浮现的那句话是,您希望面积恒定。这让我感到非常痛苦,所以让我们尝试并提出一个简单的解决方案。

取一根绳子,将两端绑在一起形成一个圆圈。我可能是错的,但我的直觉是说该字符串的内部具有恒定的面积,或者像变形虫的边界那样表现得很糟糕。

所以我会说:实现字符串。;)大多数物理学库都可以做弹簧(在Box2D中,它看起来像是距离关节),而制作琴弦的最简单方法是将许多琴弦连接在一起。将最后一个加入第一个,以创建一个循环。确保弦中的弹簧具有足够高的弹簧常数,以免被拉开-您希望它们具有足够的刚度并一致移动,而不要向外扩展。

接下来,创建作用在弦上的力。琐碎地,您的两个核心/眼睛/控制点会在构成弦的点上产生作用力。使用平方反函数使力下降:

float forceOnPoint(point, ball)
{
  float d = distance(point, ball);
  return K / (d*d);
}

并使力的方向直接远离控制眼/球,就像从球发出的排斥力一样。调整K以控制力量。确保K不太高-您不希望K仅仅被力大幅度推出,只是使其远离球。在您的琴弦中留出足够的松弛度。

只有这两个,您最终可能会得到一个统一的形状,因此,我还建议您在周围的“汤”中创建一些较弱的力来改变变形虫的形状。您可以设置这些随机的位置,定期更改其作用力(可以将其设为正弦函数以实现良好的运动),并使它们以与球相同的方式工作。

流浪(fnarr):这是困难的。通过检查字符串上两个不相邻的点是否已经设法足够接近,使它包围对象,如果需要,您需要:

测量字符串上两点之间的距离。计算弹簧部分的数量。找到从A到B的“较短”路径。

断开弦线,然后将其与相邻的两个点重新连接。换句话说,直接将A点连接到B点,并丢弃它们之间的所有东西。

将缺少的点数(如果想通过吃东西来扩大大小,则再加上任何奖励点数)重新插入另一侧(即从B到A的那一侧)的字符串中。使它们比点之间的期望距离短,您应该获得良好的弹性扩展效果。

我认为这涵盖了一切。顺便说一句:想法听起来很棒。


18
FWIW,虽然我总体上喜欢这种解决方案,但您对具有恒定面积的弦线内部的直觉错误的-圆具有以捆绑在一起的弦线为边界的任何形状的最大面积。观察其变化的最简单方法是想象通过拉紧两端来“挤压”琴弦。那么您所获得的形状(无论是矩形,椭圆形还是其他形状)都不会变得比周长的一半宽,但是其高度会缩小到零,因此面积(由宽度*高度限制)也会缩小到零。
史蒂文·斯塔德尼基

1
我认为您的意思是“ ...制成一根线是将许多弹簧连接在一起。”
理查德·马斯克

8

为了模拟内吞作用(细胞吞噬外部核心的过程),变形虫内部和外部的每个核心都将排斥变形虫的边界。变形虫内部的核具有适度的排斥作用,而外部的核则具有较小的排斥作用。如下所示。

在此处输入图片说明

当外部核心(红色)接近变形虫时,它的排斥场将在变形虫中产生圆形凹痕。最终,两侧(绿色突出显示)将彼此接触。当检测到这样的碰撞时,圆形压痕将被擦除,并且内部的任何消耗都会被消耗。

这很好地模仿了内吞作用的过程,并提供了很好的视觉效果。

至于模拟变形虫的边界,我喜欢马特·肯普(Matt Kemp)使用大量连接弹簧的想法。这不会保持恒定的面积,而是保持恒定的周长。在现实生活中,水可以自由流入和流出细胞膜(变形虫边界),因此细胞的体积并不恒定。


使游戏逼真的其他一些想法将能够以某种方式修改细胞的盐含量。当细胞内部和外部的盐浓度不匹配时,水将通过细胞膜冲向盐含量较高的地方,这称为渗透。如果变形虫的盐含量高,它将具有较大的体积,但周长不会改变。在游戏中,如果含盐量较高,可以通过给内芯更高的排斥效果来模拟。

由于较高的盐含量将赋予核较高的排斥效果,因此具有使变形虫易于控制的优点。较低的盐含量将使变形虫在环境的影响下更容易弯曲和弯曲。这样做的好处是可以更容易地食用其他核心,因为变形虫可以更容易地将其包裹起来。


3

要做图形效果,您很可能会使用metaball(其他在线教程为他们提供)


2

我知道一个叫做CellCraft(虽然与Minecraft无关)的教育性游戏,它涉及控制类似细胞的生物,其动作与您所需的动作非常相似。该游戏是免费的,而且可能更重要的是,他们在自己的网站上清楚地表示,他们打算免费提供源代码,它是由ActionScript 3制作的,并且是基于Flash的游戏。

http://www.cellcraftgame.com/Home.html


1

我要解决的方法是模拟一个类似于Matt Kemp建议的字符串循环,但内部会相互排斥并与字符串排斥。这样,您将确保大约节省体积。您将必须注意确保大的力不会将粒子敲到外面。

查找“平滑粒子流体动力学”以模拟粒子,并查找“ verlet积分”以模拟粒子(和弦)。Verlet是基于位置的技术,因此非常简单且稳定。

为了保持效率,我建议使用“统一网格空间划分”系统。再次,易于实现,并获得了极大的加速。

您也可以使用metaball可视化对象,而不使用字符串。但是,这样的问题是,粒子可能会分离成单独的团块。查找“范德华力”以获得吸引/排斥平衡,从而导致结块。

另一种方法是向弦线粒子的“向外”法线方向提供较小的“充气”力。这将模拟一种内部压力。结果是该循环将尝试保持圆形。这就是我用这个

希望能帮助到你。

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.