AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Image darf nicht durch Image bewegt werden!
Thema durchsuchen
Ansicht
Themen-Optionen

Image darf nicht durch Image bewegt werden!

Ein Thema von progremizer · begonnen am 25. Feb 2008 · letzter Beitrag vom 2. Mär 2008
Antwort Antwort
Green

Registriert seit: 11. Jun 2006
156 Beiträge
 
#1

Re: Image darf nicht durch Image bewegt werden!

  Alt 27. Feb 2008, 21:54
So ein Zufall das ich gerade einen Kollisionsmanager schreibe:


Als CollisionManager.pas speichern:
Delphi-Quellcode:
unit CollisionManager;

interface

type
  TCollisionManager = class(TObject)
    private
      cmA: TQuad;
      cmB: TQuad;
      function getA: TQuad;
      function getB: TQuad;
      procedure setA(pA: TQuad);
      procedure setB(pB: TQuad);
    public
      property PointA: TQuad read getA write setA;
      property PointB: TQuad read getB write setB;
      function Collision: boolean;
      function Over2Points(x1, y1, x2, y2, x: double): double;
  end;

implementation

  function TCollisionManager.getA;
  begin
    Result := cmA;
  end;

  function TCollisionManager.getB;
  begin
    Result := cmB;
  end;
  
  procedure TCollisionManager.setA(pA: TQuad);
  begin
    cmA := pA;
  end;

  procedure TCollisionManager.setB(pB: TQuad);
  begin
    cmB := pB;
  end;

  function TCollisionManager.Collision: boolean;
  begin
    Result := false;
    if (cmA.LU.x <= cmB.LU.x + cmB.width) and (cmA.LU.x + cmA.width >= cmB.LU.x) then //X-Achsen Kollision
      if (cmA.LU.y <= cmB.LU.y + cmB.height) and (cmA.LU.y + cmA.height >= cmB.LU.y) then //Y-Achsen Kollision
        Result := true //X+Y Achesn Kollision = Kollision
  end;

  function TCollisionManager.Over2Points(x1, y1, x2, y2, x: double): double;
  begin
    Result := ((y1-y2)*x + x1*y2 - x2*y1) / (x1 - x2);
  end;

end.
Noch eine Zweite Datei "MyTypes.pas" im gleichen Verzeichnis anlegen:
Delphi-Quellcode:
unit MyTypes;

interface

uses Windows, Graphics;

type
  T2DimPoint = packed record
    x: double;
    y: double;
  end;
  TQuad = packed record
    LU: T2DimPoint;
    Width: double;
    Height: double;
  end;
implementation

end.
Und jetzt die neue Form die du machst:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, CollisionManager, MyTypes;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  CollisionManager: TCollisionManager;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
  tempQuad: TQuad;
begin
    TempQuad.Lu.x := Image1.Top; //XWert links Unten
    TempQuad.Lu.y := Image1.Left; //YWert Links Unten
    TempQuad.width := Image1.Width;
    TempQuad.height:= Image1.Height;

    CollisionManager.PointA := TempQuad;

    TempQuad.Lu.x := Image2.Top; //XWert links Unten
    TempQuad.Lu.y := Image2.Left; //YWert Links Unten
    TempQuad.width := Image2.Width;
    TempQuad.height:= Image2.Height;
    
    CollisionManager.PointB := TempQuad;

    if CollisionManager.Collision then showmessage('Kollision!');
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  CollisionManager := TCollisionManager.Create;
end;

end.
In Uses werden MyTypes und CollisionManager includet, dann im Formcreate wird eine neue CollisionManager iNstanz erzeugt.
Dann setzt du die Punkte mit einem Temporären Quad in den Manager ein und fragst ihn obs ne Kollision ist.
Fertig!

lG Green
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz