VBA: Wie bringe ich 2 Labels dazu, ein Ereignis zu machen wenn sie sich berühren?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ich kenne mich mit Visual-Zeug nicht aus, aber eine klassische Kollisionserkennung sieht etwa so aus:

int x1, y1 // 1. Rechteck, Punkt links oben
int x2, y2 // 1. Rechteck, rechts unten
int x3, y3 // 2. Rechteck, links oben
int x4, y4 // 2. R., rechts unten
boolean checkCollision(x1,y1,x2,y2,x3,y3,x4,y4) {
    if(x2 >= x3 && x4 >= x1 && y2 >= y3 && y4 >= y1) return true;
    return false;
}

Ich weiss nicht wie ein Rechteck in VB definiert wird, vermutlich über den Punkt links oben, Breite und Höhe. Dann kann folgender Pdeudocode die Übergabe der Parameter vereinfachen:

int x1, y1, w1, h1 // 1. Rechteck (x+y=position, w=breite, h=höhe des R.)
int x3, y3, w2, h2 // 2. R.
boolean checkCollisionRect(x1,y1,w1,h1,x3,y3,w2,h2) {
    int x2 = x1+w1, y2 = y1+h1; // R1 rechts unten
    int x4 = x3+w2, y3 = y3+h2; // R2 r. u.
    return checkCollision(x1,y1,x2,y2,x3,y3,x4,y4);
}

Das wäre vermutlich die elegantere und vor allem dynamischere Lösung ;)

0

Versuchst du gerade ein Spiel zu programmieren und brauchst jetzt eine Kollisionsabfrage? ;) Wie breit und hoch sind denn beide Labels jeweils? Oder sind sie gleich groß?

Also Label1 ist 18 breit und 24 hoch. Label2 ist 24 breit und 30 hoch. danke schon mal :)

0
@nickorugi

Naja, die horizontale Kollision ist gegeben wenn:

(label1.left + 18 >= label2.left) AND (label1.left <= label2.left + 24)

Die vertikale Kollision hingegen:

(label1.top + 24 >= label2.top) AND (label1.top <= label2.top + 30)

folglich:

if ((label1.left + 18 >= label2.left) AND (label1.left <= label2.left + 24) ) AND ((label1.top + 24 >= label2.top) AND (label1.top <= label2.top + 30))

0

Deine Abfrage müsste also so aussehen:


IF

((label1.left + 18 >= label2.left) AND (label1.left <= label2.left + 24))

AND

((label1.top + 24 >= label2.top) AND (label1.top <= label2.top + 30))

THEN ....


...verstanden? :)

Was möchtest Du wissen?