Entwickler-Ecke
Multimedia / Grafik - Kollision von 2 Images
ploRa - Mo 31.01.05 18:32
Titel: Kollision von 2 Images
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 - Mo 31.01.05 18:36
was nutzt du denn für eine grafikoberföläche? DX, DelphiX, OPGL....?
mfg matze
Delete - 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 - 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 :lol:
Marc Walter - 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 - 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 - 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
Karlson - 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 :lol: |
sieht praktisch aus. Aber wie definiert sich Schnittmenge?
Marc Walter - 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.
Karlson - 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!