나는“amoeba”게임 정비사가 있습니다. 그것을 구현하는 방법에 대한 아이디어가 있습니까?


19

(A)의 외부 테트리스 클론 하는 엉터리 차원 하향식 사수 , 그리고 단결과 Flixel 같은 물건 장난 일부는, 내가 완전한 아직 실현 , 광택, 벨 앤 휘파람 게임. 이것을 변경하고 다음 프로젝트에 대한 아이디어가 있습니다.

아이디어는 당신이 아메바라는 것입니다. 아메바는 눈과 같은 핵심을 가지고 있으며 (또는 생물학을 몰라요) 당신은 두 가지를 가지고 있습니다. 를 사용 WASD하여 하나를 제어 하고를 사용하여 다른 하나를 제어 하십시오 IJKL. 각 코어 주위 에는 일정한 반경의 물건 이 있어야합니다.

2meba1

그리고 아메바 지역은 일정하게 유지되어야합니다. 따라서 코어를 한 방향으로 움직이면 아메바 영역이 증가하지만 그 증가는 다른 곳의 감소로 보상됩니다.

2meba2

Aaaaaand 나는 vagination mechanic 를 구현하고 싶다 . 당신은 상사처럼 그들을 삼켜 서 물건을 흡수합니다. 아마도 여분의 코어 또는 바늘이 당신을 튀어 나와 모든 내부 물건이 분출 하기 시작하는 바늘 일 수도 있습니다 .

2meba3

그러나 여기에 문제가 있습니다 : 나는 이것을 만드는 방법을 모른다. 그러나 구현 방법에 대한 아이디어가 필요합니다. Box2D와 같은 물리 라이브러리를 탐색해야합니까? 아니면 유체 물리학이 관련된 것일까 요? 도움을 주시면 감사하겠습니다.

추신 :이 아이디어를 훔칠 수 있습니다. 많은 아이디어가 있습니다. 당신이 할 경우, 내가 직접 시도 할 수 있도록 당신이 그것을 만든 방법을 알려주십시오.


3
명사와 동사 형태는 각각 침략침략 입니다. (나는 생물학을했다.) 멋진 사진.
엔지니어

2
그 달콤한 검은 종이는 어디서 얻었습니까?
brendan

5
@brendan : 검은 색을 흰색으로, 빨간색을 파란색으로, 흰색을 검정색으로 바꾸면이 "검은 종이"가있는 곳이 훨씬 더 분명해집니다. ;)
knight666

1
너희들은 너무 똑똑해 : D
Jason Tu

답변:


16

내 머리 꼭대기에서 나에게 튀어 나오는 조항은 영역을 일정하게 유지하려는 것입니다. 그것은이 모든 것의 고통으로 저를 때 리므로, 그것에 대한 쉬운 해결책을 시도해 봅시다.

끈을 잡고 끝을 묶어서 원을 만듭니다. 나는 틀릴 수도 있지만 내 직감에 따르면 그 끈의 내부는 일정한 면적을 가지고 있거나 아메바 경계와 같이 끔찍한 행동을 할 것이라고합니다.

그래서 나는 말할 것입니다 : 문자열을 구현하십시오. ;) 대부분의 물리 라이브러리는 스프링을 수행 할 수 있습니다 (Box2D에서는 거리 조인트처럼 보입니다). 줄을 만드는 가장 쉬운 방법은 많은 줄을 함께 연결하는 것입니다. 루프를 만들기 위해 마지막 것부터 처음까지 합치십시오. 끈의 스프링이 팽팽하지 않을 정도로 높은 스프링 상수를 가져야합니다. 확장되지 않고 단단하고 움직이기를 원합니다.

다음으로 문자열에 작용하는 힘을 만듭니다. 사소하게, 두 개의 코어 / 아이 / 컨트롤 포인트가 스트링을 구성하는 포인트에 힘을 생성합니다. 역 제곱 함수를 사용하여 힘이 떨어지도록합니다.

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

그리고 공에서 나오는 반발력처럼 힘의 방향을 제어 눈 / 볼에서 직접 멀리하십시오. K를 조정하여 힘의 강도를 제어합니다. K가 너무 높지 않은지 확인하십시오-힘에 의해 대량으로 밀어 내기를 원하지 않고 공에서 멀리 떨어지십시오. 줄을 느슨하게 두십시오.

그 두 가지만 사용하면 아마 균일 한 모양으로 끝날 것이므로 주변 '수프'에 약한 힘을 만들어 아메바 모양을 변경하는 것이 좋습니다. 이 임의의 장소를 만들고, 힘을 정기적으로 바꾸고 (좋은 움직임을 위해 정현파 기능으로 만들 수 있음) 공과 같은 방식으로 작동하게하십시오.

배신 (fnarr) : 이것은 어려운 일입니다. 문자열의 인접하지 않은 두 지점이 충분히 가까워 졌는지 확인하고 필요한 경우 다음을 확인하여 객체를 감싸도록합니다.

끈의 점 사이의 거리를 측정하십시오. 스프링 섹션 수를 세십시오. A에서 B까지의 '더 짧은'경로를 찾으십시오.

줄을 끊고 인접한 두 점으로 다시 결합하십시오. 즉, 점 A를 점 B에 직접 연결하고 그 사이의 모든 것을 버립니다.

잃어버린 점수 (그리고 무언가를 먹으면서 크기를 늘리려면 보너스 포인트를 더한 것)를 다른 쪽 (즉, B에서 A 로의 측면)에 다시 삽입하십시오. 포인트 사이의 원하는 거리보다 짧게 만들면 스프링 효과가 뛰어납니다.

