Laden...

Forenbeiträge von KroaX Ingesamt 301 Beiträge

22.10.2020 - 09:44 Uhr

Java und Java FX muss aber immer fummeln was ich echt schade finde.

Daher habe ich bis heute noch keine GUI wie ich mir diese vorstelle.

Microsoft Visual Studio scheint mit dem WPF alles in einem Guss zu haben und möchte es mal damit versuchen. Nun habe ich Visual Studio 2019 und das Buch C# mit Visual Studio 2019 und mache mal die ersten Schritte.

Ob du bei WPF ohne fummeln auskommst ist allerdings fragwürdig. Ist schwer zu sagen was du dir vorstellst. Hab bisher noch nie mit einem GUI Frontend gearbeitet welches mir alle Wünsche von den Lippen abgelesen hat.

21.10.2020 - 10:49 Uhr

Ich lese clickbait und unbelegte Aussagen.

gg

15.10.2020 - 08:44 Uhr

Ohne eine erneute Diskussion Triggern zu wollen. Wird der Scrum Master / Agile Master auch künftig umbenannt? Weiß da jemand was von?

20.07.2020 - 16:22 Uhr

Warum braucht ihr an dieser Stelle hier den konkreten Typ ObservableCollection<T> ? Reicht euch ggf. auch das INotifyCollectionChanged als Interface ggf. in Kombination mit ICollection / IList?

Warum benötigt ihr Zugriff auf den konkreten Typen? Reicht euch ggf. nicht einfach davon auszugehen, dass Data eine IList ist ( wohlgemerkt ohne den generic Type ). Ihr könntet dann über Reflection den Generic Type der IList ermitteln und dann ebenfalls über reflection eure Properties ermitteln.


  public static Type GetGenericTypeDefinitionOfIEnumerable(this Type enumerable)
        {
            return enumerable.GetInterfaces().Where(t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IEnumerable<>))
                .SelectMany(t => t.GetGenericArguments()).First();
        }
14.07.2020 - 09:28 Uhr

Eine wichtige Frage wäre was für eine Art Verbindung du testen möchtest. Als einfachste Methode gilt hier eigentlich ein Ping auf den Server. Wenn du das für bestimmte Ports benötigst hilft dir ggf. dieser Stackoverflow post Ping a Specific Port

29.06.2020 - 11:02 Uhr

Kostenlos für diejenigen die Tickets für November gekauft haben.

12.06.2020 - 09:09 Uhr

Ich hätte ein paar generelle Tipps für dich:

  • Programmieren ist zum allergrößten Teil Erfahrung. Erfahrung erlernt man nicht aus Büchern (die sind aber natürlich trotzdem wichtig) und man muss viel Zeit mitbringen. Das Programmieren sein zu lassen würde ich dir also nur dann raten wenn es dir keinen Spaß macht. Ansonsten gilt: Bleib dran auch wenn es stellenweise frustrierend sein kann.

  • Du glaubst Objektorientierung verstanden zu haben. Aber das ganze geht weit über die Verwendung von Objekten hinaus. Und auch die OOP ist kein Allheilmittel. Ich habe das Gefühl das dir ein Buch über Entwurfsmuster einen großen Schritt ermöglichen würde. Buchempfehlung hier: "Head first design patterns" ( wenn du es magst das Dinge wirklich einfach und verbildlicht erklärt sind ) oder "Design Patterns. Elements of Reusable Object-Oriented Software" ( mehr text aber eigentlich die bessere Lektüre ).

  • Es ist gut wenn du fragst was andere über deinen Code denken. Das zeigt das du selbst reflektiert bist und Kritik zulässt. Das ist ein sehr wichtiger Faktor in der Softwareentwicklung. Bleib dabei von anderen etwas zu lernen und gib weiter was du selbst verstanden hast.

  • Es gibt nur ganz selten den einen richtigen Weg. Gewöhne dir an darüber nachzudenken was für deinen Anwendungsfall gerade die beste Lösung zu sein scheint ( unter den dir wichtigsten Gesichtspunkten ). Du wirst merken, dass man nicht immer alle Vorteile eines Weges bekommen kann ohne andere Nachteile mit zu ziehen. Daher ist es wichtig sich zu überlegen was man erreichen will.

12.05.2020 - 15:39 Uhr

