-
26.06.09 08:44 #1
- Registriert seit
- Sep 2007
- Beiträge
- 60
Hallo @ all,
ich versuche mal mein Problem darzulegen.
Ich erstelle mir zur Laufzeit ein "Spielfeld", welches unterschiedlich groß ist, aber aus beispielsweise 100 PictureBoxen besteht, die wie ein Schachbrett, also von der Anordnung, aufgebaut ist.
Später soll es mal ein Spielfeld im Sinne einer Tile-based-Map werden. Ich möchte nun dafür eine Art Map-Editor bauen und man sollte die jeweiligen Hintergründ auf die PictureBoxen verteilen können.
Nun möchte ich gerne wissen, wie kann ich auslesen, auf welche PictureBox der User gerade geklickt hat. Das On-Click-Event zu verwenden und hierbei eine Art Übergabeparameter zu verwenden ist sehr umständlich und wird wahrscheinlich auch nicht direkt funktionieren, da alles erst zur Laufzeit erzeugt wird.
Eine Berechnung über die Koordinaten möchte ich auch nicht als primäre Lösung, da die einzelnen PictureBoxen nicht immer gleich groß sind und mir diese Lösung als unsauber erscheint.
Gibt es eine Möglichkeit sozusagen abzufragen, auf welches Steuerelement der User geklickt hat? Ich hoffe ihr versteht, was ich meine.
Über Antworten wäre ich sehr dankbar.
Mit freundlichen Grüßen
Rockstady11
-
Hi
Wieso ist es nicht möglich, zur Laufzeit ein Event zu abonnieren?
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14
PictureBox pb = new PictureBox(); // Code für Größe, Position etc pb.Click += new EventHandler(PictureBoxClick); // weitere Code private void PictureBoxClick(object sender, EventArgs e) { if(sender is PictureBox) { PictureBox pb = (PictureBox)sender; // mach was mit pb } }
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
26.06.09 11:18 #3
- Registriert seit
- Sep 2007
- Beiträge
- 60
Sorry, habe mich wohl falsch ausgedrückt, ich weiß nicht, wie es zu realisieren ist.
Ich verwende VB.NET, sorry vergessen.
Wie kann ich hier den Eventhandler deklarieren? Ich bekomme es nicht hin.
vielen Dank für die Antwort.
-
Hi
Das Prinzip ist in VB.NET das gleiche:
Du erstellst die PictureBox und abonnierst das Click-Event.
Das EventHandler Delegate wird vom .NET Framework mitgeliefert und erwartet im Konstrutor eine Verweis auf die Funktion, die beim Auslösen des Events aufgerufen werden soll. Diese MUSS als Parameter eine object-Parameter und einen EventArgs-Parameter entgegennehmen können.
EventHandler-Klasse: http://msdn.microsoft.com/en-us/libr...er(VS.80).aspx
Behandeln von Events: http://msdn.microsoft.com/de-de/library/2ccyd347.aspxGrüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Ich würde gerade eine 2D Spiel Welt mit festen Einheiten definieren.
Ich hatte damals zum Beispiel in meinem Spiel (habs nie weiter als bis zum Leveleditor verfolgt
) 16*16 Blöcke gehabt.
So machst du es dir aufjedenfall einfacher mit Kollisionsprüfungen.
Die Korrdinaten Prüfung selbst ist auch relativ einfach zum einen besitzt das Rectangle die Methode Contains mit der du ein Point vergleichen kannst oder die statische Methode Intersect die dir sagt ob sich Rectangles überschneiden.
-
Und wo wäre jetzt der Unterschied zur dynamischen Erzeugung der Controls?

