shmup 레벨을 저장하는 방법?


12

2D shmup (즉, Aero Fighters )을 개발 중이며 레벨을 저장하는 다양한 방법이 무엇인지 궁금합니다. 적들이 자신의 xml 파일에 정의되어 있다고 가정하면 적이 레벨에서 스폰되는 시점을 어떻게 정의 하시겠습니까?

시간을 기준으로 하시겠습니까? 업데이트? 거리?

현재는 "레벨 시간"을 기준으로이 작업을 수행합니다 (레벨이 실행되는 시간-일시 중지로 시간이 업데이트되지 않음). 다음은 예입니다 (직렬화는 XNA에 의해 수행됨).

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:level="pekalicious.xanor.XanorContentShared.content.level">
  <Asset Type="level:Level">
    <Enemies>
      <Enemy>
        <EnemyType>data/enemies/smallenemy</EnemyType>
        <SpawnTime>PT0S</SpawnTime>
        <NumberOfSpawns>60</NumberOfSpawns>
        <SpawnOffset>PT0.2S</SpawnOffset>
      </Enemy>
      <Enemy>
        <EnemyType>data/enemies/secondenemy</EnemyType>
        <SpawnTime>PT0S</SpawnTime>
        <NumberOfSpawns>10</NumberOfSpawns>
        <SpawnOffset>PT0.5S</SpawnOffset>
      </Enemy>
      <Enemy>
        <EnemyType>data/enemies/secondenemy</EnemyType>
        <SpawnTime>PT20S</SpawnTime>
        <NumberOfSpawns>10</NumberOfSpawns>
        <SpawnOffset>PT0.5S</SpawnOffset>
      </Enemy>
      <Enemy>
        <EnemyType>data/enemies/boss1</EnemyType>
        <SpawnTime>PT30S</SpawnTime>
        <NumberOfSpawns>1</NumberOfSpawns>
        <SpawnOffset>PT0S</SpawnOffset>
      </Enemy>
    </Enemies>
  </Asset>
</XnaContent>

각 적 요소는 기본적으로 특정 적 유형의 물결입니다. 이 유형은 EnemyType으로 정의되며 SpawnTime은이 웨이브가 나타나는 "레벨 시간"입니다. NumberOfSpawns 및 SpawnOffset은 표시되는 적의 수와 각 스폰 사이에 걸리는 시간입니다.

이것은 좋은 생각 일 수도 있고 더 좋은 것이있을 수도 있습니다. 잘 모르겠습니다. 의견과 아이디어를보고 싶습니다.

이 문제에는 적을 올바르게 스폰하고 레벨 에디터를 만드는 두 가지 문제가 있습니다. 레벨 에디터는 완전히 다른 문제입니다 (나중에 게시 할 것입니다 : P).

올바르게 스폰하는 데 문제는 가변 업데이트 시간이 있다는 사실에 있습니다. 따라서 스폰 오프셋이 너무 작거나 업데이트에 약간의 시간이 더 걸리기 때문에 적의 스폰을 놓치지 않아야합니다. . 나는 대부분 그것을 고쳤지만 레벨을 저장하는 방법에 문제가있는 것 같습니다.

그래서 어떤 아이디어? 코멘트?

미리 감사드립니다.

답변:


4

이를 수행하는 한 가지 방법은 스폰을 시간이 아닌 수평 거리를 기준으로 생성하는 것입니다 (측면 스크롤을 가정). 트리거 거리를 가진 적의 파를 대기열에 저장할 수 있습니다. 플레이어의 이동 거리가 큐의 앞쪽에있는 물체의 트리거 거리보다 클 때, 큐에서 튀어 나와 스폰하십시오.

이 솔루션은 시간 기반 솔루션보다 그래픽 레벨 편집기와의 통합에 더 적합합니다. 스크롤 배경을 따라 적을 스폰 할 때의 특정 지점을 훨씬 쉽게 일치시킬 수 있습니다.


4
그리고 스크롤 속도를 전체적으로 또는 레벨의 섹션에서 변경하면 보너스로 나중에 적을 올바른 스폰 위치에 유지합니다. 시간 기반 인 경우 적들이 올바른 지점에 스폰되기 때문입니다.
AttackingHobo

2

나는 PowerManga의 코드를 참조로 연구 할 것을 제안한다. 레벨 시작에서 특정 거리에 위치하고 다른 것들이 무작위로 생성되는 측면 스크롤 (타이어와 유사한) 레벨과 하나의 웨이브 만 파싱되는 "정지"레벨 (a la galaga)의 두 가지 레벨이 있습니다. 이전 패턴이 완료된 후

웨이브 패턴은 연속적인 베 지어 곡선으로 효율적으로 계획 될 수 있습니다 (위키 백과 페이지에는이를 설명하는 깔끔한 애니메이션이 있습니다).

최종 의견을 제시 할 수 있다면 LUA 스크립트와 같은 게임 프로그래밍에서보다 표현력이 높고 유지 관리가 쉽고 유용한 프로그램을 선호하여 XML을 완전히 삭제합니다.

HTH.


벌써 베 지어 곡선을 사용하여 적의 움직임을 저장합니다 (xml로도 직렬화 됨). .NET과 XNA 모두 직렬화 / 역 직렬화를 기본적으로 지원하기 때문에 주로 XML을 사용하고 있습니다. LUA 스크립트는 좋지만 더 많은 작업이 필요합니다. 그러나 나는 항상 그것을 사용하려고 계획했기 때문에 기본 엔진을 완성한 후에는 확실히 살펴볼 것입니다. Finallt, 이전의 파도 후에 산란하는 아이디어는 흥미로운 것 같습니다.
pek

2
XML은 도구에 의해 생성되고 수동으로 편집되지 않는 한 괜찮습니다. 스크립팅 언어는 특수 사례 (예 : 보스)에 유용 할 수 있지만 표준 공격 패턴을 정의하는 것과는 완전히 별개의 문제입니다. 그렇지 않습니까?
bluescrn

0

절차 적으로 적을 생성하는 것을 고려하십시오. 나는 그것이 당신이 원하는 대답과는 상당히 다르다는 것을 알고 있으며, 문제를 완전히 간접적으로 해결합니다.

이 작업을 수행하려면 각 적 유닛에게 얼마나 어려운지 "점"값을 할당 한 다음 레벨에 몇 개의 포인트를 할당합니다. 또는 그 사이의 모든 것.

첫 번째 레벨에서 100 포인트 보스를 얻지 못하거나 최소 수의 적을 갖지 않도록 정기적으로이를 제한해야하며 적의 목록을 정기적으로 폴링하고 당기고 싶을 것입니다 다음 화면에서

위치와 점의 수집 등을 통해 더 한 단계 더 발전 할 수 있습니다. 한 줄 (행 또는 열)에 7 개의 1 포인트 적 또는 2 개의 3 포인트가있는 5 포인트.

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