Von MySQL würde ich generell - wie eigentlich fast die gesamte Community - mittlerweile großen Abstand nehmen.
MariaDB ist ja zB aufgrund der politischen Problematik mit MySQL entstanden. Selbst in der PHP Welt gibts mittlerweile große Abstandsversuche von MySQL.

Hast du dazu etwas mehr Background? Vielleicht nen Artikel oder zwei die du gelesen hast? Hab davon gar nichts mitbekommen aber es würde mich interessieren wo die Probleme bestehen und wie sie entstanden sind.

21.04.2020 - 20:12 Uhr

Warum möchtest du in der ObservableCollection denn unbedingt Models haben?

Wäre es nicht logischer deine DeviceViewModels in dieser Collection zu halten und jedes DeviceViewModel ist der Container für ein Model? Damit sollte dein Problem der Hierarchie doch einfach lösbar sein?

21.04.2020 - 10:41 Uhr

ich kann jedoch nicht die Eigenschaften des Models abrufen, dessen Button auf dem ViewModel geklickt wurde.

Das musst du näher ausführen. Was ist dein Model ( Gerät? ). Wie willst du die Eigenschaften abrufen?

EIn Button wird nicht auf einem ViewModel geklickt. Du hast vielleicht einen Command in deinem ViewModel welcher per Binding auf einen Button in deinem DataTemplate gebunden ist.

Dein DataTemplate besteht hier jedoch nur aus einem Gerät Control. Das Control müsste man mal sehen.

Ich hoffe der Typ Gerät aus ObservableCollection<Gerät> entspricht nicht demselben Typ Gerät deines Controls ( local:Gerät ) ansonsten hast du etwas missverstanden bei MVVM Konzept.

20.04.2020 - 19:04 Uhr

Hast du auf deinen Item ViewModels einen Command den du ausführen könntest? Mir ist nicht ganz klar was du bisher versucht hast.

20.04.2020 - 09:22 Uhr

Da wäre dann die Frage warum du sie explizit im Codebehind erstellen musst?

Erzeugst du aus deinen Daten entsprechende UI Elemente? Wenn ja ist hier das Konzept von DataTemplates und DataTemplateSelector im Zusammenhang mit ContentControl und ItemsControl vermutlich von Interesse.

06.04.2020 - 12:04 Uhr

Wenn die Abhängigkeiten deines Services im DI Container registriert sind, dann werden die Laufzeit automatisch aufgelöst. D.h. du musst nichts explizit übergeben.

Wenn also sowohl Context als auch Service beide als Typen im DI Container registriert sind werden die Abhängigkeiten zur Laufzeit auch vom DI Container automatisch erzeugt / wiederverwendet

31.03.2020 - 11:09 Uhr

Wir machen bereits seit 4 Wochen Homeoffice.

Da wir jedoch ein Unternehmen ohne Projekte sind und eine eigene Produktpalette entwickeln ist bei uns eigentlich vom Homeoffice abgesehen alles beim alten. Da unsere Kunden Onlinehändler sind, ist sogar gefühlt fast mehr los als sonst.

20.03.2020 - 16:06 Uhr

Deine Idee ist nicht besonders neu. Daher gibt es dazu auch schon sehr viele Lösungen / Lösungsansätze bei Google: ( Suche = Wpf Prims Tabs )

Google-Suche nach wpf prism tabs

12.03.2020 - 22:24 Uhr

Wie aber Papst schon sagte musst Du ordentlich die Schichten trennen.

Haha ich hab gelesen: Wie der Papst schon sagte ....

Musste herzlich lachen weil ich den Gedanken übertragen habe auf "das Volk in Schichten zu trennen". Ich dachte echt es ist eine Floskel.

08.02.2020 - 16:34 Uhr

In der Regel kannst du sowas über einen Bounded Context bzw. Aggregates lösen.

Es ist nicht so als müsste dein Autositz jemanden fragen wer der Fahrer ist, viel mehr müsste dein Auto mitbekommen wenn der Fahrer gewechselt wird ( oder wo auch immer ) und diese Information auch sofort an den Autositz weitergeben. Somit bleibt die Zuständigkeit beim Fahrerwechsel ganz eindeutig beim Auto.

Schau dir am besten die Thematik zum Domain Driven Design an und ergänzend kann ich außerdem das Prinzip des Data Oriented Design empfehlen.

22.01.2020 - 20:02 Uhr

