Image.Canvas在我的辅助程序deplhi XE2中进行绘制

时间:2017-03-17 04:16:27

标签: delphi canvas

正如您所看到的,它会绘制背景(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.

结果,我无法在计时器程序中看到它...

0 个答案:

没有答案