Kann man diesen Code noch schneller machen?
-
50 Schritte entspricht 1 Sekunde Spielzeit. Also es wird jede Sekunde geprüft, ob ein Feind in Reichweite ist.
Das mit dem Vektor kenn ich nicht. Ist das eine Art dynamisches Array? Ich hab von sowas leider keine Ahnung.
Ob eine Einheit in Reichweite ist prüf ich mit den besagten 3 Zeilen. Die Box bringt überhaupt gar nichts, weil es auch nicht schneller ist, zu schaun ob ne Einheit innerhalb einer quadratischen Reichweite ist und dann nochmal den Kreis zu testen. Das hab ich alles schon ausprobiert.
Wenn du das mit dem Vektor nochmal erklären könntest, würde mir das vielleicht helfen.@<>: also ich hab keine Probleme mit dem runterladen
-
Ach und kann ich in so Vektor auch eine dynamische Anzahl an Wegpunkten speichern?? Das würde mir sehr bei der Wegfindung helfen, die lutscht nämlich.
-
hast du schonmal google ausprobiert? oder die suchfunktion des forums?
-
cool ein dynamisches Array ist offenbar nur, dass man ein neues, größeres Array anlegt und die Werte kopiert?? http://www.volkard.de/vcppkold/die_klasse_vector.html
-.-
-
Original erstellt von Optimizer:
cool ein dynamisches Array ist offenbar nur, dass man ein neues, größeres Array anlegt und die Werte kopiert??Unser meisterlicher Peter meinte nicht die Vector-Klasse aus Volkards Tutorial, sondern die Vector-Klasse aus der STL.
Die funktioniert nach dem Prinzip der verketteten Liste, ist schnell und einfach zu nutzen.Was willst du bei der Wegfindung mit einem dynamischen Array anstellen? Macht man sowas in der Regel nicht per Backtracking?
-
afaik ist std::vector laut eines defect reports immer als array implementiert
verkettet liste wäre std::list.
-
Original erstellt von <afaik>:
afaik ist std::vector laut eines defect reports immer als array implementiert'Schuldigung, hast Recht. Verkette Listen mit Direktzugriff sind ja auch eher ungewöhnlich.
-
optimizer
*********also ich wär schon der meinung deine karte in kleine quadrate einzuteilen...das würde dir dann nämlich helfen bei der wegfindung
bye
tt
-
kleine quadrate? mit hastables auf durch 16 geteilte koordinaten?
2d-bäume? ballanciert, tries, spreizbäume?
voronoy-diagramme? mit tricks, die updates lokal zu bleiben?für dem krass guten algo muss schätzen, wie oft updates, wie weit bewegungen pro update, wie ist welt gequantelt, wie dicht ist bevölkert und so sachen. der beste universal-algo wird die hier um faktor 10 outperformt durch nen schlechten spezialisten.
-
Wenn du pro seite 20 einheiten hättest dann wären das ja 20^2 rechnungen pro FRAME
da sind bei einer minimalen framerate von 25 10k rechnungen pro sec
Benutzt lieber ne zwischenstruct wo du schaust ob sich eine Einheit bewegt hat!
Dann kannst du noch so ne Art Bounding box verwenden..
Bei der Rechnung kannst net mehr viel machen. Es sei denn du schaust ob du per MMX, SSE etc noch ein paar zusatz nano secs bekommst.
Wird aber net viel hergeben!
-
Ich habe zwar nicht viel Ahnung, aber wie wäre es mit ein paar ASM-Algorithmen?
Oder kann man nicht auch in C++ mit Registern arbeiten?
-
ja das geht. Man könnte das auch Inline machen, ist aber die frage ob das
dann viel bringt...Devil
-
die letzten beiden beitraege sind ziemlicher quatsch. das kann kaum einer besser als der compiler. zumindest bei so trivialen sachen.
-
Original erstellt von Pogo:
Ich habe zwar nicht viel Ahnung, aber wie wäre es mit ein paar ASM-Algorithmen?Der Compiler kann i.d.R. besser Assembler als der Programmierer (bis auf einige gute Assembler-Coder). Wenn man wirklich im Disassembly grobe Fehler (bzw. Verlangsamungen) sieht kann man selbst mit inline-ASM eingreifen. Ist aber IMHO seeeehr selten nötig.
Original erstellt von Pogo:
Oder kann man nicht auch in C++ mit Registern arbeiten?Ein "register int" bringt heutzutage nicht mehr viel. In den meisten Fällen wird es vom Compiler ignoriert. Der Compiler entscheidet selbst wann etwas in die Register sollte und wann nicht.
The register keyword specifies that the variable is to be stored in a machine register, if possible.
The 32-bit compiler does not honor user requests for register variables. Instead it makes its own register choices when global optimizations are on. However, all other semantics associated with the register keyword are honored by the 32-bit compiler.
-
Ich plane das so, dass ich den Weg berechne, alle Hindernisse auf die ich dabei stoße, sind eh quadratisch, ich kann also jeweils die 4 Ecken als Wegpunkte in meinem dynamischem Array aufnehmen.
Darauf kann ich dann A* ansetzen.
Einheiten, die sich bewegen, werden nicht als Hinderniss betrachtet, das spart Rechenzeit, außerdem sind sie eh woanders, wenn die Figur dort wirklich eintrifft.