帮助循环图片

时间:2010-02-12 08:59:14

标签: delphi arrays image loops

大家好我的碰撞检测代码如下 我需要它在主窗体上循环55张图片 //外星人被命名为alien1,alien2等 // image2是碰撞对象(子弹)

代码是TURBO DELPHI

procedure TForm1.TimeralienshotTimer(Sender: TObject)
var
  ax2 : integer;
  bx2 : integer;
  ay2 : integer;
  by2 : integer;
  alienX : array[1..55] of integer;
  alienY : array[1..55] of integer;
  Index: Integer;
begin
  for index := 1 to 55 do
    alienX[index]:= alien([index]).left <--- the problem is this code here !!!!
  ax2 := alienX + 21;
  bx2 := Image2.left + 10;
  ay2 := AlienY + 25;
  by2 := Image2.top + 24;
  if ax2 >= alienX then
    if alienX <= bx2 then
      if ay2 >= image2.top then
        if alienY <= by2 then
        begin
          alien[index].Visible := false;
          Image2.top := 875;
          Image2.left := 648;
          Timershotmovment.Enabled := false;
        end;
end;

2 个答案:

答案 0 :(得分:1)

for index := 1 to 55 do
  alienX[index]:= alien([index]).left <--- the problem is this code here !!!!

两件事:

  1. “问题在这里是这个代码” - 有什么问题?你没有在主题或问题本身中提及一个。

  2. 你试图在“问题”明显发生的地方进行的类型转换不可行。你不能将整数数组索引类型化为外来类型(在代码中的任何地方都不存在,顺便说一下 - 你已经声明了两个名为alienX和alienY的整数数组,但没有任何声明为外星人)。

  3. 如果你的意图只是将alienY的内容复制到alienX数组中,你可以使用:

    for i := 1 to 55 do
      alienX[i] := alienY[i];
    

    或者,更好的是,如果数组的限制在未来需要改变:

    for i := Low(alienX) to High(alienX) do
      alienX[i] := alienY[i];
    

    但是,由于您尝试访问具有“left”属性的内容,这可能不是您想要的。但是,如果不知道“外星人”到底是什么,以及它包含什么,就很难更具体。

    对未来的建议?当你说你有“问题”时,如果你告诉别人什么是“问题”,那将会很有帮助。

答案 1 :(得分:-1)

我重新格式化了您的源代码。

它看起来像是一个家庭作业,所以我会给出一些提示来解决它:

  • 确保在循环内外获得正确的代码,使用开始...结束块(就像你在最里面做的那样 if ... then < /强>)。
  • 获取所有外星人的X或Y坐标不需要单独的数组。只需使用 Alien [Index] .Left Alien [Index] .Top
  • 不要使用硬编码文字(21,10,25,24,875,648)。制作这些常量,或从正确的位置获取数据(可能表格中有一些内容定义了这些数字)。