• Delphi 与 DirectX 之 DelphiX(8): 第一个简单动画



    本例效果图(用 gif 动画演示, 无论如何也出不来 DirectX 的流畅效果):



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DXDraws, StdCtrls, DXClass;
    
    type
      TForm1 = class(TForm)
        DXDraw1: TDXDraw;
        DXImageList1: TDXImageList;
        DXTimer1: TDXTimer;
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
        procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
      arr: array of record X,Y,a,b: Integer; end;
      PicItem: TPictureCollectionItem;
    
    procedure TForm1.FormCreate(Sender: TObject);
    const
      ImgPath1 = 'C:\Temp\DelphiX.bmp';
    begin
      DXDraw1.Align := alClient;
      DXImageList1.DXDraw := DXDraw1;
    
      DXImageList1.Items.Add;
      PicItem := DXImageList1.Items[DXImageList1.Items.Count-1];
      PicItem.Picture.LoadFromFile(ImgPath1);
    
      SetLength(arr, 1);
      arr[0].X := Random(DXDraw1.Width - PicItem.Width);
      arr[0].Y := Random(DXDraw1.Height - PicItem.Height);
      arr[0].a := 1;
      arr[0].b := 1;
    
      Button1.Caption := '-';
      Button2.Caption := '+';
    
      DXTimer1.Interval := 10;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Length(arr) > 1 then SetLength(arr, Length(arr)-1);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      SetLength(arr, Length(arr)+1);
      arr[High(arr)].X := Random(DXDraw1.Width - PicItem.Width);
      arr[High(arr)].Y := Random(DXDraw1.Height - PicItem.Height);
      arr[High(arr)].a := 1;
      arr[High(arr)].b := 1;
    end;
    
    procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
    var
      i: Integer;
    begin
      DXDraw1.Surface.Fill(0);
      for i := 0 to Length(arr) - 1 do
      begin
        if arr[i].X > DXDraw1.Width - PicItem.Width then arr[i].a := -1;
        if arr[i].Y > DXDraw1.Height - PicItem.Height then arr[i].b := -1;
        if arr[i].X = 0 then arr[i].a := 1;
        if arr[i].Y = 0 then arr[i].b := 1;
        Inc(arr[i].X, arr[i].a);
        Inc(arr[i].Y, arr[i].b);
        PicItem.Draw(DXDraw1.Surface, arr[i].X, arr[i].Y, 0);
      end;
      DXDraw1.Flip;
    end;
    
    end.
    

    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 250
      ClientWidth = 384
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      DesignSize = (
        384
        250)
      PixelsPerInch = 96
      TextHeight = 13
      object DXDraw1: TDXDraw
        Left = 8
        Top = 8
        Width = 265
        Height = 137
        AutoInitialize = True
        AutoSize = True
        Color = clBlack
        Display.FixedBitCount = False
        Display.FixedRatio = True
        Display.FixedSize = True
        Options = [doAllowReboot, doWaitVBlank, doCenter, do3D, doDirectX7Mode, doHardware, doSelectDriver]
        SurfaceHeight = 137
        SurfaceWidth = 265
        TabOrder = 0
        Traces = <>
      end
      object Button1: TButton
        Left = 321
        Top = 217
        Width = 24
        Height = 25
        Anchors = [akRight, akBottom]
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
        ExplicitLeft = 344
        ExplicitTop = 232
      end
      object Button2: TButton
        Left = 351
        Top = 217
        Width = 25
        Height = 25
        Anchors = [akRight, akBottom]
        Caption = 'Button2'
        TabOrder = 2
        OnClick = Button2Click
        ExplicitLeft = 374
        ExplicitTop = 232
      end
      object DXImageList1: TDXImageList
        Items.ColorTable = {
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000
          0000000000000000000000000000000000000000000000000000000000000000}
        Items = <>
        Left = 40
        Top = 152
      end
      object DXTimer1: TDXTimer
        ActiveOnly = True
        Enabled = True
        Interval = 1000
        OnTimer = DXTimer1Timer
        Left = 8
        Top = 152
      end
    end
    
  • 相关阅读:
    SpringCloud------获取配置文件属性值
    SpringCloud------MyBatisPlus代码生成器的使用
    Hanoi问题 算法
    常见的时间复杂度按数量级排列
    Java 匿名类
    java内部类
    Java 接口和抽象类
    使用引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机绑定规则
    Python import搜索的路径顺序
    php 多次导入文件导致 Cannot redeclare class
  • 原文地址:https://www.cnblogs.com/del/p/1374743.html
Copyright © 2020-2023  润新知