2011-07-30 2 views
1

저는 게임 레벨을 swf 파일에 포함하려는 작은 일반 텍스트 파일에 저장하는 플래시 게임을 작성하고 있습니다. 현재 솔루션에는 반복적 인 코드 냄새가 있으며 더 나은 방법이 있다고 확신합니다. 내 코드는 기본적으로 :ActionScript 3에서 런타임 검색을 위해 외부 데이터 파일을 어떻게 포함해야합니까? 아키텍처 도움이 필요합니다

LevelLoader 클래스에서

수준이로드 될 필요가
[Embed(source="levels/1.dat", mimeType="application/octet-stream")] 
protected var level1:Class; 
[Embed(source="levels/2.dat", mimeType="application/octet-stream")] 
protected var level2:Class; 

, 문자열을 읽어들이는 모든 레벨을 포함 :

var bytes:ByteArray; 
if (levelNumber == 1) { 
    bytes = new level1(); 
} else if (levelNumber == 2) { 
    bytes = new level2(); 
} 
var levelStr:String = bytes.readMultiByte(bytes.bytesAvailable, bytes.endian); 
prepareLevel(levelStr); 

몇 가지 문제가 있습니다 이 접근법은 다음과 같습니다.

  • 각 레벨을 삽입 할 라인을 추가해야합니다. 폴더의 모든 파일이 자동으로 포함되도록하는 것이 가장 좋습니다.
  • 레벨을 문자열에서 "준비"할 수 없습니다. LevelLoader에 레벨 번호 나 레벨 이름을 문자열로 전달할 수 있기를 바랍니다.
  • 모든 문자열이 디스크가 아닌 메모리에 저장되어 있다고 생각합니다.

"올바르게"프로그래밍 할 수 있습니까? ActionScript 3는이 문제를 해결할 수 있습니까?

답변

0

필요에 따라 파일을로드하기로 결정하지 않는 한 개별적으로 각 파일을 포함해야합니다. 코드에서 참조되지 않는 특정 비 스크립트 파일을 포함하도록 컴파일러에 알릴 수있는 경우에도 이러한 파일을 변수에 링크해야합니다.

그러나 레벨 파일에 대한 액세스를 동적으로 설정할 수 있습니다.

function startLevel(levelId : uint) : void { 
    var bytes : ByteArray = new (this["level" + levelId])(); 
    ... 
    prepareLevel(levelStr); 
} 

물론 모든 레벨은 메모리에 저장됩니다. 이를 피하기 위해 URLLoader를 사용하여 레벨 데이터를로드 할 수 있습니다.

+0

수준의 ZIP을 사용하여 약간의 도박을 할 수도 있습니다. http://stackoverflow.com/questions/1053546/howto-embed-images-in-actionscript-3-flex-3-the-right-way/ 1055867 # 1055867 –

+0

감사합니다. 이로써 문제의 절반이 해결됩니다. 해시 또는 다른 키 - 값 저장소에 임베드하는 방법이 있나요? 그래서 각 수준마다 변수가 필요하지 않습니까? – Andy

+0

분명히 없습니다. 다음은 ZIP을 사용하는 것과는 다른 방법입니다. http://stackoverflow.com/questions/3908929/how-to-embed-a-lot-of-images-using-actionscript-3 –