2D-Spiel Fragen und Hilfe bei Programmierung

Ich glaub ich werde noch eine impuls Variable in die Klasse integrieren, die sich je nach Winkel ändert und dann die Geschwindigkeit modifiziert, bevor sie wieder zurückgesetzt wird.
 
Wenn du viele Partikel/Objekte simulieren willst, verabschiede dich von ooP. Das bricht dir schnell das Genick, was die Performance betrifft, wenn du da für jedes Partikel ein eigenes Objekt erzeugst.

Arbeite mir structs of Arrays. Das ist auch völlig natürlich in der Implementierung.
 
Für mein fertiges Spiel will ich bei maximal 5 Bällen bleiben.
Ich möchte das genze halt möglichst einfach halten.
Ich hab auch keinen Plan, wie ich das ganze mit einer variablen Anzahl an Bällen machen soll, deshalb mach ich das jetzt erstmal mit 2 Bällen.
 
Ok, noch 2 Fragen: Gibt es eine möglichkeiut, mit Vektoren zu rechnen?

Kann ich irgfendwie dem "Ball" einen Kreis zuweisen?
 
Wie willst du sonst rechnen? :ugly:

Arrays sind Vektoren!

Die Arithmetik dahinter musst du natürlich selbst schreiben, aber das ist meist trivial.

Ich mach mal ein Beispiel. Du hast 2 Vektoren der Länge n=3, die wie folgt aussehen: v1=1,2,3 v2=3,2,1 und eben ein Ergebnisvektor ve=0,0,0 dann kannste das wie folgt machen:

Code:
int n=3;
int v1[3]={1,2,3};
int v2[3]={3,2,1};
int ve[3]={0,0,0};


for(int i=0; i<n; i++){
ve[i]=v1[i]+v2[i];
}

Und das wars dann auch schon. Das sollte dir aber klar sein, wie so etwas geht. Wenn nicht, lass das Projekt lieber noch eine weile liegen und kümmere dich eher um solche Grundlagen. :daumen:
 
In dem Programm wird ja jede Stelle des Vektors einzeln addiert (bzw. hier nur die o (erste) Stelle). Gibt es nicht einen Befehl, mit dem ich sowas wie v3=v1+v2 schreiben kann und dann alle 3 Stellen addiert hab (Für was ist eigentlich die Bibliothek vector da?)?
 
Die Erweiterung vec<> ist dafür da, dass du die Vectoren dynamisch vergrößern und verkleinern kannst meines Wissens nach. Auch wird einiges im Hintergrund bei mehrdimensionalen Vectoren gemacht.

Ich hab mit vec aber noch nichts brauchbares gesehen. Jeder der das verwendet hat, war immer langsamer, als meine Implementierung des Problems.

Schau dir aber am Besten einfach die man-page dazu an. Dann weißte genau was das kann und was nicht.:daumen:
 
Ok, dann werde ich es nach dem Schema versuchen, alle Dimensionen einzeln zu Verrechnen, so wie du es getan hast.
 
Naja, du kannst auch SSE nutzen, oder AVX, dann kannste du mehrere Teile gleichzeitig rechnen. Obs aber den Aufwand wert ist, ist zu bezweifeln, zumal je nach Compiler, der dir eh SSE/AVX Code draus bastelt. Ist halt nur nicht ganz so performant, als wenn du das selber machst. Da musst du dann aber selbst in die SSE/AVX Register rein schreiben. Hab ich jetzt 1 mal gesehen, und mir gesagt: "Neee, muss nicht unbedingt sein..." :D

Wenn mans wirklich performant will, kann man das machen, aber es ist halt schon etwas Mehraufwand.
 
Ich meinte nur von der Syntax her, ich glaub um die Performance muss ich mir wenn überhaupt erst am Schluss Sorgen machen.
 
Warum wird bei mir immer beim = gemeckert?

Code:
[FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]
// Ball Simulation.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"stdafx.h"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]<iostream>[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]namespace[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] std;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] _tmain([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] argc, _TCHAR* argv[])
{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]// Klasse erstellen[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]struct[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] kugel
{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] position [2] = {0,0};
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] geschwindigkeit [2] = {0,0}; 
}ball1, ball2;

