Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

11

06.11.2016, 22:35

Spielt der HP Wert denn überhaupt irgendeine Rolle, solange er Größer 0 bleibt? Ansonsten einfach erstbeste Einheit nehmen und auf minimal 1 reduzieren, wenn noch Schaden übrig weiter mit irgendeiner anderen.

12

06.11.2016, 22:47

Spielt der HP Wert denn überhaupt irgendeine Rolle, solange er Größer 0 bleibt? Ansonsten einfach erstbeste Einheit nehmen und auf minimal 1 reduzieren, wenn noch Schaden übrig weiter mit irgendeiner anderen.

Es soll wenn möglich gleichmäßig verteilt sein.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

13

06.11.2016, 22:58

Meine Frage, warum die bestmögliche Performance benötigt wird, hast du noch nicht beantwortet.

14

06.11.2016, 23:23

Meine Frage, warum die bestmögliche Performance benötigt wird, hast du noch nicht beantwortet.

Gegenfrage: Warum sollte ich nicht die bestmögliche Performance wollen?

Das Spiel läuft auf einem Server, dieser Server soll möglichst viele Matches gleichzeitig hosten können (mehrere pro Core), sodass ich dazu eben gezwungen bin zu optimieren. Es tritt auch eben nicht selten der Fall ein, dass ein AOE Effekt 10 oder mehr Units trifft. Für jedes dieser Units dann eine tiefe rekursive Verschachtelung zu durchlaufen ist da nicht zielführend.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

15

06.11.2016, 23:26

Premature optimization ...

Ich bezweifle ernsthaft, dass du einen Unterschied zwischen einer primitiven Lösung und einer idealen Lösung messen, geschweige denn merken könntest - auch nicht bei 1000 gleichzeitig gehosteten Spielen. Da bekommst du an ganz anderen Stellen Probleme, nicht bei so etwas Trivialem, das höchstens ein paar Mal pro Sekunde auftritt. Und warum soll die rekursive Lösung schlecht sein? 10 ist doch keine "tiefe rekursive Verschachtelung". Zudem geht es auch iterativ.

Aber bevor du eine richtige Messung durchgeführt hast und siehst, dass dein Spiel genau an diesem Punkt zu viel Zeit verbrät, solltest du dir keinen Kopf darüber machen. Implementiere es einfach irgendwie (natürlich nicht total dämlich), so dass es funktioniert. Mit Intuition liegt man bei solchen Dingen oft meilenweit daneben. Man denkt, dass man Gott weiß wie viel Zeit verschenkt, aber letztendlich wirst du es kaum messen können.

Wenn du so akribisch optimierst, dann sparst du bei deinen Datenstrukturen sicherlich auch jedes einzelne Byte an RAM, das sich irgendwie einsparen lässt?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

16

07.11.2016, 14:08

Spielt der HP Wert denn überhaupt irgendeine Rolle, solange er Größer 0 bleibt? Ansonsten einfach erstbeste Einheit nehmen und auf minimal 1 reduzieren, wenn noch Schaden übrig weiter mit irgendeiner anderen.

Es soll wenn möglich gleichmäßig verteilt sein.
Was hat man denn davon, wenn es gleichmäßig verteilt ist? Und was genau bedeutet dann "gleichmäßig"?

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

17

07.11.2016, 14:35

Wie wäre eine Alternative ähnlich zu Diablo3.
Alle Monster einer Gruppe teilen sich einen großen Lebenspunktepool.
Abhängig von diesem Pool berechnest du dann das Leben der einzelnen Monster.

Lebenspool: 1000
Anz. Monster: 5
Leben einzelner Monster: 200.

Beispiel:
Schaden: 100.
Lebenspool: 1000 - 900.
Leben einzelner Monster: 180.
usw.

Sollen deine Monster alle gleichzeitig sterben?

Zum Thema Performance, in meiner Firma haben wir teilweise eine sechsstellige Anzahl von Objekten mit denen verschiedene rechen aufwändige Prozesse durchlaufen werden und das ganze geht in wenigen Sekunden. Und niemand hat bei der Implementierung auf Performance geachtet. Optimierungen werden nur durchgeführt, wenn Dinge merklich schlechter werden.
Damals in der Uni jedoch wurde einem immer eingetrichtert alles zu optimieren... in der Realität ist das aber ohne große finanzielle Verluste nicht zu bewerkstelligen... und vor Allem nicht nötig.

18

07.11.2016, 18:10

Premature optimization ...

Ich bezweifle ernsthaft, dass du einen Unterschied zwischen einer primitiven Lösung und einer idealen Lösung messen, geschweige denn merken könntest - auch nicht bei 1000 gleichzeitig gehosteten Spielen. Da bekommst du an ganz anderen Stellen Probleme, nicht bei so etwas Trivialem, das höchstens ein paar Mal pro Sekunde auftritt. Und warum soll die rekursive Lösung schlecht sein? 10 ist doch keine "tiefe rekursive Verschachtelung". Zudem geht es auch iterativ.

