「アメーバ」ゲームメカニックがいます。それを実装する方法についてのアイデアはありますか?


19

テトリスクローンの外側、安っぽいの2Dトップダウンシューター、およびUnityとFlixelようなものをいじりいくつかは、私が完了するまでには至っていないことを実現し、単一の、研磨、ベル・アンド・ホイッスルゲームを。これを変更したいのですが、次のプロジェクトのアイデアがあります。

アイデアは、あなたがアメーバだということです。アメーバにはこれらの目のようなコア(またはそのようなもの、私は生物学を知りません)があり、あなたはそれらのうちの2つを持っています。で1つを制御しWASD、もう1つをで制御しIJKLます。一定の半径のものが必要です各コアの周囲に。

2meba1

そして、アメーバの面積は一定でなければなりません。したがって、コアを一方向に移動すると、アメーバの面積が増加しますが、その増加はどこか他の場所での減少によって補われます。

2meba2

Aaaaaand私は膣のメカニックを実装したいと思います。あなたは上司のようにそれらを飲み込むことで物事を吸収します。たぶん、余分なコア、またはあなたを飛び出させて、あなたの内なるすべてを開始させる針噴出さ:

2meba3

しかし、ここに問題があります。これを作成する方法がわかりません。しかし、私はそれを実装する方法についていくつかのアイデアが欲しいです。Box2Dのような物理ライブラリを調べる必要がありますか?それとも、流体物理学が関係しているのでしょうか?どんな助けでも大歓迎です。

PSこのアイデアを盗んでください。たくさんのアイデアがあります。もしそうなら、どうやって作ったか教えてください。


3
名詞と動詞の形式は、それぞれ陥入陥入です(FYI)。(私は生物学をしました。)素敵な写真。
エンジニア

2
あなたはその甘い黒い紙をどこで手に入れましたか?
ブレンダン

5
@brendan:黒と白、赤と青、白と黒を交換すると、彼がこの「黒い紙」を手に入れた場所がもっとはっきりします。;)
knight666

1
君たちはあまりにも賢いです:D
ジェイソン・火

回答:


16

私の頭から離れて、私に突き出ている節は、あなたが面積を一定にしたいということです。これはすべての苦痛として私を打つので、それに対する簡単な解決策を試してみてみましょう。

ひもを取り、両端を結びつけて円を作ります。私は間違っているかもしれませんが、私の直感では、その弦の内側は一定の面積を持っているか、アメーバの境界のようにひどく行動するだろうと言います。

だから私は言うだろう:文字列を実装します。;)ほとんどの物理ライブラリはスプリングを実行できます(Box2Dでは、これは距離ジョイントのように見えます)。文字列を作成する最も簡単な方法は、多くの文字列を接続することです。最後の1つを最初の1つに結合して、ループを作成します。ストリング内のスプリングは、バラバラにならないように十分に高いスプリング定数を持っていることを確認してください-それらは非常に硬く、一斉に動き、拡張しないようにしたいです。

次に、ストリングに作用する力を作成します。当然ながら、2つのコア/目/コントロールポイントは、弦を構成するポイントに力を加えます。逆二乗関数を使用して力を減衰させます。

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

そして、ボールから発する反発力のように、力の方向をコントロールの目/ボールから直接離します。Kを調整して、力の強さを制御します。Kが高すぎないことを確認してください-力で大きく押し出されたくないので、ボールから遠ざけてください。弦にたるみをたくさん残します。

これら2つだけで、おそらく非常に均一な形状になります。そのため、アメーバの形状を変更するために、周囲の「スープ」に弱い力を加えることをお勧めします。これらのランダムな場所を作成し、その力を定期的に変更して(素敵な動きの正弦関数にすることができます)、ボールと同じように機能させることができます。

予防接種(fnarr):これは難しいものです。文字列上の2つの隣接していないポイントが十分に近づいたかどうかを確認することで、オブジェクトを囲むようにします。

ストリング上のポイント間の距離を測定します。ばねセクションの数を数えます。AからBへの「より短い」パスを見つけます。

文字列を分割し、隣接する2つのポイントで再結合します。つまり、ポイントAをポイントBに直接結合し、その間のすべてのものを破棄します。

不足しているポイント数(および何かを食べてサイズを拡大したい場合はボーナスポイント)を反対側の文字列(つまり、BからAの辺)に再挿入します。それらをポイント間の望ましい距離よりも短くすると、弾力性と拡張性に優れた効果が得られます。