[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]return[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] 0;
}
 
[/SIZE][/FONT][/SIZE][/FONT]
 
In structs kannst du die Wertzuweisung bei der Deklaration nicht machen (jedenfalls in C# nicht und dann wird in C++ wohl ähnlich sein^^). Und zieh mal das ganze struct-{...} aus der Methode raus; oder ist das gewollt ?! :what:
 
Du kannst structs nicht schon bei der Definition initialisieren.
Code:
struct TheStruct
{
    int a = 4; // das geht nicht!
    int b = 3; // s. o.
};

// das hier habe ich aber schon mal gesehen (meine ich zumindest ^^):
TheStruct s = {4, 3};

Und wie fadade schon sagte, die struct-Definition in die Funktion zu packen sieht mir auch was komisch aus ;-)
 
Und wie fadade schon sagte, die struct-Definition in die Funktion zu packen sieht mir auch was komisch aus ;-)

Ist aber möglich. Auch das "struct {...} variable1, variable2;" ist in C/C++ gültig.
Du kannst aber nicht innerhalb der Deklaration von einem struct Werte zuweisen. Wenn du den struct-members Standardwerte verpassen willst, kannst du 2 Sachen machen:
1) Du schreibst z.B. member_variable : 0; um die variable automatisch mit 0 zu initialisieren. Ist nicht offiziell im C-Standard enthalten, aber so gut wie jeder Compiler unterstützt dieses Feature. Wenn du von dieser Möglichkeit Gebrauch machst, werden alle Variablen ohne Standartwert mit 0 initialisiert, was bei größeren Arrays praktisch sein kann.
Empfehlen würde ich allerdings eher
2) C++ only: Du schreibst einen Konstruktor, der die member initialisiert. (Structs in C++ sind fast wie Klassen, nur dass, wenn nichts angegeben, alles public ist)
Code:
struct A
{
  int b;
  int c;
  A() : b(0), c(0) {}
}
 
Code:
/* [...] */
// das hier habe ich aber schon mal gesehen (meine ich zumindest ^^):
TheStruct s = {4, 3};
Der zweite Teil des Code-Schnipsel ist im ISO C++ erlaubt und auch gar nicht mal so selten, sofern man den Weg über'n Konstruktor umgehen möchte.
Und wie fadade schon sagte, die struct-Definition in die Funktion zu packen sieht mir auch was komisch aus ;-)
Nicht alltäglich, aber deswegen noch lange nicht komisch. ;-)
Je nach Anwendungsfall kann das Scopen von Structs schon einen gewissen Sinn haben.

So etwas ist mir durchaus schon über den Weg gelaufen: (Dass das shadowing von Typen mal'n ganz großes Übel ist, lassen wir bei Seite ;-))
Code:
typedef struct
{
    int k;
} A;

int f()
{
    typedef struct
    {
        int s, k;
    } A;

    A s = { 2,3 };
}
 
Was ist jetzt daran falsch?

Code:
[FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]
// Ball Simulation.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]"stdafx.h"[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]#include[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515][FONT=Consolas][SIZE=2][COLOR=#a31515]<iostream>[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]using[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] [/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]namespace[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] std;
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] _tmain([/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] argc, _TCHAR* argv[])
{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]// Klasse erstellen[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]struct[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] kugel
{
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] position [2];
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]int[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] geschwindigkeit [2]; 
}ball1, ball2;

[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000][FONT=Consolas][SIZE=2][COLOR=#008000]//Klasse initialisieren[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2]ball1.position [2] = {0,0};
[/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff][FONT=Consolas][SIZE=2][COLOR=#0000ff]return[/SIZE][/FONT][/SIZE][/FONT][/SIZE][/FONT][FONT=Consolas][SIZE=2][FONT=Consolas][SIZE=2] 0;
}
 
[/SIZE][/FONT][/SIZE][/FONT]
:hail:
 
Zurück