2D 헬리콥터 게임, 복도 벽을 만드는 방법?


12

고전적인 "헬리콥터"게임 (예 : http://www.addictinggames.com/helicopter.html )을 수정하려고하지만 아직 벽 생성 엔진을 만드는 방법을 찾지 못했습니다.

의사 코드에 대한 포인터가 있습니까? 나는 게임이 진행됨에 따라 난이도가 높아지면서 (더 많은 것이 닫히고, 예기치 않은 곡선이 더 많이 생길 수있는) 측면을 생성하는 방법론 중간에있는 대상에만 관심이 없다.


1
또한 명확히하기 위해, 벽은 실제로 "물 파도"가 될 것이기 때문에 고르지 않은 벽보다 곡선이 필요합니다 ...
davidkomer

1
블록으로 만 수행하고 각 블록 사이를 부드럽게 보간하십시오.
Gustavo Maciel

답변:


17

이를 위해 1D Perlin 노이즈 를 사용할 수 있습니다 . 다음은 2D 노이즈 이미지입니다. 나는 빨간 선이있는 곳에서 샘플을 가져 와서 녹색 선을 얻기 위해 일정한 값을 곱했습니다.

1D 섹션의 2D 노이즈

값을 곱한 상수는 노이즈의 높이를 결정합니다. 따라서 어려움을 쉽게 극복 할 수 있습니다. Perlin 노이즈의 또 다른 이점은 타일 가능한 노이즈를 생성 할 수있어 마치 끝없는 레벨을 만들 수 있다는 것입니다.

바닥과 천장을 만들려면 통과 할 수없는 영역을 생성하지 않는 것이 중요합니다. 가장 쉬운 방법은 단순히 노이즈의 "위쪽"부분 (예 1.0 - noiseValue:)을 천장으로 사용하고 아래쪽 부분 ( noiseValue)을 바닥에 사용하는 것입니다 (물론 사이에 약간의 오프셋이 있음). 그것이 너무 둔하게 보일 경우, 예를 들어 두 개의 가까운 샘플을 고려할 수도 있습니다. 하나 또는 두 개의 픽셀 위 또는 아래에 다른 빨간색 샘플 라인을 상상해보십시오. 이것은 비슷하지만 동일하지 않은 파동을 줄 것입니다.


와, 이건 정말 도움이되었습니다! 감사합니다 :) 저는 Flash / Actionscript에서 개발 중입니다. 내장 perlinNoise 기능이 있습니다.이 기능을 사용하여 어떻게 작동하는지 확인할 수 있습니다. :)
davidkomer

@ davidkomer 이것이 유용하다는 것이 기쁩니다. 플래시에서는 BitmapData객체 를 만들고 그 perlinNoise기능을 사용해야 합니다. 비트 맵은 800x3 픽셀이거나 극단적 인 것일 수 있습니다. 그러면 상단 및 하단 라인 값을 간단히 추출 할 수 있습니다 ( 범위 (bitmap.getPixel(x,y) & 0xff) / 255.0내의 값을 제공해야하는 것과 같은 것)0..1
bummzack

흠-작동했지만 상수 / 승수는 값을 통과 할 수없는 영역으로 밀어 넣습니다 ... 여기 내 코드, 아이디어가 있습니까? (vect는 펄린 노이즈 라인에서 샘플링 된 32 비트 값의 벡터입니다. 따라서 y_val은 스케일러로 곱한 파란색 채널 일뿐입니다) for (idx = 0; idx <vect.length; idx ++) {y_val = (vect [idx] & 0xFF) * 스케일러; drawData.fillRect (새 사각형 (idx, drawData.height-y_val, 1, y_val), 0x0000ff); drawData.fillRect (새 사각형 (idx, 0, 1, y_val), 0x0000ff); }
davidkomer

나는 지금 - 출마 해하지만 뭔가 난 그냥 더 신중하게 의견을 읽을 필요 하더군요) 내가 어디에 있어요 이것은 너무 멀리있는 pastebin.com/1tmMtEAh
davidkomer

무엇입니까 scaler? 얻을 수있는 값은 0..255코드 범위 내에 있습니다.
bummzack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.