如何将图像加载到2D数组元素中



我目前正在做我的A-Level计算项目,为此我正在制作我自己版本的经典游戏《太空入侵者》。

创建空间入侵者的波,我想使用图像的二维数组,其中的图像是从磁盘加载,然后在表单上显示,但我不确定如何加载图像到数组,然后在表单上显示数组。

当前数组为:

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]?

如果您要编写图形动画,您可能不希望直接在表单上进行。尝试移动物体可能会很棘手,特别是如果你想让动画流畅,而不是得到很多闪烁和图形伪影。

最好使用渲染库。工作流程是这样的:

  • 在表单上创建呈现上下文。这是一个控件,它提供了图形动画运行的表面。
  • 将你的三张图片加载到内存中
  • 创建一个对象数组来表示与怪物相关的游戏数据。(位置,移动方向和速度等)可以是平面的,也可以是2D的,以你的喜好为准。
  • 设置一个像这样的渲染循环:
    • 对于数组中的每个怪物,在其位置绘制。
    • 绘制玩家的飞船和所有的投射物。
  • 检查碰撞并适当处理。
  • 检查玩家输入并适当处理。

你可以在Pascal Game Development的论坛中找到大量关于Delphi渲染库的信息。

您有以下声明:

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

您想知道如何填充图像数组。创建55个图像是相当浪费的,而3个就足够了。所以不要那样,用间接的方式。存储对图像的引用。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

当然你的精灵使用一个真实的名字可能比使用一个数组要好。


其他注释:

  1. JPEG是一种糟糕的游戏精灵格式。这是一种有损格式。一个普通的Windows位图就可以了,GIF或PNG也可以。
  2. 我更愿意看到图像嵌入资源。然后你的可执行文件可以独立运行。
  3. 我也宁愿看到你的Waves数组持有每个入侵者的状态。然后你会创建一个函数,将状态渲染到画布上。

相关内容

  • 没有找到相关文章

最新更新