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

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

1

15.06.2003, 15:35

Bester Lösungsweg!

Hallo

Ich habe immer folgendes Problem, wenn ich etwas selber programmiere, hab ich nie eine Ahnung, ob das der beste Lösungsweg ist oder ich vermute bzw. weiß, dass es einen besseren Weg geben muss, da meiner viel zu lang bzw. kompliziert ist!
Zum Beispiel habe ich heute bei meinem MarioProjekt ein Brett programmiert, das langsam hinunterfällt, wenn Mario auf ihn steht. Bevor es ganz abstürtzt bei einer Höhe von 400, lass ich es ein paar mal blinken, damit der Spieler mitbekommt, das er schnellstens von dem Brett weg muss. Ich hab es einfach so gemacht:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
if(object->y>=330 && object->y<=340)
                {
                    object->Zeichnen=false;
                }
                else
                {
                    object->Zeichnen=true;
                }
                

                if(object->y>=350 && object->y<=360)
                {
                    object->Zeichnen=false;
                }
                else
                {
                    object->Zeichnen=true;
                }
        

                if(object->y>=370 && object->y<=380)
                {
                    object->Zeichnen=false;
                }
                else
                {
                    object->Zeichnen=true;
                }

                

                if(object->y>=390 && object->y<=400)
                {
                    object->Zeichnen=false;
                }

                if(object->y>400)
                {
                    object->y+=300;
                
                }



Der Code ist fast eine Seite lang, also viel zu lang und ich bin mir sicher, dass es eine viel schnellere und bessere Lösung gibt! Aber wie lerne ich das herauszufinden????

Danke

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

2

15.06.2003, 15:45

also, so wie ich das sehe, zeichnest du das Objekt nach 10 Pixeln nicht, dann wieder nach 10 Pixeln und so weiter. Wenn du z.B von dem Punkt, wo das Objekt ist den tiefsten PUnkt abziehst, wo das OBjekt sein kann, dann erhältst du eine Zahl, meinetwegen 20.

Diese Zahl teilst du durch 10. Wenn diese Zahl dann gerade ist(%-Operator!), dann zeichnest du es nicht. Wenn sie nicht gerade ist, dann ezichnest du es.

So etwa würde ich es machen. Du musst bei solchen Algorithmen immer nach gemeinsamkeiten suchen, die man mit wenigen Operationen beschreiebn, kann, also ob eine Zahl gerade oder nciht ist, z.b.

ABer die beste Methode etwas zu lernen, ist immer noch üben, denk ich mal.

Gruß, Maxi

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

3

15.06.2003, 15:58

ok, danke, ich werde es gleich mal ausprobieren! :)
Aber blinkt es dann nicht viel zu oft bzw. unregelmäßig?
Noch etwas, benötigt der %-Operator nicht zuviel Zeit?

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

4

15.06.2003, 16:01

wieso sollte es dann zu oft blinken? Es wird doh vorher ml durch zehn geteilt...

Von Performance-Sachen hab ich keine Ahnung...

Ich geh jetzt zum Rolling-Stones-Konzert *freu*

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

15.06.2003, 16:02

Ha ha, nein der %-Operator ist ziemlich schnell! Was zu viel Zeit benötigt, sind hunderte if-Abfragen! Außerdem sprechen wir hier von Zeitverlusten im Nanosekundenbereich, das ist total lächerlich, sich darüber Gedanken zu machen...

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

6

15.06.2003, 17:02

danke, ich kenn mich in Sachen Perfomance überhaupt nicht aus :)
Ich hab es jetzt so programmiert:

Zitat

if(temp->Typ==BRETT)
{
if(temp->y>330)
{
if((temp->y %20) <= 10)
{
temp->Zeichnen=true;
}else
{
temp->Zeichnen=false;
}
}
}


So finde ich jetzt den Code schon um einiges schöner! Gibt es Tuts über schönen Code bzw. eines über Perfomance?


@Maxi
Wünsch dir viel Spass beim Konzert ;)

7

17.06.2003, 19:32

Tutorials über Performance gibt es glaub ich nicht. Hab zu mindest noch keinen gefunden ;) Aber es gibt eine Reihe von Tools die einem Problemstellen im Code zeigen. In Game Programming Gems 1 ist auch ein Profiler beschrieben. Macht das selbe wie die Tools.

Für einen guten Programmierstil gibt es ein paar einfache Regeln.
1) Immer schön einrücken. VC++ unterstütz einem da Tatkräftig.
2) Sinnvolle Namen vergeben. Also kein Var2 oder so was
3) Dokumentationen und Komentare. Gewöhn dich direkt daran deinen Code zu Dokumentieren. Es wird die Später sehr viel Helfen.
4) Schreib nicht tausend dinge in eine Zeile. Die Funktionsparameter z.B. schreib ich immer in seperate Zeile. Dann kann man sich auch leicht ein Kommentar hinter dem Parameter schreiben.

Wenn man das einhält wird sich der Code schon übersichtlich gestallten ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige