Autor Beitrag
ploRa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59

Win XP
Delphi 6
BeitragVerfasst: Mo 31.01.05 18:32 
Es mag sein, dass es schon genügend Threads von diesen Thema gibt aber ich kann mit keinem so wirklich was anfangen.

Also es geht um folgendes.

Es fallen von oben mehrere Labels herunter und unten muss ich die mit einem Image einfangen.
Also muss ich eine abfrage erstellen wann die Labels das Image erreichen aber ich weiß nciht wie ?

Kann mir da jmd. helfen ?

Thx
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: Mo 31.01.05 18:36 
was nutzt du denn für eine grafikoberföläche? DX, DelphiX, OPGL....?

mfg matze

_________________
si tacuisses, philosophus mansisses.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 31.01.05 18:46 
Mit folgender Abfrage prüfst du, ob das Label1 mit Image1 kollidiert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if  ((label1.top + label1.height >= image1.top) and 
     (label1.top <= image1.top+image1.height))
    and ((label1.left+label1.width>=image1.left) and
         (label1.left <= image1.left+image1.width))
    then
      Collision;


P.S.: Schlagt mich nicht wegen der Formatierung. Ich hab immer keinen Plan, wie man solch eine Abfrage gut strukturiert darstellt.
Marc Walter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40

Win98, WinXP
D2 Pers, D7 Pers
BeitragVerfasst: Mo 31.01.05 19:29 
du kannst auch einfach intersectrect benutzen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
...
var schnittmenge, label, image: TRect;
begin
  label := Rect(Label1.left,Label1.Top,
                Label1.left+Label1.Width,Label1.Top+Label1.Height);
  image := Rect(Image1.Left, Image1.Top,
                Image1.Left+Image1.Width,Image1.Top+Image1.Height);
  if intersectrect(Schnittmenge, label, image) then kollision;
end;
...


sieht auf den ersten Blick fast komplizierter aus, ist aber um einiges geschickter, da du, da du ja viele labels hast per intersectrect ne for-schleife draus machen kannst (wenn du dazu z.b noch arrays nimmst).

Dieses Thema gab es übrigens schon öfters. kannst ja mal Delphi-Suche nehmen :lol:
Marc Walter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40

Win98, WinXP
D2 Pers, D7 Pers
BeitragVerfasst: Mo 31.01.05 19:31 
mir fällt grad auf, dass man label ja gar nicht als Variablennamen nehmen darf :oops:
nimm halt einfach n anderen namen
ploRa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 59

Win XP
Delphi 6
BeitragVerfasst: Di 01.02.05 14:27 
Ich wollt nur sagen das dieser thread geschlossen werden kann !
Und mich bedanken da es mir sehr weiter geholfen hat
matze.de
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 576

Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
BeitragVerfasst: Di 01.02.05 15:42 
guck mal oben bei dem thread gibt es ein häkchen-button klick da einmal drauf und dann weiß jeder,dass die frage beantwortet ist :)

mfg matze

_________________
si tacuisses, philosophus mansisses.
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Di 01.02.05 15:57 
Marc Walter hat folgendes geschrieben:
du kannst auch einfach intersectrect benutzen

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
...
var schnittmenge, label, image: TRect;
begin
  label := Rect(Label1.left,Label1.Top,
                Label1.left+Label1.Width,Label1.Top+Label1.Height);
  image := Rect(Image1.Left, Image1.Top,
                Image1.Left+Image1.Width,Image1.Top+Image1.Height);
  if intersectrect(Schnittmenge, label, image) then kollision;
end;
...


sieht auf den ersten Blick fast komplizierter aus, ist aber um einiges geschickter, da du, da du ja viele labels hast per intersectrect ne for-schleife draus machen kannst (wenn du dazu z.b noch arrays nimmst).

Dieses Thema gab es übrigens schon öfters. kannst ja mal Delphi-Suche nehmen :lol:



sieht praktisch aus. Aber wie definiert sich Schnittmenge?
Marc Walter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40

Win98, WinXP
D2 Pers, D7 Pers
BeitragVerfasst: Mi 02.02.05 15:06 
schnittmenge is einfach n Rechteck, das den bereich, in dem sich die 2 Rechtecke schneiden, enthält.

ausgeschrieben wär das dann so : if intersectrect(...) = true then ...
aber das = true kann man weglassen.

falls du genauer was drüber wissen willst, kann ich dir leider nicht helfen.

_________________
möp
Karlson
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 2088



BeitragVerfasst: Mi 02.02.05 15:24 
Zitat:

schnittmenge is einfach n Rechteck, das den bereich, in dem sich die 2 Rechtecke schneiden, enthält.


Jo habs mir jetzt man angeschaut.
ich zuerst dass man dort festlegen, wie gross der Schnittbereich sein soll, damit die vierecke als Intersected gelten.
aber da ein unintialisiertes TRect ja schonmal einen Bottom von ~400000 hat, kann das nicht stimmen.
ist also ein reiner out-parameter

Marc Walter hat folgendes geschrieben:

ausgeschrieben wär das dann so : if intersectrect(...) = true then ...

Danke, aber das weiss ich auch ;)

Zitat:

falls du genauer was drüber wissen willst, kann ich dir leider nicht helfen.


ne, ist ja jetzt eigentlich alles klar.

danke!