Aber bevor du eine richtige Messung durchgeführt hast und siehst, dass dein Spiel genau an diesem Punkt zu viel Zeit verbrät, solltest du dir keinen Kopf darüber machen. Implementiere es einfach irgendwie (natürlich nicht total dämlich), so dass es funktioniert. Mit Intuition liegt man bei solchen Dingen oft meilenweit daneben. Man denkt, dass man Gott weiß wie viel Zeit verschenkt, aber letztendlich wirst du es kaum messen können.

Wenn du so akribisch optimierst, dann sparst du bei deinen Datenstrukturen sicherlich auch jedes einzelne Byte an RAM, das sich irgendwie einsparen lässt?

Das mag schon sein, nur weder bin ich in der Position, dass ich eine Deadline habe, noch fühle ich mich gezwungen. Mag sich vll so anhören als würde ich hier übertreiben wollen, aber dem ist nicht so. Meine Intention war lediglich einen vernünftigen Ablauf des Algorithmus, weil ich mit meinem bisherigen absolut gar nicht zufrieden war.

Spielt der HP Wert denn überhaupt irgendeine Rolle, solange er Größer 0 bleibt? Ansonsten einfach erstbeste Einheit nehmen und auf minimal 1 reduzieren, wenn noch Schaden übrig weiter mit irgendeiner anderen.

Es soll wenn möglich gleichmäßig verteilt sein.
Was hat man denn davon, wenn es gleichmäßig verteilt ist? Und was genau bedeutet dann "gleichmäßig"?

Wenn eine Unit mit aktiven LifeLink einen burst Dmg erhält, hat es große Chancen lebend aus der Situation heraus zu kommen, da sich der Schaden eben auf mehrere Units verteilt. Damit kann man z.B. seine defensiv schwachen Units offensiver einsetzen, so lange sie eben mit einem Tank verknüpft sind, der wesentlich mehr aushält, aber zu wenig Schaden für die erste Reihe macht. Das aber nur so nebenbei.
Verstehe nicht, was es an gleichmäßig nicht zu verstehen gilt. Das habe ich jetzt auch schon anhand von Beispielen erklärt. Der Dmg x wird prinzipiell zu gleichen Teilen auf die N Member des LifeLinks verteilt. Im Normalfall erhält dann jedes Unit X/N Dmg.

Wie wäre eine Alternative ähnlich zu Diablo3.
Alle Monster einer Gruppe teilen sich einen großen Lebenspunktepool.
Abhängig von diesem Pool berechnest du dann das Leben der einzelnen Monster.

Lebenspool: 1000
Anz. Monster: 5
Leben einzelner Monster: 200.

Beispiel:
Schaden: 100.
Lebenspool: 1000 - 900.
Leben einzelner Monster: 180.
usw.

Sollen deine Monster alle gleichzeitig sterben?

Zum Thema Performance, in meiner Firma haben wir teilweise eine sechsstellige Anzahl von Objekten mit denen verschiedene rechen aufwändige Prozesse durchlaufen werden und das ganze geht in wenigen Sekunden. Und niemand hat bei der Implementierung auf Performance geachtet. Optimierungen werden nur durchgeführt, wenn Dinge merklich schlechter werden.
Damals in der Uni jedoch wurde einem immer eingetrichtert alles zu optimieren... in der Realität ist das aber ohne große finanzielle Verluste nicht zu bewerkstelligen... und vor Allem nicht nötig.

Ja, praktisch so ähnlich, nur das der LifePool eben temporär geteilt werden soll. D.h. einfach die Units auf einen Pool referenzieren lassen geht leider nicht so einfach.

mfg

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

07.11.2016, 19:41

Verstehe nicht, was es an gleichmäßig nicht zu verstehen gilt.

Naja das ist eben auch sehr sehr relativ. Ein paar Beispiele:
Einheit 1: 10.000HP,
Einheit 2: 500HP,
Einheit 3: 5HP
Was passiert wenn zum Beispiel 1HP Schaden verteilt werden soll, oder bei 5, oder bei 10, oder bei 100, oder bei 1000 oder 9999 oder 10.000, oder 10.001 oder 10.100?
Sollen die HP prozentual gesehen gleichmäßig sinken? Dann wäre die Frage wie genau das ganze aussehen soll. Zum Beispiel könntest du die HP zusammen rechnen, berechnen wie viel Prozent der Schaden davon ist und dann jeder Einheit den prozentual passenden Betrag abziehen. Durch Rundungsfehler wird das nicht 100% genau sein, stellt sich aber halt die Frage ob das überhaupt notwendig ist. Falls ja könntest du bei den Einheiten mit wenig HP anfangen, dort möglichst immer abrunden und dafür bei den Einheiten mit viel HP die Differenzwerte hinzurechnen. Das ganze kannst du dir jetzt beliebig komplex gestalten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

20

07.11.2016, 19:55

Die Leben zusammenzählen und relativ zum Anteil des Lebenspools den Schaden zufügen (wer 30% des Lebenspools liefert bekommt 30% des Schadens). Damit wäre der Schaden (prozentuell) gleich verteilt.

Wenn du ihn in absoluten Zahlen gleich abziehen willst, Schaden / Anzahl an Monster. Wenn Leben eines Monsters < 1 dann den Schaden an das nächste weiter geben. Wenn das letzte Monster das dran ist zu wenig Leben übrig hat, stirbt es durch den Schaden.

Werbeanzeige