Erzeug den TemplateSelector doch mal etwas weiter oben in den Ressourcen des Parents und mach aus dem DynamicResource Verweis eine StaticResource.

20.01.2020 - 16:17 Uhr

Ich frage mich ja, warum ich da nicht gleich draufgekommen bin! Ich überlege, ob das nicht sogar sauberer ist; denn tatsächlich brauche ich ja nur den geänderten Wert! Die View selbst interssiert sich in meinem Fall gar nicht mehr dafür, was mit dem Wert passiert; so vom Gefühl her würde ich sagen, dass man vlt. auf das SelectionChanged-Event nur dann mit einem EventToCommand reagieren sollte, wenn dadurch eine Relevanz für die View gegeben ist (veränderte Darstellungsoptionen, etc). Da ich hier aber aus dem Bauch raus argumentiere, kann und will ich dafür nicht die Hand ins Feuer legen. Es würde mich aber schon interessieren, wie sich das verhält, oder ob es schlicht Wurscht ist.

Nochmals Danke, macht's gut,
Vorph

Am saubersten ist das was am ehesten deinem Usecase entspricht. Wenn du eine Aktion nur auslösen möchtest wenn der Benutzer über die UI eine Änderung an der Combobox vollzieht wäre es möglicherweise sauberer es über ein EventToCommand zu lösen.

Bedenke nämlich: Eine Änderung am Property innerhalb deines ViewModels würde dieselbe Bedeutung haben wie die Benutzerinteraktion aus der UI. Und manchmal möchte man dazwischen unterscheiden können.

19.01.2020 - 23:42 Uhr

Das magische Suchwort für dich lautet wohl EventToCommand. Unter diesem Begriff versteckt sich am häufigsten was du tun möchtest. Jedes gängige MVVM Framework hat dazu eine fertige Implementierung mitsamt der Einbindung der notwendigen Abhängigkeiten.

https://stackoverflow.com/questions/5868589/mvvm-light-adding-eventtocommand-in-xaml-without-blend-easier-way-or-snippet

Das hier ist ein Beispiel mit MVVM Light. Eventuell ziehst du ja in Betracht ein bestehendes MVVM Framework zu nutzen anstatt selbst eines zu schreiben.

10.01.2020 - 10:32 Uhr

Ich glaube worum es Wasined hier ging ( zumindest habe ich das so rausgelesen ) ist das Tooling rund um das eingesetzte System. Das sollte aber natürlich nicht das Hauptkriterium sein bei der Auswahl der Technologie.

Wie du SQLite, als Framework, in deiner Wpf Anwendung unterbringst sollte durch ein paar kleinere Tutorials schnell abgefrühstückt sein. Empfehlenswert sind die automatischen Einbindungsmöglichkeiten über Toolings in Visual Studio sowieso meist nicht da man dazu verleitet wird sich keine Gedanken über die interne Softwarearchitektur zu machen.

Wenn es dir nur darum geht, dass du die Daten und Strukturen in deiner Sqlite Datenbank verändern und auslesen kannst ,ohne deine Anwendung zu nutzen, dann kann ich dich beruhigen. Dafür gibt es zahlreiche Tools im Internet mit denen du dies erreichen kannst. Es wird dann halt nicht direkt über Visual Studio laufen. Ich sehe das aber durchaus als Vorteil und nicht als Nachteil.

Ich habe meist SqliteExpert ( free edition ) oder Sqlite Administrator verwendet.

17.12.2019 - 13:06 Uhr
public Person[] Verlauf { get; set; }

Du erstellst ja auch keine Instanz von dem Array

14.10.2019 - 16:10 Uhr

Zu deiner Frage mit der Zeit:

Ich glaube für sowas gibt es in Unity die sog. DeltaTime

https://docs.unity3d.com/ScriptReference/Time-deltaTime.html

Die Info ist allerdings als vorsichtig zu betrachten, da ich mir Unity auch erst gestern zum ersten Mal angeschaut habe.

12.10.2019 - 14:05 Uhr

Hallo zusammen,

ich interessiere mich sehr für die Konzepte und Herangehensweisen der Spieleprogammierung in Unity 3D und suche daher nach einem guten Buch zum Lesen für unterwegs.

Was ich NICHT suche:

  • Ein Buch was mir jede Funktion des Editors erklärt und was man damit machen kann.
  • Wie baue ich mein erstes Spiel indem ich Code und Material irgendwohin lege und irgendwie ans laufen bekomme.
  • Grundlagen in C#

! Was ich suche:

  • Toll wäre es wenn es von jemandem aus der Branche geschrieben ist der auch persönliche konkrete Erfahrungen und somit Do's and Don'ts vermittelt.
  • Wie trenne ich am effektivsten meine Spiel logik von dem aktuellen Spielclient
  • Einführung in Strukturierung von Spielinhalten, Vermittlung der Konzepte und Design Patterns dahinter.
  • Worauf sollte man wachsenden Projekten achten und welche Probleme treten häufig auf. Wie kann man sie vermeiden?

Für jede Empfehlung bin ich dankbar 😃. Bin bereits über dieses Buch gestolpert ( -> Game Programming Patterns (Englisch) Taschenbuch ) , jedoch habe ich die Befürchtung, dass es nur einen Bruchteil meiner eigentlichen Fragen beantwortet ( Welche Patterns es gibt )

13.08.2019 - 09:55 Uhr

Wenn du es halbwegs sauber umsetzen möchtest wirst du nicht um einen Server in irgendeiner Form drum herum kommen.

Das wäre entweder ein SQL Server der als Schnittstelle für alle Clients dient oder eine von dir geschriebene Lösung welche im Grunde dasselbe tut.

Natürlich gibt es auch andere Wege aber die sind vermutlich aufwändiger oder fehleranfälliger für dein Szenario

12.08.2019 - 11:39 Uhr

Ich habe mit solchen impliziten Abhängigkeiten eher schlechte Erfahrungen gemacht und kann daher nur davon abraten. Was ich meine?

-> ViewModelA hat ein Property welches sich aus 2 oder mehr Properties zusammensetzt die woanders liegen.

Ich würde empfehlen: Schreib konkrete Logik die dein zusammengesetztes Property wirklich ändert wenn sich eine der Abhängigkeiten ändert. Dadurch musst du keine bestimmte Logik mehr nachziehen wenn es um Validierung o.ä. geht, denn dein PropertyChanged wird ja wirklich geworfen weil es sich geändert hat. Das hat auch den Vorteil der Nachvollziehbarkeit im Code.

Zu deiner eigentlichen Ausgangsfrage:

Ich würde das PropertyChanged Event von ViewModelB fangen und in der Behandlung dein Property welches scheinbar eine Abhängigkeit hat neu Berechnen und Zuweisen. Das ganze kannst du dann auch easy durch einen Unittest abdecken.

Das wichtigste aber ist, du baust eine explizite Abhängigkeit die man leicht nachlesen kann. Ich persönlich halte nichts davon wenn ein Property mehrere PropertyChanged Ereignisse für andere Properties wirft nur weil sich diese scheinbar an etwas bedienen.

12.08.2019 - 10:23 Uhr

Warum implementiert ViewModelB nicht IDataErrorInfo?

11.08.2019 - 17:44 Uhr

Verstehe danke dir für den Einblick.

11.08.2019 - 16:39 Uhr

Edit: SCTelemetry hört sich allgemein nach Messaging an.
Und sowas lässt sich dann sehr gut via IMediatR und/oder Reactive Extensions kombinieren - wäre hier meine grundlegende Empfehlung.
Verwende ich in eigenen Projekten auch in diesem Stil.

Kannst du das Szenario wie du das verwendet kombinierst mal ausführen? Würde mich interessieren. Hast du eine Komponente die Reactive Events schmeißt und du hast ne zentrale Stelle in deiner Anwendung welche die Pipeline abfragt und dann über mediations an die richtigen Stellen weiter delegiert oder wie kann man sich das vorstellen?

11.08.2019 - 13:55 Uhr

Ohne genauer zu wissen was dein Vorhaben ist. Du kannst natürlich die Event Abonnierung abschalten sobald du der Wert das erste mal bekommen hast.


 private void Telemetry_Data(SCTelemetry data, bool update)
       {
          // Hier bekomme ich jetzt meinen Wert 

                  Variable = data.IRGENDWAS    // Diesen Wert möchte ich jetzt zwischenspeichern, ohne das er sich noch mal ändert
 Telemetry.Data -= Telemetry_Data;

        }

25.07.2019 - 17:35 Uhr
  • Möglicherweise ist dein Stream irgendwo schon disposed wo er noch benötigt wird
  • Was sagt die Doku zur Verwendung der Methode?
  • Ist die Methode Synchron ( void ?! )
  • Wann wird die function im zweiten step ausgelöst?
  • Kann es sein das die Response null ist?

