⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dynamiclight.dpr

📁 此為國外大名鼎鼎的2D遊戲引擎HGE的Delphi版本 原官方是C++的,現在完全改為Delphi可使用,另外再增加許多單元與功能 新增的單元有HGEImages,HGECanvas,HGEDef
💻 DPR
字号:
program DynamicLight;

{$R *.res}

uses
  Windows, SysUtils, HGEImages, HGECanvas, HGE, HGESprite, HGEFont;

type
  TLight = record
    X, Y: Single;
    DX, DY: Single;
  end;

var
  HGE: IHGE = nil;
  Font: TSysFont;
  Images: THGEimages;
  Canvas: THGECanvas;
  LightSurface: ITarget;
  Light:array[0..4] of  TLight;
  Bright: Byte =90;

function FrameFunc: Boolean;
var
  DT: Single;
  I: INteger;
begin
  DT := HGE.Timer_GetDelta;
  for I := 0 to 4 do
  begin
    with Light[I] do
    begin
      X := X + DX * DT;
      if (X > 800) or (X < 0) then
        DX := -DX;
        Y := Y + DY * DT;
      if (Y > 600) or (Y < 0) then
        DY := -DY;
     end;
  end;
  // Process keys
  case HGE.Input_GetKey of
    HGEK_UP:
    begin
      Inc(Bright);
    end;
    HGEK_DOWN:
    begin
      Dec(Bright);
    end;
    HGEK_ESCAPE:
    begin
      FreeAndNil(Canvas);
      FreeAndNil(Images);
      FreeAndNil(Font);
      Result := True;
      Exit;
    end;
  end;
  Result := False;
end;

function RenderFunc: Boolean;
var
  I: Integer;
begin
  //draw light surface
  HGE.Gfx_BeginScene(LightSurface);
  HGE.Rectangle(0,0,1024,1024,ARGB(255,Bright, Bright, Bright), True);
  Canvas.DrawEx(Images.Image['Light'], 0, 410, 280, 128, 128, 1, 0.7,
                 False ,False, $FFFFFFFF, Blend_SrcColorAdd);
  for I := 0 to 4 do
    with Light[I] do
    begin
      Canvas.DrawEx(Images.Image['Light'], 0, X, Y, 128, 128, 1, 0.7,
                    False ,False, $FFFFFFFF, Blend_SrcColorAdd);
    end;
  HGE.Gfx_EndScene;
  //

  HGE.Gfx_BeginScene;
  Canvas.Draw(Images.Image['Background'],0,0,0,Blend_default);
  Canvas.DrawPart(LightSurface.GetTexture,0,0,0,0,1024,1024,$FFFFFFFF, blend_Multiply);
    for I := 0 to 4 do
    with Light[I] do
    begin
      Canvas.Draw(Images.Image['Sprite'],0, X-15, Y-40, Blend_Default);
    end;

  Font.Print(50,50,'Bright= '+IntToStr(Bright));
  Font.Print(300,530,'Press Up: Bright+');
  Font.Print(300,560,'Press Down: Bright-');
  HGE.Gfx_EndScene;
  Result := False;
end;

procedure Main;
var
  I: Integer;
begin
  HGE := HGECreate(HGE_VERSION);
  HGE.System_SetState(HGE_FRAMEFUNC,FrameFunc);
  HGE.System_SetState(HGE_RENDERFUNC,RenderFunc);
  HGE.System_SetState(HGE_USESOUND, False);
  HGE.System_SetState(HGE_WINDOWED,false);
  HGE.System_SetState(HGE_SCREENWIDTH, 800);
  HGE.System_SetState(HGE_SCREENHEIGHT,600);
  HGE.System_SetState(HGE_SCREENBPP,16);
  HGE.System_SetState(HGE_TEXTUREFILTER, False);
  Canvas := THGeCanvas.Create;
  Images:=THGEImages.Create;

  if (HGE.System_Initiate) then
  begin
    Font := TSysFont.Create;
    Font.CreateFont('Arial',15,[]);
    Images.LoadFromFile('Background.jpg');
    Images.LoadFromFile('Sprite.png');
    Images.LoadFromFile('Light.png');
    LightSurface := HGE.Target_Create(1024,1024, False);
    for I := 0 to 4 do
      with Light[I] do
      begin
        X := HGE.Random_Float(0, 800);
        Y := HGE.Random_Float(0, 600);
        DX := HGE.Random_Float(-100,100);
        DY := HGE.Random_Float(-100,100);
      end;

    HGE.System_Start;
  end
  else
    MessageBox(0,PChar(HGE.System_GetErrorMessage),'Error',MB_OK or MB_ICONERROR or MB_SYSTEMMODAL);

  HGE.System_Shutdown;
  HGE := nil;
end;

begin
  ReportMemoryLeaksOnShutdown := True;
  Main;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -