正如您所看到的,它会绘制背景(BitMapRoad and BitMapGround
),但它不会绘制分配了文件的arry位图(Panzer[x]
)。我该如何解决?这是完整的代码:
unit Unit1;
interface
uses
Winapi.Windows,Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Graphics, Vcl.ExtCtrls, Vcl.StdCtrls;
type
TFormGame = class(TForm)
PanelGameMenu: TPanel;
TimerSpawn: TTimer;
TimerMove: TTimer;
LabelWave: TLabel;
LabelGold: TLabel;
LabelLives: TLabel;
ImageGround: TImage;
procedure FormCreate(Sender: TObject);
procedure OnGameClose(Sender: TObject; var Action: TCloseAction);
procedure TimerSpawnTimer(Sender: TObject);
procedure WaveStart;
procedure TimerMoveTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormGame: TFormGame;
PanzerImage:array[1..4] of TBitmap;
Gun:array[1..2] of TBitmap;
BitMapRoad,BitMapGround,BitmapNaziBase,BitmapSovjetBase,PanzerToRight,PanzerToLeft,PanzerToUp,PanzerToDown:TBitmap;
WaveNumber,TCounter:integer;
EnemyCounter,EC1:integer;
PanzerFaust:array of TBitmap;
implementation
{$R *.dfm}
procedure TFormGame.FormCreate(Sender: TObject); //процедура создания формы и инициализации рисунков
var Counter1,Counter2,YY,yy2,hyy,x,y:integer;
begin
WaveNumber:=0;
YY2:=150; //инициализация
YY:=50;
HYY:=50;
BitMapRoad:=TBitmap.Create;
BitMapRoad.LoadFromFile('Road.bmp');
BitMapGround:=TBitmap.Create;
BitMapGround.LoadFromFile('Ground.bmp');
BitMapNaziBase:=TBitmap.Create;
BitMapNaziBase.LoadFromFile('NaziBase.bmp');
BitMapSovjetBase:=TBitmap.Create;
BitMapSovjetBase.LoadFromFile('SovjetBase.bmp');
PanzerToUp:=TBitmap.Create;
PanzerToUp.LoadFromFile('PanzerToUp.bmp');
for counter1 := 1 to 20 do begin {Начало цикла 1-го порядка} //создание травы
for counter2:= 1 to 20 do begin {Начало цикла 2-го порядка}
ImageGround.Canvas.Draw(Counter1*50-50,Counter2*50-50,BitMapGround);
end; {Конец цикла 2-го порядка}
end; {Конец цикла 1-го порядка}
FormGame.Canvas.Pen.Color:=clBlack;
FormGame.Canvas.Rectangle(50,50,100,100);
for Counter1 := 1 to 5 do begin {Начало цикла 1-го порядка} //создание спуска справа
for Counter2 := 1 to 3 do begin {Начало цикла 2-го порядка}
ImageGround.Canvas.Draw(950,yy,BitMapRoad);
yy:=yy+50;
end; {Конец цикла 2-го порядка}
yy:=yy+50;
end; {Конец цикла 2-го порядка}
for Counter1 := 1 to 5 do begin {Начало цикла 1-го порядка} //создание спуска слева
for Counter2 := 1 to 3 do begin {Начало цикла 2-го порядка}
ImageGround.Canvas.Draw(0,yy2,BitMapRoad);
yy2:=yy2+50;
end; {Конец цикла 2-го порядка}
yy2:=yy2+50;
end; {Конец цикла 2-го порядка}
//создание горизонтальных дорог
for Counter1 := 1 to 10 do begin
for Counter2 := 1 to 20 do ImageGround.Canvas.Draw(Counter2*50-50,HYY,BitMapRoad);
HYY:=HYY+100;
end;
ImageGround.Canvas.Draw(0,050,BitmapNaziBase);
ImageGround.Canvas.Draw(0,950,BitmapSovjetBase);
WaveStart;
end; {конец процедуры} //конец процедуры
procedure TFormGame.OnGameClose(Sender: TObject; var Action: TCloseAction);
begin
BitMapRoad.Free;
BitMapGround.Free;
BitMapSovjetBase.Free;
BitMapNaziBase.Free;
end;
procedure TFormGame.TimerMoveTimer(Sender: TObject);
var counter:integer;
begin
for counter :=1 to EnemyCounter do begin
end;
end;
procedure TFormGame.TimerSpawnTimer(Sender: TObject);
var counter:integer;
begin
TimerMove.Enabled:=true;
if EC1<=EnemyCounter-1 then begin
FormGame.Canvas.Draw(50,50,PanzerFaust[EC1]);
EC1:=EC1+1;
end;
end;
procedure TFormGame.WaveStart;
var counter:integer;
begin
if WaveNumber<11 then begin
SetLength(PanzerFaust,EnemyCounter);
for counter:= 0 to EnemyCounter- 1 do begin
PanzerFaust[Counter]:=TBitmap.Create;
PanzerFaust[Counter].LoadFromFile('PanzerToRight.bmp');
end;
TimerSpawn.Enabled:=True;
EC1:=1;
end
else ShowMessage('Фашистская Германия подписала акт о безоговорочной капитуляции');
end;
end.
结果,我无法在计时器程序中看到它...