Ich fürchte wir können dir nur schwer beim debuggen helfen ohne dein Projekt zu kennen.

Wenn die Methode nicht synchron sein sollte würde ich darauf tippen das der Stream noch vor Verwendung von der Tweetmethode disposed wurde. Aber ist nur geraten

Btw: Gibt es sowas wie Stacktraces. Wenn der Stack sagt die Exception kommt von außerhalb deines Codes dann übergibst du entweder was falsches ( -> Doku ) oder es gibt nen Bug in dem Fraemwork

25.07.2019 - 17:23 Uhr

I smell side effects. Von der Hälfte des Codes ist vollkommen unklar warum du ihn brauchst.

22.07.2019 - 09:42 Uhr

Startest du Visual Studio als Administrator? Ggf. mal mit reduzierten Berechtigungen starten und den Debug nochmal ausführen. Möglicherweise kommst du dadurch an eine Exception die irgendwo geworfen wird heran.

EDIT: @Stefan.Haegele ich glaube es wurde gesagt das es sich im Debug Modus nicht reproduzieren lässt.

EDIT2: Weitere Möglichkeit:

Setz in deinem Programm möglichst früh mal ein Codesnippet ein um einen Debugger an das Programm anzuhängen.

https://stackoverflow.com/questions/7276936/start-debugger-in-code

Damit kannst du dann evtl. besser debuggen?!

17.07.2019 - 13:56 Uhr

Im Code ist doch erkennbar, dass es Events für Next usw. gibt. Es steht sogar dort wann diese ausgelöst werden.

Evtl. ist das PageChanged eher das richtige Event für dich?

Aus deiner Beschreibung geht leider nicht hervor was du genau tun möchtest. Ist dieses Thema noch relevant?

Eine alternative zu anderen WizardControls wurde ja schon gepostet.

16.07.2019 - 14:10 Uhr

Was ist der "Advanced Wizard" ? Ist das was selbst geschriebenes? Ein Open Source Projekt? Irgendwas gekauftes?

Wie auch immer: https://stackoverflow.com/questions/4954037/which-wizard-control-can-i-use-in-a-winforms-application

Wenn du mit dem arbeiten musst was du da gesagt hast wirst du das Verhalten ggf. irgendwie überschreiben müssen um selbst diese Events die du benötigst du raisen.

12.07.2019 - 11:23 Uhr

Hast du da ein bestimmten Programm für womit du das machst?

10.07.2019 - 15:51 Uhr

Sein "DifferentValidationErrorTemplate" war vermutlich falsch definiert

28.06.2019 - 20:25 Uhr

Ich würde folgendes empfehlen:

So wenig Text wie möglich und nur so viel wie unbedingt nötig. Lange Texte kann man in Detaildialogen verstecken und für User anbieten die eher an den RPG Elementen interessiert sind. Für das Gameplay sind Beschreibungstexte eher nicht so interessant.

Hast du dir mal das Interface von FTL angeschaut? Ich finde das vom Anwendungsfall eher ähnlich und dennoch auch bei FTL nicht unbedingt übersichtlich aber man gewöhnt sich zumindest schnell daran.

22.06.2019 - 09:12 Uhr

bevor die Klasse aus dem Speicher entfernt wird. Er läuft sonst weiter und ich habe keine Kontrolle darüber mehr.

Ist das wirklich so? Ich bin mir da nicht so sicher. mMn. hat diese Dispose Implementierung gar keinen Vorteil

20.06.2019 - 09:05 Uhr

Das Problem warum es nicht funktioniert:

Im Scope deines Styles gibt es kein Element Item2 auf das du zugreifen könntest. Aus deinem Style heraus auf Elemente zugreifen kannst du höchsten indem du den Visual Tree nach oben läufst. Das könntest du machen indem du mit FindAncestor nach dem erstmöglichen TabItem suchst und dich daran bindest.

https://stackoverflow.com/questions/18431043/wpf-relativesource-in-style

21.05.2019 - 17:07 Uhr

Aus eigener Erfahrung kann ich sagen:

  • Arbeite entweder mit denselben Objektinstanzen ( Sprich keine Notwendigkeit Equals zu überschreiben ). Dadurch hältst du dich auf jeden Fall daran deine Objektinstanzen anständig weiter zu reichen und zu verwerfen.

