Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - prüfen ob Image über ein anderes Image ist?


Florens - Fr 19.11.10 22:28
Titel: prüfen ob Image über ein anderes Image ist?
Hallihallo liebe Community,

Ich versuch gerade ohne 4 If Then Abfragen zu machen zu prüfen, ob ein Image(welches beweglich ist) über einem anderen liegt. Gibt es dafür eine Function oder ähnliches? (Ich will nicht prüfen, ob die genau auf dem selben Punkt liegen sondern ob x und y vom Image1 im Rechteck des Image2 liegen).

Danke für jede Antwort

MfG Flo


Dude566 - Fr 19.11.10 22:32

Musst du das zweite Image mit FindComponent suchen oder was willst du wissen?


Florens - Fr 19.11.10 22:36

Ich will ein Spiel machen das quasi wie Snake funktioniert so und jetzt findet die Schlange (Image1) Den Apfel(Image2). Ich hoffe jetzt ist klar was ich meine. Deswegen ist meine Googlesuche auch gescheitert.


Dude566 - Fr 19.11.10 22:40

Ja du musst halt prüfen ob die Koordinaten deines ersten Images sich mit denen des zweiten Images überschneiden.

Du kannst das ganze aber auch mit einer Paintbox machen und deine Figuren selbst zeichnen, ob das besser ist kann ich aber auch nicht sagen. ;)


Florens - Fr 19.11.10 22:43

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ja du musst halt prüfen ob die Koordinaten deines ersten Images sich mit denen des zweiten Images überschneiden.


Ja wie denn. Da muss es doch eine andere Möglichkeit geben als 4 If then-Anweisungen zu machen von wegen if w>top-30 then...if w<top+30 etc.


Dude566 - Fr 19.11.10 22:48

Es gibt halt keine Funktion namens IfImage1AufImage2. ^^

Es wird ja wohl kein großer Aufwand sein die Abfragen zu implementieren, wenn doch dann stell bitte konkrete Fragen.


Hidden - Fr 19.11.10 22:53

Moin!

Ich hoffe, es bringt uns nicht zu weit vom Thema ab wenn ich erwähne, dass visuelle Komponenten eigentlich nicht so benutzt werden sollten ;)

Für spätere Programme nimmst du vielleicht eine einzelne Komponente(Image/Paintbox), und zeichnest alle Bilder mit .Canvas.Draw/.Canvas.StretchDraw auf diese eine.

Grüße,


Dude566 - Fr 19.11.10 22:59

@user profile iconHidden, genau meine Rede.


bummi - Sa 20.11.10 01:20

man soll zwar Daten von der Oberfläche trennen, aber zur veranschaulichung von Funktionen, malen kann man später noch aus Klassen auf TGraphicControls

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
var
  InterRect:Trect;
begin
  if intersectrect(InterRect,Shape1.BoundsRect,Shape2.BoundsRect) then
    begin
      Showmessage(Format('Left: %d'#13#10'Top: %d'#13#10'Righ: %d'#13#10'Bottom: %d',
                   [Interrect.Left, Interrect.Top, Interrect.Right, Interrect.Bottom]  ) );
      With Tshape.Create(self) do
        begin
          Parent := self;
          left := Interrect.Left;
          top  := Interrect.Top;
          width := Interrect.Right - Interrect.Left;
          height := Interrect.Bottom - Interrect.Top;
          Brush.Style:= bsCross;
          Brush.Color := clYellow
        end;
    end;

end;


Lannes - Sa 20.11.10 01:27

Hallo,

user profile iconFlorens hat folgendes geschrieben:
Ich will nicht prüfen, ob die genau auf dem selben Punkt liegen sondern ob x und y vom Image1 im Rechteck des Image2 liegen

dafür reicht PtInRect(...)


bummi - Sa 20.11.10 01:31

mag sein daß ich es falsch verstanden habe, kann auch sein daß er es falsch formuliert hat, mit Deinem und meine Hinweis hat er in jedem Fall allen Optionen offen.


Lannes - Sa 20.11.10 01:41

du hast nicht falsch verstanden, eher weiter gedacht ...
er wird deinen Vorschlag vermutlich benötigen wenn sein Image mal aus einer anderen Richtung geschoben wird, dann nützt ihm x und y nicht mehr viel :wink: