您有以下声明:
ImagePaths:array [1..3] of string =(
'SpaceInvader1.jpg',
'SpaceInvader2.jpg',
'SpaceInvader3.jpg'
);
Wave: array[1..11, 1..5] of TImage;
您想知道如何填充图像数组。当 3 个就足够时创建 55 个图像是相当浪费的。所以取而代之的是,使用间接。存储对图像的引用。并且TImage
是一个视觉组件,因此不适合精灵。
我会将图像保存在这样的数组中:
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
数组,例如:
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
当然,您的精灵使用真实姓名而不是数组可能会更好。
其他一些评论:
- JPEG 对于游戏精灵来说是一种糟糕的格式。这是一种有损格式。一个普通的 Windows 位图就可以了,GIF 或 PNG 也可以。
- 我更愿意将图像视为嵌入式资源。然后您的可执行文件可以独立存在。
- 我也宁愿看到你的
Waves
数组保存每个入侵者的状态。然后您将创建一个函数,将该状态呈现到画布上。