tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
Like Tree1Danke
ERLEDIGT
NEIN
ANTWORTEN
29
ZUGRIFFE
2329
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rockstady11 Rockstady11 ist offline Mitglied Silber
    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
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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 Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Rockstady11 Rockstady11 ist offline Mitglied Silber
    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.
     

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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.aspx
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  5. #5
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zitat Zitat von Rockstady11 Beitrag anzeigen
    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.
    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.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  6. #6
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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 Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  7. #7
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    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.
    Angehängte Dateien Angehängte Dateien
    Geändert von Spyke (26.06.09 um 23:45 Uhr)
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  8. #8
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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 Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  9. #9
    Rockstady11 Rockstady11 ist offline Mitglied Silber
    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
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Abfrage, welche PictureBox geklickt wurde-screen.gif  
     

  10. #10
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    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?
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  11. #11
    Rockstady11 Rockstady11 ist offline Mitglied Silber
    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!
     

  12. #12
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  13. #13
    Rockstady11 Rockstady11 ist offline Mitglied Silber
    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
     

  14. #14
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Zitat Zitat von Rockstady11 Beitrag anzeigen
    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?
    Lesen: Reiner's Tilesets - Rechtliches
     
    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

  15. #15
    Rockstady11 Rockstady11 ist offline Mitglied Silber
    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

  1. JSF - Welcher commandButton wurde geklickt?
    Von derStephan im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 10.11.09, 17:47
  2. Bestimmte Seite sperren bis der Banner geklickt wurde
    Von TS7 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 18.03.09, 13:50
  3. Feld anzeigen, wo geklickt wurde
    Von mychastic im Forum Javascript & Ajax
    Antworten: 9
    Letzter Beitrag: 18.09.08, 09:50
  4. Antworten: 9
    Letzter Beitrag: 31.07.05, 10:27
  5. Caption aus Programm auslesen in das geklickt wurde
    Von stimon im Forum Borland CBuilder und VCL
    Antworten: 6
    Letzter Beitrag: 19.07.05, 20:22