FipsTheThief
Erfahrenes Mitglied
Guten Tag,
ich suche hier seit 2 Tagen eine Lösung für ein Drag Drop Problem im Raster.
Um dies ein wenig zu verdeutlichen nehm ich die Beispiel Matrix, die so ziemlich genau aussieht wie das was ich habe.
4 Spalten , 3 Reihen
Alles was als X gekennzeichnet ist ist quasi belegt, das geht von [weite, höhe] => [1 , 1] feldern bis zu [n, m]
Angenommen ich nehme den Container auf dem feld [a1] und bewege ihn auf [b1] , nun muss b1 platz machen , entweder links ( was nun frei geworden ist) , rechts wäre Alternative 2, oben -> Alternative 3 und unten alternative 4. Würde prima gehen da beide gleich groß sind und [b2] gleich in [a1] reinpasst.
Fall 2:
ich neme den Container [b3, c3] und verschiebe ihn so das er in das Feld [d2] reinragt. Es wird bereits erkannt aha da liegt was. Nun suchen wir wieder die Felder ausgehend von [d1] geht es nach links ? Ja geht es wäre möglich aber nun schneidet er sich mit dem Container den ich da hinlegen möchte, also kann er dort nicht liegen.
Die Suche geht weiter nach rechts -> nicht möglich außerhalb des grids, nach oben das gleiche also nach unten wieder ein Schnitt.
Somit müsste nun in einen Radius welcher sich ständig erweitert um das obere Feld gesucht werden und dann geprüft werden ob der Container der nun verschoben werden muss damit der Drop Container den Platz einnehmen kann.
Das ganze hab ich mir quasi so gedacht:
Das Problem dabei ist ich bringe das ich keine brauchbare allgemeingültige Form und wollte mich gern einmal erkundigen ob einer von euch da eine Idee hätte dies bezüglich.
Positionierung soll hier in folgender Reinfolge vorgenommen werden:
1. links
2. rechts
3. oben
4. unten
und dann alle anderen Felder.
ich suche hier seit 2 Tagen eine Lösung für ein Drag Drop Problem im Raster.
Um dies ein wenig zu verdeutlichen nehm ich die Beispiel Matrix, die so ziemlich genau aussieht wie das was ich habe.
4 Spalten , 3 Reihen
Code:
a b c d
1 i | k | | m
2 j | | | m
3 | n n |
Alles was als X gekennzeichnet ist ist quasi belegt, das geht von [weite, höhe] => [1 , 1] feldern bis zu [n, m]
Angenommen ich nehme den Container auf dem feld [a1] und bewege ihn auf [b1] , nun muss b1 platz machen , entweder links ( was nun frei geworden ist) , rechts wäre Alternative 2, oben -> Alternative 3 und unten alternative 4. Würde prima gehen da beide gleich groß sind und [b2] gleich in [a1] reinpasst.
Fall 2:
ich neme den Container [b3, c3] und verschiebe ihn so das er in das Feld [d2] reinragt. Es wird bereits erkannt aha da liegt was. Nun suchen wir wieder die Felder ausgehend von [d1] geht es nach links ? Ja geht es wäre möglich aber nun schneidet er sich mit dem Container den ich da hinlegen möchte, also kann er dort nicht liegen.
Die Suche geht weiter nach rechts -> nicht möglich außerhalb des grids, nach oben das gleiche also nach unten wieder ein Schnitt.
Somit müsste nun in einen Radius welcher sich ständig erweitert um das obere Feld gesucht werden und dann geprüft werden ob der Container der nun verschoben werden muss damit der Drop Container den Platz einnehmen kann.
Das ganze hab ich mir quasi so gedacht:
Code:
Schritt 1:
a b c
1 o o o
2 o x o
3 o o o
möglich 8 Felder
such reichweite = 1
keine möglichkeit gefunden suche ausweiten
a b c d e
1 o o o o o
2 o - - - o
3 o - x - o
4 o - - - o
5 o o o o o
Dabei kann ich ja nun bereits Felder weglassen die ich bereits durchsucht hatte also bleiben nur noch potentielle 16 felder übrig.
such reichweite = 2
Das Problem dabei ist ich bringe das ich keine brauchbare allgemeingültige Form und wollte mich gern einmal erkundigen ob einer von euch da eine Idee hätte dies bezüglich.
Positionierung soll hier in folgender Reinfolge vorgenommen werden:
1. links
2. rechts
3. oben
4. unten
und dann alle anderen Felder.
Zuletzt bearbeitet: