我正在做我的A-Level Computing项目,我正在制作我自己版本的经典游戏Space Invaders。
要创建空间入侵者的浪潮,我想使用2D图像数组,其中图像从磁盘加载然后显示在表单上,但我不确定如何将图像加载到数组中然后显示表格上的数组。
目前的数组是:
ImagePaths:array [1..3] of string =('SpaceInvader1.jpg', 'SpaceInvader2.jpg', 'SpaceInvader3.jpg');
Wave:array[1..11, 1..5] of TImage; x,y:integer;
我想知道的是:如何将图像加载到数组元素中?例如,我如何将'SpaceInvader1.jpg'加载到数组元素[1,1]?
非常感谢任何帮助。
答案 0 :(得分:2)
如果您要对图形动画进行编码,您可能不希望直接在表单上进行编码。试图移动东西可能很棘手,特别是如果你想要平滑地制作动画而不是获得大量的闪烁和图形工件。
最好使用渲染库。工作流程如下:
您可以在Pascal Game Development的论坛中找到有关Delphi渲染库的大量信息。
答案 1 :(得分:2)
您有以下声明:
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
当然,使用真实姓名而不是数组,你的精灵可能会更好。
其他一些评论:
Waves
数组保持每个入侵者的状态。然后你将创建一个将该状态呈现在画布上的函数。