Fragen über Fragen...

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Terror-State

Betreff: Fragen über Fragen...

BeitragFr, Mai 12, 2006 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
manche tuen weh...
Hier mal eine kleine Sammlung der Sachen die mich beschäftigen. wär cool wenn ihr mir was beantworten könntet, sofern ihr es wisst. bitte vor dem hintergrund eines actionlastigen 3D-UDP-Games betrachten

--------------------------------------

1.)Float# oder Integer%/10.0
Was ist schneller? wenn ich float übergebe und gleich benutze oder integer übergebe und dann dividiere?

--------------------------------------

2.) Dim mit id empfehlenswert?
Ich neige dazu Alles mögliche zu gruppieren
z.B.
Player(X,0) Art
Player(X,1) MainPivot
Player(X,2) Spielfigur
Player(X,3) Drehpivot
Player(X,4) DrehWinkel
Player(X,5) Speed
...

teilweise sind es bis zu 400 Felder pro Dim.
Hab ich da längere (langsamere) zugriffsgeschwindigkeiten als auf variablen?

--------------------------------------

3.) Case gruppieren?
Is es besser gleiche Cases zu gruppieren und dann möglicherweise einige IF-Schleifen zusätzlich in Kauf zu nehmen:
z.b.
Case 1,2:
if I = 2 then....

oder besser jeden Case einzeln, was dann aber zu mehr speicherbedarf führt

(ungefähr 30 Case-Zweige je 20 Zeilen)

--------------------------------------

hab nochmehr fragen aber wär erstma cool wenn ich hierzu einige antworten kreigen könnte!
danke leute!
Ob friedlich oder militant, wichtig ist der Widerstand

Markus2

BeitragFr, Mai 12, 2006 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
1.)Float# oder Integer%/10.0
beim Int führst du einen Rechenschritt aus das bremst .
Beim vergleichen drauf achten das du gleiche Typen benutzt weil
die sonnst umgewandelt werden müssen .

2.) Dim mit id empfehlenswert?
Nur Variablen statt Array ist schneller weil beim Array erstmal die Position im
Speicher errechnet werden muß .
Ist aber Schnick Schnack weil es dein Programm unübersichtlich macht und
du dafür mehr Code braucht für Vergleiche .
Kommt also auf den Zweck an .

3.) Case gruppieren?
macht wenig Sinn Case 1,2 zu benutzen und dann dazu If Then
Ich würde sagen die meist benutzen nach oben setzen weil die
Bedingung dann schneller eintritt und weniger verglichen werden muß .

Vincent

BeitragFr, Mai 12, 2006 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn wir einmal dabei sind:
Global definierte Variablen sind "schneller" als lokale ...
Gott ist nicht mit uns ... weil er mit Idioten keine Gnade kennt !

stfighter01

BeitragFr, Mai 12, 2006 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
meine grundlegenden tipps.

hör auf mit codeoptimierung die dein programm verwüstet.
übergib einfach floats wenn du floats hast.
mit integer zu rechnen bringt nur dann etwas, wenn dus durchgängig machen kannst. die zeiten wo ein PC ohne coprozessor beim float berechnen in die knie geht sind vorbei.

dim mit ID?
k.a. was du meinst aber wenn du verschiedene werte hast die zusammen gehören dann pack sie auch zusammen in ein array.
halte dein programm dynamisch erweiterbar wenn es geht, verwende types.

case gruppieren?
kann sinnvoll sein wenn du in beiden fällen ohnehin gleiche schritte machst.
merke: schreibe niemals etwas doppelt, das muss so gut wie niiiiieeeeeeee sein. versuche alles zusammenzufassen, mach unterprogramme gruppiere und sortiere Wink

z.b.:
gut:

select wert
case 1,2
musssowieso = 10 + aucheinwert
das_mussauchsein( blabla )
if wert = 1.
... tue ...
else.
... tue ...
endif
endselect.

schlecht:

select wert
case 1
musssowieso = 10 + aucheinwert
das_mussauchsein( blabla )
...tue...
case 2
musssowieso = 10 + aucheinwert
das_mussauchsein( blabla )
...tue...
endselect.



btw. das ist MEINE vorstellung von gut und schlecht.
damit verlierst du zwar ein paar nanosekunden, aber du gewinnst u.u. tage an entwicklungszeit.
jede kopie eines codes erzeugt eine fehlerquelle die schwer zu lokaliseren ist.
hast du darin einen fehler eingebaut, und kommst erst später darauf, nachdem du das stück code schon unzählige male kopiert hast, dann hast du schon die fehler alle mitkopiert.
wenn du den fehler dann auch findest, bedeutet das nicht das du den fehler überall gefunden hast.

eine doppelte case verschachtelung mag performancevorteile bringen ( aber wenn dann nur minimalst )
zudem bläst es deinen code fast aufs doppelte auf und macht ihn unübersichtlich ende nie.

bevor ihr überhaupt ans optimieren denkt, schreibt mal das programm fertig.
zuerst muss es funktionieren, schneller machen kann man es nachher noch immer.


(mich schüttelts immer bei solchen fragen)
mfg stfighter
Denken hilft!

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Mai 12, 2006 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
stfighter01 hat Folgendes geschrieben:
zuerst muss es funktionieren, schneller machen kann man es nachher noch immer.

Redest von wertvollen Tagen, die man einsparen kann, und dann sowas? Very Happy

Also wenn ich zwei Möglichkeiten hab, dann nutze ich doch die die schneller/besser ist, auch wenn sie eine Zeile Code mehr braucht, oder nicht?

Aber sonst kann ich dir nur zustimmen Wink

MfG
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Christoph

BeitragFr, Mai 12, 2006 15:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe schon, hier wird ein Programm geschrieben, das um jede
Millisekunde kämpft... Very Happy

Terror-State

BeitragFr, Mai 12, 2006 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
erstmal herzlichen dank für die schnellen antworten ^^

aber zu 1.) muss ich sagen:
ich denke die zusatzzeit für den rechnen schritt ist minimal im vergleich zu dem übergeben eines float wertes.... ich sag nur 12.4892083.... das zu übergeben dürfte nach meinem verständnis länger dauern als die teilung durch 10

2.) steigt die zeit fürs finden der richtigen position proportional zur größe des feldes? oder is Dim map (2) genauso schnell wie Dim Player(4,60)
bzw die eindimensionale version davon.

Edit:
Zitat:
Ich sehe schon, hier wird ein Programm geschrieben, das um jede
Millisekunde kämpft...

haste prinzipiell recht. wenn man es aber erstmal einmal richtig lernt fällt es fürs nächste mal leichter oder?
Ob friedlich oder militant, wichtig ist der Widerstand

Christoph

BeitragFr, Mai 12, 2006 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mal sowas gelesen über Speedgewinnung. Bin back in a minute.

EDIT:
Gefunden. In der Onlinehilfe. Geht unter Kurs 2D
Dann auf den untersten Eintrag :<Speedoptimierung>
Da steht auch einiges. Wink
Hier kann man es mit Internetverbindung ansehen

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group