나는 그것이 모든 것을 다룬다 고 생각한다. 그건 그렇고 : 아이디어는 굉장히 들립니다.


18
FWIW, 나는이 솔루션을 전체적으로 좋아하지만 일정한 면적을 갖는 줄의 내부에 대한 직관 잘못되었습니다. 원은 그 묶인 끈을 경계로 사용하여 최대 모양의 모양을 갖습니다. 그것이 다르다는 것을 보는 가장 쉬운 방법은 두 끝을 팽팽하게 잡아 당겨서 끈을 '말리는'상상하는 것입니다. 그런 다음 모양 (사각형 또는 타원 또는 무엇을 가지고 있든)은 주변의 절반보다 넓어 질 수 없지만 높이는 0으로 줄어들므로 너비 (높이 * 경계선)가 0으로 줄어 듭니다.
Steven Stadnicki

1
"... 줄을 만드는 것은 많은 스프링 을 연결하는 것"이라고 생각 했습니다.
Richard Marskell-Drackir 2014

8

세포 내이 입증 (세포가 외부 코어를 먹는 과정)을 시뮬레이션하기 위해, 아메바 내부와 외부의 각각의 코어는 아메바의 경계를 격퇴 할 것입니다. 아메바 내부의 코어는 적당히 강한 반발 효과를 가지며, 외부의 코어는 작은 반발 효과를 갖습니다. 이것은 아래에 설명되어 있습니다.

여기에 이미지 설명을 입력하십시오

바깥 쪽 코어 (빨간색)가 아메바에 접근함에 따라 반발 장은 아메바에서 원형의 압흔을 만듭니다. 결국 양면 (강조 표시된 녹색)이 서로 닿습니다. 이와 같은 충돌이 감지되면 원형 들여 쓰기가 지워지고 그 안에있는 모든 것이 소비됩니다.

이것은 endocytosis 과정을 아주 잘 흉내 내고 멋진 시각 효과를 제공합니다.

아메바의 경계를 시뮬레이트하기 위해, 나는 매우 많은 수의 연결된 스프링을 사용한다는 Matt Kemp의 아이디어를 좋아합니다. 이것은 일정한 면적을 유지하지 않고 일정한 둘레를 유지합니다. 실제로는 물이 세포막 (아메바 경계) 내외로 자유롭게 흐를 수 있으므로 세포의 부피는 일정하지 않습니다.


게임을 현실적으로 만드는 다른 아이디어는 어떻게 든 세포의 소금 함량을 수정할 수 있다는 것입니다. 세포 내부와 외부의 염 농도가 일치하지 않으면 삼투라고하는 과정에서 물이 세포막을 통해 염분 함량이 높은 곳으로 돌진합니다. 아메바가 소금 함량이 높으면 부피가 커지지 만 둘레는 변하지 않습니다. 게임에서 이것은 소금 함량이 높을 경우 내부 코어에 더 높은 반발 효과를 주어 시뮬레이션 할 수 있습니다.

염분 함량이 높을수록 코어의 반발 효과가 높아 지므로 아메바를보다 쉽게 ​​제어 할 수 있다는 이점이 있습니다. 염분 함량이 낮 으면 환경의 영향으로 아메바가 구부러지고 구부러 질 수 있습니다. 이것은 아메바가 더 쉽게 둘러 쌀 수 있기 때문에 다른 코어를 더 쉽게 먹을 수 있다는 이점이 있습니다.


3

그래픽 효과를 내기 위해 메타 볼을 사용했을 가능성이 높습니다 (많은 튜토리얼이 온라인에 있습니다)


2

나는 CellCraft (Minecraft와 관련이 없음)라는 교육 게임에 대해 알고 있습니다. 여기에는 필요한 것과 매우 유사한 움직임을 가진 세포 같은 생물을 제어하는 ​​것이 포함됩니다. 이 게임은 무료이며 아마도 더 중요한 것은 사이트에서 소스 코드를 무료로 제공 하겠다고 밝히고 ActionScript 3에서 만든 플래시 기반 게임 이라는 점을 분명히 밝히는 것 입니다.

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


1

내가하려고하는 방법은 Matt Kemp가 제안한 것과 비슷한 끈 고리를 시뮬레이트하지만 서로를 격퇴하는 입자와 끈으로 내부를 채우는 것입니다. 이 방법으로 대략적인 볼륨 보존을 보장 할 수 있습니다. 큰 힘이 입자를 외부로 두드리지 않도록주의해야합니다.

입자의 시뮬레이션을 위해 "부드러운 입자 유체 역학"을 찾고 입자 (및 스트링)를 시뮬레이션하기위한 "버렛 통합"을 찾으십시오. Verlet은 위치 기반 기술이므로 매우 간단하고 안정적입니다.

일을 효율적으로 유지하기 위해 "균일 그리드 공간 분할"시스템을 제안합니다. 다시, 구현하기 쉽고 빠른 속도 향상.

문자열 대신 메타 볼을 사용하여 객체를 시각화 할 수도 있습니다. 그러나 입자가 별도의 덩어리로 분리 될 수 있다는 문제가 있습니다. 충돌로 이끄는 인력 / 반발 균형을 보려면 "반 데르 발스 힘"을 찾으십시오.

다른 접근법은 스트링 입자에 '외부'법선 방향으로 작은 '팽창'힘을 제공하는 것입니다. 이것은 일종의 내부 압력을 시뮬레이션합니다. 결과적으로 루프는 원 모양을 유지하려고합니다. 내가 사용한 걸 이것을 .

도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.