Die Controls kennen sowohl ihre Position als auch ihre Größe!Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Nagut hab es vielleicht nicht ganz richtig beschrieben.
Er will ja zum Beispiel einen Leveleditor erstellen und aus seiner Frage erkennt man ja das er noch nicht fortgeschritten ist.
Da bietet sich eine einhetliche EInheit an.
Man nehme zum Beispiel meinen alten Leveleditor:
http://www.iv-interactive.de/tua/scr...orldEditor.png
Grass, Wasser Sand wurden alle über 16*16 Blöcke definiert, im unteren Abschnitt sieht man auch einen Raster wie man die Bodenflächen auswählen konnte.
Die Objekte selbst werden auch wieder über 16*16 Blöcke definiert.
http://www.iv-interactive.de/tua/scr..._bmpEditor.png
Die Bäume, Häußer etc. brauche ich jetzt blos immer an den 16*16 Blöcken ausrichten.
Der Vorteil hier ist einfach das ich mich nicht mit tieferer Mathematik beschäftigen muss wenn es um Wegfindung oder Kollisionen geht.
Ich hab immer die 16*16 Blöcke die ich abprüfen muss.
Aber ist halt eh nur ein Weg von vielen.Geändert von Spyke (26.06.09 um 23:45 Uhr)
-
Moin
Ok, dann hatte ich dich falsch verstanden. Ich dachte er hätte aus deiner Sicht dann einen Vorteil, wenn er alle PictureBoxen fest auf die Form packt. Von der Größe her wäre ich im ersten Schritt defenitiv auch für eine feste Matrix. Die kann aber auch ohne Probleme zur Laufzeit erzeugt werden.Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
29.06.09 10:32 #9
- Registriert seit
- Sep 2007
- Beiträge
- 60
So, erst mal danke für eure Antworten.
Ich habe mal einen aktuellen Screenshot hochgeladen, soll nur veranschaulichen, was ich meine, dass es bis jetzt nicht toll aussieht, weiß ich selbst, ist aber auch noch nicht das Ziel gewesen.
@ Spyke: Dein Level-Editor sieht schon richtig klasse aus, gefällt mir gut, aber meiner soll erst mal deutlich einfacher werden.
Ich hätte es gerne so, dass man zu Beginn die Größe der Map auswählt und dann an der Seite auswählt, welche Textur ausgewählt ist. Die jeweils ausgewählte Textur soll dann auf die geklickte Fläche der Map übertragen werden, leider weiß ich immer noch nicht, wie ich den Namen der jeweils geklickten Fläche herausbekomme?
Im Hintergrund meiner Map liegt ein zweidimensionales Array, in dem Zahlen gespeichert werden, diese werden dann praktisch nur durch Bilder optisch dargestellt. Mit der Kollsionsabfrage habe ich es so, dass die Figur nur bewegt werden kann, wenn der Wert des Feldes nebenan z.B. 1 ist. Hoffe dies ist verstänlich. Ob es auch eine gute Lösung ist, weiß ich nicht.
Bei mir kann sich die Figur jeweils nur um ein ganzes Bild verschieben, Teilsprünge sind nicht möglich.
Mit dem Eventhandler bin ich irgendwie etwas überfordert. Könntet ihr mir hier bitte nochmals helfen? Ich bekomms halt nur gebacken, wenn ich Doppelklick auf die PictureBox mache, aber selber als allgemeine Funktion für alles PictureBoxen verstehe ich leider nicht.
MfG Rockstady11
-
Wie hast du das Click Ereignis der Pic.Boxen zugewiesen?
Bei der zugewiesenen Click Methode hast du ja 2 Parameter
object sender
EventArgs e
Im Parameter sender bekommst du zurück welches Objekt das Ereignis ausgelöst hast.
In deinem Fall wären es die PictureBoxen.
Code :1 2 3 4 5 6
PictureBox pic = sender as PictureBox; //castet sender nach PictureBox, wenn sender nicht vom Objekt PictureBox wird null gesetzt if(pic != null) { //tu was }
Und falls du 2D Bilder brauchst, schau mal hier:
http://reinerstileset.4players.de/
Edit:
Ups seh gerade genau das gleiche hatte ja Nico auch schon gepostet, also wo genau ist das Problem?
-
30.06.09 07:24 #11
- Registriert seit
- Sep 2007
- Beiträge
- 60
So, ich habe es doch geschafft, war nicht so einfach.

Code :1
AddHandler Pictures(Count).Click, AddressOf PictureBoxClicked
Bei der Erstellung muss jeder PictureBox ein seperater Handler mitgegeben werden.
Code :1 2 3
Sub PictureBoxClicked(ByVal sender As Object, ByVal e As EventArgs) Dim current As PictureBox = DirectCast(sender, PictureBox)
Dieser wird dann so später verwendet. War ein bisschen ausprobieren, aber hat nun schon ganz gut geklappt.
Wie löst man dies am besten mit der ISO-Perspektive? Irgendwie glaube ich, dass dies wesentlich schwieriger ist oder für mich nicht so sehr geeignet ist.
@ Spyke: Sind die Bilder von dir? Darf ich die so einfach verwenden?
Vielen Dank für eure Hilfe!
-
Bilder stammen von http://reinerstileset.4players.de/
-
30.06.09 19:33 #13
- Registriert seit
- Sep 2007
- Beiträge
- 60
Woher du diese hast ist mir schon klar, ich wollte damit wissen, ob dies deine Seite ist oder ob man die Bilder einfach so verwenden darf?
Du hast ja auch einen Map-Editor erstellt. Hast du dies über PictureBoxen realisiert? Ich bekomme es nicht hin, dass sich zwei PictureBoxen überlappen und teilweise durchsichtig sind und die PictureBox dahinter darstellt.
Ist schon ganz schön herausfordernd, so eine Editor zu programmieren.
Wie speicherst du deine Map denn so ab? Also die Informationen in eine Textdatei und welche Informationen übergebe ich hierbei am besten?
Mfg
-
30.06.09 19:53 #14
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
01.07.09 07:59 #15
- Registriert seit
- Sep 2007
- Beiträge
- 60
Blöde Frage, aber nur kurz, wie heißt das Element, dass die Form in zwei unabhängig verschiebbare Teile teilt, wie es auf dem Screenshot von spyke zu sehen ist? Also bei ihm der Teil oben und der Teil ganz unten, hoffe es ist verständlich, was ich meine.
Danke für die Antwort.
Ähnliche Themen
-
JSF - Welcher commandButton wurde geklickt?
Von derStephan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 10.11.09, 17:47 -
Bestimmte Seite sperren bis der Banner geklickt wurde
Von TS7 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 18.03.09, 13:50 -
Feld anzeigen, wo geklickt wurde
Von mychastic im Forum Javascript & AjaxAntworten: 9Letzter Beitrag: 18.09.08, 09:50 -
Auslessen wie oft ein Banner geklickt wurde
Von dom123 im Forum PHPAntworten: 9Letzter Beitrag: 31.07.05, 10:27 -
Caption aus Programm auslesen in das geklickt wurde
Von stimon im Forum Borland CBuilder und VCLAntworten: 6Letzter Beitrag: 19.07.05, 20:22



1Danke

Zitieren



Login





