Autor |
Beitrag |
ploRa
      
Beiträge: 59
Win XP
Delphi 6
|
Verfasst: 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
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: 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
|
Verfasst: Mo 31.01.05 18:46
Mit folgender Abfrage prüfst du, ob das Label1 mit Image1 kollidiert:
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
      
Beiträge: 40
Win98, WinXP
D2 Pers, D7 Pers
|
Verfasst: Mo 31.01.05 19:29
du kannst auch einfach intersectrect benutzen
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 
|
|
Marc Walter
      
Beiträge: 40
Win98, WinXP
D2 Pers, D7 Pers
|
Verfasst: Mo 31.01.05 19:31
mir fällt grad auf, dass man label ja gar nicht als Variablennamen nehmen darf
nimm halt einfach n anderen namen
|
|
ploRa 
      
Beiträge: 59
Win XP
Delphi 6
|
Verfasst: 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
      
Beiträge: 576
Win95, Win98 SE, WinXp Prof SP2
D7P, D8P, FPC2.0
|
Verfasst: 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
      
Beiträge: 2088
|
Verfasst: Di 01.02.05 15:57
Marc Walter hat folgendes geschrieben: | du kannst auch einfach intersectrect benutzen
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  |
sieht praktisch aus. Aber wie definiert sich Schnittmenge?
|
|
Marc Walter
      
Beiträge: 40
Win98, WinXP
D2 Pers, D7 Pers
|
Verfasst: 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
      
Beiträge: 2088
|
Verfasst: 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!
|
|
|