2013-03-17 4 views
0

현재 저는 고전 게임 Space Invaders를 자신의 버전으로 만들고있는 A-Level Computing 프로젝트를 진행하고 있습니다.이미지를 2D 배열 요소에로드하는 방법은 무엇입니까?

우주 침략자의 물결을 만들려면 이미지가 디스크에서로드 된 다음 양식에 표시되는 2D 이미지 배열을 사용하고 싶지만 이미지를 배열에로드 한 다음 표시하는 방법이 확실하지 않습니다. 서식의 배열

현재의 배열은 다음과 같습니다 : 내가 알고 싶은 무엇

ImagePaths:array [1..3] of string =('SpaceInvader1.jpg', 'SpaceInvader2.jpg', 'SpaceInvader3.jpg'); 

Wave:array[1..11, 1..5] of TImage; x,y:integer; 

이 : 어떻게 배열 요소에 이미지를로드 할 것인가? 예를 들어 배열 요소 [1,1]에 'SpaceInvader1.jpg'을 어떻게로드합니까?

도움을 주시면 감사하겠습니다.

+0

11 시간 5는 3과 ​​같지 않습니다. 무엇이 누락 되었습니까? –

+0

이것은 이미지의 2D 배열을 사용하여 재현하려는 것입니다. http://1.bp.blogspot.com/_2TCYQxSUqGQ/TIetTqkVf5I/AAAAAAAAKYw/buxwoNO2UCU/s1600/space%2520invaders.jpg 특히 우주 침략자의 물결 – user2180030

+0

2D 이미지 배열이 필요한 이유는 무엇입니까? 두 가지 차원은 무엇입니까? –

답변

2

그래픽 애니메이션을 코딩하려는 경우 양식에서 직접 수행하지 않을 수도 있습니다. 주위를 움직이려고하는 것은 까다로울 수 있습니다. 특히 부드럽게 애니메이션을 적용하고 깜박임과 그래픽 인공물을 많이 얻지 않으려는 경우 특히 그렇습니다.

렌더링 라이브러리를 사용하는 것이 좋습니다. 워크 플로는 다음과 같습니다.

  • 양식에 렌더링 컨텍스트를 만듭니다. 이것은 그래픽 애니메이션을 실행할 수있는 서페이스를 제공하는 컨트롤입니다.
  • 세 이미지를 메모리에로드하십시오.
  • 몬스터와 관련된 게임 데이터를 나타내는 개체 배열을 만듭니다. (위치, 이동 방향 및 속도 등) 평면 또는 2D 중 더 나은 것을 선택하여 사용할 수 있습니다.
  • 다음과 같은 렌더 루프를 설정하십시오.
    • 배열의 각 몬스터에 대해 그 위치에 그립니다.
    • 플레이어의 배와 모든 발사체를 그립니다.
    • 충돌을 확인하고 적절하게 처리합니다.
    • 플레이어 입력을 확인하고 적절하게 처리합니다.

당신은 Pascal Game Development에서 포럼에 델파이에 대한 라이브러리를 렌더링에 대한 정보를 찾아 볼 수 있습니다.

2

는 다음과 같은 선언이 있습니다

ImagePaths:array [1..3] of string =(
    'SpaceInvader1.jpg', 
    'SpaceInvader2.jpg', 
    'SpaceInvader3.jpg' 
); 
Wave: array[1..11, 1..5] of TImage; 

당신은 이미지의 배열을 채우는 방법을 알고 싶어요. 3이 충분할 때 55 개의 이미지를 만드는 것은 상당히 낭비입니다. 그래서 대신 간접 지정을 사용하십시오. 이미지에 대한 참조를 저장하십시오. TImage은 시각적 구성 요소이므로 스프라이트에 적합하지 않습니다.예를 들어, 다음과 같이 당신의 Wave 배열을 채울

Sprites: array [1..3] of TBitmap; 

을 그리고

JPEGImage := TJPEGImage.Create; 
try 
    for i := 1 to 3 do 
    begin 
    JPEGImage.LoadFromFile(ImagePaths[i]); 
    Sprites[i] := TBitmap.Create; 
    Sprites[i].Assign(JPEGImage); 
    end; 
finally 
    JPEGImage.Free; 
end; 

를 채 웁니다 :

이 같은 배열에 이미지를 개최 할

Wave: array[1..11, 1..5] of TBitmap; 
.... 
for i := 1 to 11 do 
    for j := 1 to 5 do 
    Wave[i,j] := Sprites[1];// or whichever sprite you want 

물론 스프라이트는 어레이가 아닌 실제 이름으로 더 나을 수 있습니다.


일부 다른 의견 :

  1. JPEG는 게임 스프라이트에 대한 나쁜 형식입니다. 그것은 손실 형식입니다. 일반 Windows 비트 맵은 GIF 또는 PNG처럼 좋을 것입니다.
  2. 나는 이미지를 임베디드 리소스로 보는 편이 낫다. 그런 다음 실행 파일을 단독으로 사용할 수 있습니다.
  3. 나는 또한 각 침입자의 상태를 유지하는 배열 Waves 배열을 보았습니다. 그런 다음 그 상태를 캔버스에 렌더링하는 함수를 만듭니다.
+0

당신의 충고에 귀를 기울이고 나를 붙잡기 위해, 나는 내가 그 일을 분명하게하고 싶지 않다는 것을 알고 있습니다. 나는 대학에 들어가면 내일 이걸 시험해 볼거야. 다른 문제가 발생하면 메시지를 보낼 수 있습니까? – user2180030

+0

설명을 원한다면 의견을 남길 수 있습니다. 그 의견이이 질문에서 너무 멀어지면 다른 질문을하는 것이 좋습니다. 그러나 누락 된 세부 사항을 포함하도록이 질문을 수정하는 데 시간을 투자하겠습니다. 코멘트에 포함 된 코드가 있어야합니다. –

+0

이미지가 가득차면 배열에 배열을 그리는 가장 좋은 방법은 무엇입니까? – user2180030