Laden...

Anregungen zur Umsetzung gesucht

Erstellt von cx° vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.418 Views
cx° Themenstarter:in
190 Beiträge seit 2005
vor 18 Jahren
Anregungen zur Umsetzung gesucht

Hallo zusammen,

Ich möchte eine Art "hexagonales Muster" aufbauen. Es besteht aus Hexagon und Pentagon. Diese sollen auf einem Control angeordnet werden und anklickbar sein (wenn man will eine Art Editor für das Muster). Für die Hexagon/Pentagon habe ich an UserControls gedacht, die ich dann auf einem gemeinsamen Control platziere. Das so entstandene Muster soll auch zoombar sein. Ist die Umsetzung so möglich, oder habt ihr bessere Vorschläge?

Danke schonmal,
cx°

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo cx°,

das soll eine Spielfeld werden, oder? Ich denke da sind UserControls nicht geeignet. Du musst die Hexagone einfach selber zeichnen. In A* (Pathfinding) mit Sechsecken? findest du Code dafür. Das Anklicken kann man auch selbst programmieren - aus den Mauskoordinaten ausrechnen, welches Hexagon geklickt wurde.

BTW: Mit Fünfecken kann man doch eine Fläche füllen, oder?

herbivore

1.271 Beiträge seit 2005
vor 18 Jahren

Original von herbivore
Das Anklicken kann man auch selbst programmieren - aus den Mauskoordinaten ausrechnen, welches Hexagon geklickt wurde.

Man muss gar nicht selber rechnen. Das geht mit GraphicsPath und .IsVisible.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo progger,

wenn du 2000 Hexagone auf dem Bildschirm hast, musst du aber 2000 Hexagone mit IsVisible abfragen. Da ist mein Weg dann schon besser, weil er unabhängig von der Anzahl der Hexagone immer schnell und gleich schnell ist. Vielleicht ist es mit IsVisible Performant genug. Ich habe es noch nicht ausprobiert.

herbivore

2.921 Beiträge seit 2005
vor 18 Jahren

Oder wie immer auch möglich: man geht noch einen Schritt weiter und baut sich "grafische" Objekte, die selbst merken ob sie geklickt wurden!?

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

I
1.739 Beiträge seit 2005
vor 18 Jahren

Hexagon und Pentagon, kann ich das Muster mal sehen?

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo ikaros,

na, ich denke doch mal wie in A* (Pathfinding) mit Sechsecken?

herbivore

I
1.739 Beiträge seit 2005
vor 18 Jahren

Vielleicht ist aber doch ne Projektion eines Arrays auf ne Kugel gemeint(wie beim Fussball) oder was ganz anderes, er meinte ja beides Penta- und Hexagon...
Ich dachte einfach, lieber nachfragen bevor aneinander vorbeigeredet wird.

cx° Themenstarter:in
190 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

Vielen Dank für Eure rege Beteiligung.

@herbivore: nein, kein Spielfeld - 'ikaros' hat es richtig getroffen: Es geht um einen abgerollten Fußball. Dieser besteht ja aus alternierenden Fünf- und Sechsecken(siehe Anhang). Ich möchte dem Benutzer die Möglichkeit geben, die Polygone auszuwählen und bestimmte Aktionen zu tätigen. Z.B. mit einer Grafik füllen. Aber bis es soweit ist, brauche ich eine gute Idee, wie man das Control dafür am geschicktesten umsetzt. Wichtig wäre das man auch Zoomen kann - Drehen wäre perfekt.

Ich hatte es mal mit einer Picturebox probiert und eine ImageMap (siehe bei codeprojekt.com) dahinter. Anklicken war OK. Die gezeichneten Polygone kann man ja eigentlich mit graphics.FillPolygon(...) mit einem Brush füllen, leider würden die Kanten vom hineingelegten Bild nicht abgeschnitten, sondern im nächsten Polygon fortgesetzt.

Bestimmt wisst ihr noch was besseres.

Gruß,
cx°

I
1.739 Beiträge seit 2005
vor 18 Jahren

Also ein ein aufgeschnittener Fussball(wie gemein).

Mein Senf dazu:
Auf den ersten Blick sieht man die Einfachheit(Objekte nebeneinander nicht verschiebbar, per Klick ein paar Eigenschaften ändern).
Das spricht für Controls.
Auf den 2. Blick kommen Sachen wie Zoom(ok ist nicht so schwer) und Rotation der Zeichenfläche hinzu.
Qual der Wahl:
Ich persönlich würde zu aktiven grafischen Objekten tendieren. Ist erst mal mehr Aufwand(Isolation und Eventhandling)) aber das relativiert sich schnell, bei den Transformationsmöglichkeiten des Graphicsobjects in das gezeichnet wird.
Dh. Zoom und und Rotation wird auf den Container(Zeichenfläche) einmal angewendet, ohne einen Haufen ev. Fehlerträchtigen Code zu implementieren, der die Position von Controls(bei Zoom) und deren Winkel und neue Position(in Relation zu den anderen Controls) neu berechnet. Kurz man kann auf hinreichend getesten Code zurückgreifen(die Ressourcen zum erreichen ähnlicher Qualität, hat man meist nicht), der Mehraufwand für 3 recht simple Klassen ist überschaubar(bei gut wartbaren Code, klein und überschaubar).
Kurz: ich schliess mich progger und dr4g0n76 an.

cx° Themenstarter:in
190 Beiträge seit 2005
vor 18 Jahren

Guten Morgen,

Original von ikaros
Also ein ein aufgeschnittener Fussball(wie gemein).

Die Luft ist definitiv raus 😉

Ich werde es wohl mit den grafischen Objekten umsetzen.

Noch eine Frage zum Zoom, bzw. Rotieren - Es gäbe ja hier zwei Möglichkeiten: Entweder ich zoome die Zeichenfläche, wobei die Qualität leidet, oder ich aktualisiere die Koordinaten der Polygone und zeichne neu.

Für die Funktion 'Zoomen', wäre die zweite Variante sicher sinnvoller, aber wie sieht es beim Rotieren aus? Nehmen wir an, ein Polygon wurde mit der Methode FillPolygon(...) eine Grafik zugewiesen, wird diese ja nicht mit 'gedreht'. Hierfür wäre dann wohl das 'einfache' drehen der Zeichenfläche ausreichend?

So würde es doch gehen?

EDIT:
Wenn ich nur die Zeichenfläche drehen würde und danach zoome, gibt es ja doch die Probleme mit der Textur (fillPolygon) des Grafikobjekts. Also auch hier Neuzeichnen!?

Gruß,
cx°

M
456 Beiträge seit 2004
vor 18 Jahren

Du könntest dir im Hintergrund ein Bitmap-Object halten, dass für jede Schaltfläche eine individuelle Farbe speichert (vielleicht aus Hashcode generieren?). Dieser Farbcode identifiziert nun jedes Hexagon/Pentagon und bei einem Klick brauchst du nur noch dieses Bitmap auslesen und findest sofort deine Schaltfläche.
Auch könntest du das Bild in einer kleineren Auflösung speichern als das Orginal um Speicherplatz zu sparen.

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo cx°,

ich denke alle deine Überlegung zu Rotieren und Skalieren solltest du revidieren, da das doch von GDI+ direkt unterstützt wird: Graphics.Transform.

herbivore

cx° Themenstarter:in
190 Beiträge seit 2005
vor 18 Jahren

@herbivore:

da hast du natürlich recht. habe ich im moment gar nicht dran gedacht.

nochmal danke für eure anregungen

cx°