それがすべてをカバーすると思います。ところで:アイデアは素晴らしいですね。


18
FWIW、私は全体的にこの解決策が好きですが、一定の面積を持つ弦の内部についてのあなたの直感間違っています-円は境界としてその結び付けられた弦を持つ任意の形状から最大面積を持っています。それが変化することを確認する最も簡単な方法は、両端をぴんと張って弦を「押しつぶす」ことを想像することです。次に、取得する形状(長方形、楕円、または持ち物)が周囲の半分よりも広くなることはありませんが、その高さはゼロに縮小するため、領域(幅*高さで区切られている)もゼロに縮小します。
スティーブンスタドニッキー

1
あなたは「...ひもを作ることは、たくさんのバネをつなぐことだ」と思っていたと思う。
リチャードマースケル-ドラッカー

8

エンドサイトーシス(細胞が外部コアを食べるプロセス)をシミュレートするために、各コアは、アメーバの内側と外側の両方で、アメーバの境界をはじきます。アメーバの内側のコアには中程度の強い反発効果があり、外側のコアには小さな反発効果があります。これを以下に示します。

ここに画像の説明を入力してください

外側のコア(赤)がアメーバに近づくと、反発フィールドがアメーバに円形のくぼみを作成します。最終的に、両側(緑色で強調表示)が互いに接触します。このような衝突が検出されると、円形のインデントが消去され、その内側のすべてが消費されます。

これはエンドサイトーシスのプロセスを非常によく模倣し、素晴らしい視覚効果を与えます。

アメーバの境界をシミュレートすることに関しては、接続された非常に多くのスプリングを使用するというマットケンプのアイデアが好きです。これは一定の面積ではなく、一定の周囲を維持します。実際には、水は細胞膜(アメーバ境界)を自由に出入りできるため、細胞の体積は一定ではありません。


ゲームを現実的にするためのいくつかの他のアイデアは、何らかの方法で細胞の塩分を変更できることです。セルの内側と外側の塩濃度が一致しない場合、水は浸透と呼ばれるプロセスで細胞膜を通過して塩分がより高い場所に向かって流れます。アメーバの塩分が多い場合、体積は大きくなりますが、境界線は変わりません。ゲームでは、これは、塩分が多い場合に内側のコアに高い反発効果を与えることでシミュレートできます。

塩分の含有量が多いと、コアの反発効果が高くなるため、アメーバの制御が容易になるという利点があります。塩分が少ないと、環境の影響下でアメーバが曲がったり曲がったりしやすくなります。これには、他のコアをより簡単に食べることができるという利点があります。これは、アメーバがそれをより簡単に囲むことができるからです。


3

グラフィカル効果を実現するには、メタボールを使用する可能性が高くなります(オンラインで多数のチュートリアルがあります)


2

CellCraftと呼ばれる教育用ゲーム(Minecraftとは関係ありません)を知っています。これは、必要なものと非常に似た動きを持つセルのような生き物を制御することを含みます。このゲームは無料であり、おそらくもっと重要なのは、ソースコードを無料提供するつもりであり、ActionScript 3で作成されたFlashベースのゲームであることをサイトで明確に述べたことです。

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


1

これについては、Matt Kempが提案した方法に似たストリングループをシミュレートしますが、内部は互いに反発する粒子とストリングで埋めます。これにより、おおよそのボリューム保存が保証されます。大きな力が粒子を外部にたたかないように注意する必要があります。

粒子のシミュレーションについては「滑らかな粒子の流体力学」を調べ、粒子(および文字列)のシミュレーションについては「微積分」を調べてください。Verletは位置ベースの手法であるため、非常にシンプルで安定しています。

効率を保つために、「均一なグリッド空間分割」システムを提案します。繰り返しますが、実装が簡単で、大幅な高速化が実現します。

文字列を使用する代わりに、メタボールを使用してオブジェクトを視覚化することもできます。しかし、その後、粒子が別々の塊に分離するという問題があります。凝集につながる引力と反発のバランスについては、「ファンデルワールス軍」を参照してください。

別のアプローチは、ストリング粒子に「外側」法線の方向に小さな「膨張」力を与えることです。これは一種の内圧をシミュレートします。その結果、ループは円形を維持しようとします。それが私がこれに使用したものです。

それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.