ODER

  • Arbeite mit Objekt ID's ( Sprich DisplayMember + ValueMember ) -> ValueMember ist hier deine ID damit das Steuerelement selbst das passende Objekt aus der Itemssource holt anhand ihres values.

Einen Mix aus beidem kann ich nicht empfehlen. Die Frage die du dir auch stellen solltest. Warum hast du überhaupt 2x eine Instanz vom selben Objekt? Bzw. mit demselben Value. Und wenn ja woher kommt es. Du ignorierst dieses potentielle Problem grade.

20.05.2019 - 13:42 Uhr

Mir persönlich ist die ganze Geschichte etwas zu undurchsichtig beschrieben. Man sieht nicht wo / wann und wie du dein "Item" im Code setzt. Ich vermute das es damit zusammen hängt.

Dein Combobox Binding fehlt leider auch, denn wie du beschrieben hast scheint dein SelectedItem schon falsch zu sein?

Ich würde auch allgemein davon abraten im Xaml Vekettungen von Properties im Binding zu nutzen. Setz deinen Datacontext an deinem Steuerelement möglichst explizit so dass du maximal einen Punkt, besser aber gar keinen Punkt im Binding nutzen musst.

20.05.2019 - 10:18 Uhr

Ich hab aktuell das Problem beim Laden meiner Eigenschaften das meine ClinicStaffItemsSource befüllt wurde, aber mein SelectedItem nicht richtig ausgewählt oder angezeigt wird.

Was heißt denn "richtig" ?

Item.ClinicStaff = value;

Was ist diese "Item" ?

Und was hast du überhaupt bisher versucht und wobei kommst du nicht weiter?

17.05.2019 - 08:03 Uhr

Schau mal wie die das in diesem Framework gelöst haben. Out of the Box geht das glaub ich nicht.

https://mahapps.com/

09.05.2019 - 22:36 Uhr

Und ich hab die ersten 30 Sekunden darüber nachgedacht was daran so schlimm sein könnte eine Connection in nem eigenen Task aufzumachen 😄

07.05.2019 - 09:53 Uhr

Du musst zunächst in deinem UserControl ( welches ja im ContentControl gehostet wird ) erstmal definieren WANN dass denn überhaupt passiert. Sprich dein im MainWindow befindliches Usercontrol muss signalisieren "Hey ich bin hier fertig" damit dein Mainwindow weiß wann es einen Wert dieses UserControls auslesen muss um dies dann weiter zu verarbeiten.

Zumindest von der Idee her.

Die eigentliche Umsetzung klingt dabei noch ziemlich dirty. Was du eigentlich möchtest ist so eine Art Content Browser für deine Anwendung. Das ist nicht unbedingt trivial. Ich selbst löse sowas mit ViewModels und Datatemplates und navigiere nur zwischen den einzelnen ViewModels hin und her. Dabei wissen die einzelnen ViewModels allerdings nie etwas voneinander. Sprich sie sind nicht abhängig voneinander.

Eventuell wäre es in deinem Fall leichter wenn du hier mit einem Dialog Fenster ( Modal ) arbeitest. Dabei kannst du einfacher mit Ergebnissen arbeiten? Zumindest mache ich das meistens so. Die Visualisierung eines modalen Dialogs kannst du ja selbst beeinflussen.

02.05.2019 - 21:43 Uhr

Im Scope deine Button Click Methode die vermutlich über einen Eventhandler ausgeführt wird ist die Instanz deiner Klasse Helden bereits nicht mehr verfügbar.

Der Ablauf bei dir wäre:

  • MainWindow wird erstellt
  • Klasse Helden wird erstellt
  • Klasse Helden wird verworfen da sie nirgendwo zwischengehalten wird

Du kannst dir das so vorstellen, als dass am Ende jeder Methode alles weggeräumt wird was du innerhalb einer Methode gemacht hast, es sei denn du tust Dinge um deine erstellten Konstrukte irgendwo zwischen zu speichern. Gewöhnlich passiert das über instanzvariablen. Ähnlich hast du das bereits bei deiner Helden Klasse gemacht.

Natürlich ist es nicht unbedingt immer klug alles in Klassenvariablen zwischen zu halten, aber für dein momentanes Verständnis sollte dich diese Info vielleicht weiterbringen.