locked
Todes-Event?

    Frage

  • Hallo,

    Leider musste ich feststellen, dass es keinen Todesevent gibt, existiert aber vielleicht eine andere möglichkeit um festzustellen ob eine ameise tod ist odr nicht?

    mfG toredo
    Donnerstag, 23. November 2006 08:10

Alle Antworten

  • ein Test auf AktuelleEnergie <1 könnte vielleicht weiterhelfen.

    Felix
    Donnerstag, 23. November 2006 23:02
  • Hi Toredo,

    klar könntest du die Lebensenergie der Ameise testen, allerdings wirft sie nach dem Tod keine Events mehr. Da die Meise selbst aber ohnehin nichts mehr tun kann frage ich mich nach Sinn und Zweck?

    Solltest du das nutzen wollen um über statische Variablen Gruppen zu organisieren hast du ja aber trotzdem noch eine Referenz auf die Meise und kannst dort die Lebensenergie checken...

    Aber vielleicht denkt Wolfgang ja über eine Einführung nach sobald er das hier liest ;-)

    Viele Grüße
    Tom
    Freitag, 24. November 2006 17:37
  • Nun ja, ein mögliches geplantes Feature für die Zukunft ist es, den Spieler eigene Sounds abspielen zu lassen. Da würde ein IstGestorben() Ereigniss schon Sinn machen...
    Mittwoch, 29. November 2006 22:28
  • Ich bin mir bei dem Check auf AktuelleEnergie nicht sicher... vielleicht bin ich auch zu blöd, aber wenn eine Ameise nicht im Kampf stirbt, sondern auf offener Strecke verreckt (weil trotz Müdigkeit nicht zum Bau gegangen), scheint die AktuelleEnergie nicht auf 0 gesetzt zu werden.

    Ist das so? Könnte ein Bug sein... aber.. hm.. vielleicht lade ich mir auch einfach mal das Profi-Kit runter und schaue selber nach...

    [zipp - 20min später]

    Ja, es ist, wie ich vemutet hatte. In Code steht:

                        // Ameise hat ihre Reichweite überschritten.
                        if (ameise.ZurückgelegteStrecke > volk.ReichweiteI[ameise.TypIndex]) {
                            volk.GestorbeneInsekten.Add(ameise);
                            continue;
                        }


    Später wird dann aufgeräumt, indem alle GestorbenenInsekten aus der Liste der noch "aktiven" entfernt werden - und zwar letztendlich so:

            public void EntferneInsekt(Insekt insekt) {         
                if (Insekten.Remove(insekt))
                    anzahlVonTyp[insekt.TypIndex]--;
            }

    Dabei bleiben alle Werte des Insekts erhalten, ggf. auch die AktuelleEnergie... hier wäre es, schön, wenn uns Wolfgang noch ein insekt.AktuelleEnergie=0 spendieren könnte.

            public void EntferneInsekt(Insekt insekt) {         
                insekt.AktuelleEnergie =0;
                if (Insekten.Remove(insekt))
                    anzahlVonTyp[insekt.TypIndex]--;
            }


    Bis dahin kann man sich aber auch mit dieser Eigenschaft innerhalb der eigenen Ameisen-Klasse behelfen:

            public bool IstLebendig
            {
                get
                {
                    if ((this.AktuelleEnergie < 1) || (this.ZurückgelegteStrecke > this.Reichweite*64))
                        return (false);

                    return (true);
                }
            }

    (das Multiplizieren mit 64 ist leider nötig, weil die ZurückgelegteStrecke und die Reichweite mit zweierlei Massen gemessen werden)


    Ciao,
        Wolfram
    Sonntag, 3. Dezember 2006 10:30
  • Ist alles notiert und es wird gleich behoben. Die ZurückgelegteStrecke wird in der Tat noch in der falschen Einheit zurückgegeben, das haben wir schon in einem anderen Thread herausgefunden.
    Mittwoch, 17. Januar 2007 18:06