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

📄 mouseevent.dpr

📁 完整的Delphi游戏开发控件
💻 DPR
字号:
program MouseEvent;

{$R *.res}

uses
  Windows, SysUtils, HGEImages, HGECanvas, HGEDef, HGE, Classes, HGESpriteEngine;

type
  TMoveDirection=(mdLeft,mdRight);

  TSheep=class(TAnimatedSprite)
  private
     FMoveSpeed: Single;
     FMoveDirection: TMoveDirection;
  public
     procedure DoMove(const MoveCount: Single); override;
     procedure OnLMouseDown; override;
     procedure OnMouseDbClick; override;
     procedure OnMouseLeave; override;
     procedure OnMouseEnter; override;
     procedure OnMouseDrag; override;
     procedure OnRMouseDown; override;
     procedure OnMouseWheelDown; override;
     procedure OnAnimEnd; override;
     property MoveSpeed: Single read  FMoveSpeed write  FMoveSpeed;
     property MoveDirection: TMoveDirection read FMoveDirection write FMoveDirection;
  end;

var
  HGE: IHGE = nil;
  Images: THGEimages;
  Canvas: THGECanvas;
  Font: TSysFont;
  SpriteEngine: TSpriteEngine;
  OffsetW,OffsetH: Integer;
  Mx,My: Single;

procedure TSheep.OnMouseEnter;
begin
     SetColor(255,150,255);
end;

procedure TSheep.OnMouseLeave;
begin
     Setcolor(255,255,255);
end;

procedure TSheep.OnLMouseDown;
begin
    OffsetW:= Round(X-Mx);
    OffsetH:= Round(Y-My);
    X:= Mx + OffsetW;
    Y:= My + OffsetH;
    SetAnim('Scare', 0, 6, 0.1, True);
    FMoveSpeed:= 0.5;
end;

procedure TSheep.OnMouseDbClick;
begin
     SetAnim('Run', 0, 2, 0.1, True);
     FmoveSpeed:=1;
end;

procedure TSheep.OnMouseDrag;
begin
     X:= Mx+OffsetW;
     Y:= My+OffsetH;
     SetAnim('Scare', 0, 6, 0.1, True);
end;

procedure TSheep.OnRMouseDown;
begin
     SetAnim('HandStand', 0, 2, 0.1, True);
     FMoveSpeed:=0.5;
end;

procedure TSheep.OnMouseWheelDown;
begin
     SetAnim('Rolling', 0, 8, 0.15, True);
     FMoveSpeed:=1;
end;

procedure TSheep.DoMove(const movecount: Single);

begin
     DoMouseEvent;

     ActiveRect:=Rect(Round(X), Round(Y), Round(X+40), Round(Y+40));
     case FMoveDirection of
         mdLeft:
         begin
              X:=X-MoveSpeed;
              MirrorX:= True;
         end;
         mdRight:
         begin
              X:=X+ MoveSpeed;
              MirrorX:= False;
         end;
     end;

     if (X>750) then FMovedirection:= mdLeft;
     if (X<10)  then FMovedirection:= mdRight;
     inherited;
end;

procedure TSheep.OnAnimEnd;
begin
     if ImageName= 'Scare' then
        SetAnim('Walk', 0, 2, 0.1, True);
end;

function FrameFunc: Boolean;
begin
  GetMouseEvent;
  HGE.Input_GetMousePos(Mx,My);
  case HGE.Input_GetKey of
    HGEK_ESCAPE:
    begin
      FreeAndNil(Canvas);
      FreeAndNil(Images);
      FreeAndNil(SpriteEngine);
      FreeAndNil(Font);
      Result := True;
      Exit;
    end;
  end;
  Result := False;
end;

function RenderFunc: Boolean;
begin
  HGE.Gfx_BeginScene;
  HGE.Gfx_Clear(0);
  Canvas.Draw(Images.Image['Background'],0,0,0,Blend_default);
  SpriteEngine.Draw;
  SpriteEngine.Move(1);
  SpriteEngine.Dead;
  //Font.Print(100,100,IntToStr(HGE.Timer_GetFPS));
  Font.Print(300,490,'Left Mouse: Scare');
  Font.Print(300,510,'Right Mouse: Hand Stand');
  Font.Print(300,530,'Mouse Double Click: Run');
  Font.Print(300,550,'Mouse Wheel: Rolling');
  Font.Print(300,570,'Mouse Drag: Move');
  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,32);
  HGE.System_SetState(HGE_TEXTUREFILTER, False);
  HGE.System_SetState(HGE_FPS,HGEFPS_VSYNC);
  HGE.System_SetState(HGE_HIDEMOUSE, False);
  Canvas := THGeCanvas.Create;
  Images := THGEImages.Create;
  SpriteEngine := TSpriteEngine.Create(nil);
  Spriteengine.Images := Images;
  SpriteEngine.Canvas := Canvas;

  if (HGE.System_Initiate) then
  begin
    Font:=TSysFont.Create;
    Font.CreateFont('arial',12,[]);
    Images.LoadFromFile('Background.jpg');
    Images.LoadFromFile('Walk.png',40,40);
    Images.LoadFromFile('Run.png',40,40);
    Images.LoadFromFile('HandStand.png',40,40);
    Images.LoadFromFile('Scare.png',40,40);
    Images.LoadFromFile('Rolling.png',40,40);
    Randomize;
    for I := 0 to 20 do
     begin
          with TSheep.Create(SpriteEngine) do
          begin
               SetAnim('Walk',0,2,0.1,True);
               DoAnimate := True;
               Width := 40;
               Height:=40;
               X := Random(750);
               Y := Random(550);
               FMoveSpeed := 0.5;
               FMoveDirection := TMoveDirection(Random(2));
               Tag := I;
          end;
     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 + -