Seite 22 von 66
Verfasst: 29.01.2006 17:13
von STARGÅTE
Macros hat geschrieben:Genau parallel, aber die Rechenleistung deines Computers erhöht sich nicht.

wie meinst du das, das wollte ich ja eigendlich wissen ob am eine Berechnung die ca. 2s dauert so als Thread machen kann das das Hauptprogramm ohne stocken weiter läuft ?
Verfasst: 29.01.2006 17:24
von Macros
Wenn du rechenleistungsintensive Aufgaben im Tread erledigen lässt,
wirkt sich dass auch auf dein Hauptprogramm aus.
Verfasst: 29.01.2006 17:28
von STARGÅTE
Macros hat geschrieben:Wenn du rechenleistungsintensive Aufgaben im Tread erledigen lässt,
wirkt sich dass auch auf dein Hauptprogramm aus.
das heißt es hat überhaupt keinen zweck oder wenig, wenn die die komplette Wegberechnung als Tread laufen lasse.
Ich habe es nämlich schon umprogrammiert und es wurde ehr noch langsammer

Verfasst: 29.01.2006 17:43
von NicTheQuick
Du kannst jedem Thread eine andere Priorität geben. Allen anderen
Threads neben dem Hauptthread würde ich also einen Priorität unter 16
geben, also entweder 15 oder auch 14. Das musst du dann ausprobieren.
Verfasst: 29.01.2006 19:14
von Hades
das heißt es hat überhaupt keinen zweck oder wenig, wenn die die komplette Wegberechnung als Tread laufen lasse
Ich habe es nämlich schon umprogrammiert und es wurde ehr noch langsammer
Also eigentlich sollte es nicht wesentlich langsamer sein. Schneller wird es aber natürlich nur, wenn Du mehr als einen Prozessor (core) zur Verfügung hast.
Die Wegberechnung als extra Thread laufen zu lassen finde ich sogar eine sehr gute Idee.
Du könntest sogar die komplette KI in einem extra Thread laufen lassen. Es ist doch gar nicht notwendig, dass das Programm auf die Entscheidung einer einzelnen Einheit wartet. Die überlegt dann halt einen kurzen Augenblick.
Damit könntest Du sehr einfach erreichen, dass das Programm mit konstanten fps durchläuft, und nicht immer wieder stockt. Ok, bei nem RTS ist das nicht ganz so wichtig wie bei Spielen in EGO-Perspektive, aber dennoch schön zu haben.

Verfasst: 29.01.2006 19:36
von STARGÅTE
aha gut danke für eure Hinweise

Verfasst: 31.01.2006 22:21
von SDX
Also erstmal: echt Klasse, was Du da auf die Beine gestellt hast. Ich hab selbst schon mal angefangen ein RTS zu basteln. Hab's aber wegen Zeitmangel und Freundin (Zitat:"Du sitzt ja den ganzen Tag nur vor'm Rechner...bla") abgebrochen. Meins war Hexagonal aufgebaut... fand ich hübscher

und sollte ne eigenständige Story bekommen, nämlich Vampiere gegen Werwölfe (ein wenig and den Film Underworld angelehnt).
STARGÅTE hat geschrieben:nach dem ich mich jetzt schon 3 Tage nur mit der Kollision und Wegsuch beschäftigt habe ist mir jetzt (5:15

) aufgefallen das ich einfach nur "scheiße" berechnet habe (
sin() mit cos() vertauscht), da ich aber noch ein paar Winkelkorrekturen mit drinne hatte (jetzt weg) ist das nicht so doll aufgefallen....
Wenn Du noch ein wenig Rechenzeit brauchst, kannst Du hier optimieren. Sin und Cos würde ich in Tabellen vorberechnen (einfach ein array z.B. Dim _Sin(360) (hier kannst du auch gleich auf Grad umrechnen

)). Das hab ich mal ausgetestet und es ist ca. 5 bis 10 mal so schnell!!! Nur nicht mit Floats arbeiten!
Noch ein kleiner Tipp: x*0.01 ist um ca. 20% schneller als x/100
Vielleicht hier und da noch mit Pointern arbeiten, das beschleunigt einige Sachen enorm (hab mal ein Programm geschrieben um Sprites umzufärben, also z.B. alles was Rot ist Blau machen), da hat das Einsetzen von Pointern die ganze Sache EXTREM beschleunigt (Faktor 100 oder so... war auf jeden Fall fantastisch).
Benutzt Du StartDrawing() irgendwo? Raus damit! Das bremmst übelst.
Und wie siehts aus mit ClearScreen()? Kannst Dir sparen, wenn Du eh den ganzen Screen neu malst. Das bringt Dir auch nochmal ein ganz klein wenig.
... und besorg Dir UNBEDINGT die aktuelle Version von PB

Verfasst: 01.02.2006 01:59
von STARGÅTE
erstmal danke für die Beschleunigungshinweise
obwohl ich mit der Array(360) für sin und cos überhaupt nicht zufrieden bin. Ich finde es besser wenn ich das direkt berechne außerdem muss ich doch wenn ich ein Array nehme erst int() benutzen oder ?
weil meine winkel meisten im 1/10 bereich sind
StartDrawing() benutze ich nur im Menü aber im Spiel habe ich inzwischen alles rausgenommen das wusste ich schon.
Das X*0.01 schnelle ist ist mir auch schon aufgefallen aber ist es wirklich ausschlaggebend

? Klar auch 100 kleine Verbesserungen ergeben später eine sichtbare beschleunigung
Aber das mit den Pointern bei Sprites verstehe ich nicht.
HINWEIS: Im ganzen Spiel veränder ich bei keinem Sprite die Farbe.
Verfasst: 01.02.2006 09:49
von SDX
STARGÅTE hat geschrieben:erstmal danke für die Beschleunigungshinweise
obwohl ich mit der Array(360) für sin und cos überhaupt nicht zufrieden bin. Ich finde es besser wenn ich das direkt berechne außerdem muss ich doch wenn ich ein Array nehme erst int() benutzen oder ?
weil meine winkel meisten im 1/10 bereich sind...
Um die Genauigkeit zu verbessern, bzw. diese Methode erst überhaupt sinnvoll zu machen sollte man die Werte vorher mit 100 multiplizieren und beim benutzen wieder durch 100 teilen (bzw. mit 0.01 multiplizieren

).
STARGÅTE hat geschrieben:...StartDrawing() benutze ich nur im Menü aber im Spiel habe ich inzwischen alles rausgenommen das wusste ich schon.
STARGÅTE hat geschrieben:...Das X*0.01 schnelle ist ist mir auch schon aufgefallen aber ist es wirklich ausschlaggebend

? Klar auch 100 kleine Verbesserungen ergeben später eine sichtbare beschleunigung

Jup...
STARGÅTE hat geschrieben:...Aber das mit den Pointern bei Sprites verstehe ich nicht.
HINWEIS: Im ganzen Spiel veränder ich bei keinem Sprite die Farbe.
Also das mit den Sprites war nur ein Beispiel von mir, wo ich gemerkt habe, daß wenn man via Pointern und direktes schreiben in den Speicher einiges an Zeit sparen kann.
Hier mal ein "Bauhof" aus meinem Spiel... andere Gebäude hatte ich noch nicht

Eventuell werde ich jetzt weitermachen mit meinem Spiel. Ich hoffe, ich kann dann auf Dein Wissen zurückgreifen, was die Programmierung von RTS betrifft.
Verfasst: 01.02.2006 11:31
von Sylvia
Ich bin zu blöd. Das Spiel verstehe ich nicht ! Keine Ahnung was ich tun muss.
Nirgendwo eine "So gehts"-Readme.
Kann jemand mal das Spiel erklären ? Und wenn möglich so, dass es auch jemand
versteht, der noch nie so ein Spiel gespielt hat.
