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

1

17.05.2009, 02:02

Berechnung

moin,
es gibt ja solche spiele wo man mit pfeiltaste oben immer gas gibt und mit linke und rechte pfeiltaste rotiert.
dabei muss aber immer es so sein das mit pfeiltaste hoch nach vorne gefahren werden kann etc.

wie wird sowas berechnet?

mfg nekturion

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

2

17.05.2009, 02:12

Vektoren (Beschleunigungsvektor linear abhängig von Nach-vorne-Vektor)
<< an dieser Stelle ist eine Signatur verstorben >>

3

17.05.2009, 02:16

das das mit vektoren gemacht wird war mir vornerein klar
hättest du vll ein beispiel?

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

17.05.2009, 02:33

Pseudocode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Vektor vVorne; // Einheitsvektor
Vektor vPosition;
int nGeschwindigkeit = 10;

onLeftPressed
{
  vVorne.x = cos ((arccos (vVorne.x) + pi/10);
  vVorne.y = sin ((arcsin (vVorne.y) + pi/10);
}

onRightPressed
{
  vVorne.x = cos ((arccos (vVorne.x) - pi/10);
  vVorne.y = sin ((arcsin (vVorne.y) - pi/10);
}

onUpPressed
{
  vPosition += vVorne * nGeschwindigkeit;
}


So oder so ähnlich.
Alternativ einfach den Nach-vorne-Vektor mit einer Rotationsmatrix multiplizieren und skaliert mit einem Geschwindigkeitsfaktor zum Positionsvektor addieren.
<< an dieser Stelle ist eine Signatur verstorben >>

5

17.05.2009, 02:55

danke
aber irgendwie weiß cih jetzt nicht so genau wie ich das auf die sfml übertragen soll

6

17.05.2009, 06:33

Dir eine kleine Vector Klasse schreiben, falls SFML dies nicht schon hat und den Code von the[V]oid bei dir einfügen. Wie man einen Tastendruck in SFML abfängt weiß ich nicht.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

17.05.2009, 08:21

Zitat von »"the[V«

oid"]Pseudocode:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Vektor vVorne; // Einheitsvektor
Vektor vPosition;
int nGeschwindigkeit = 10;

onLeftPressed
{
  vVorne.x = cos ((arccos (vVorne.x) + pi/10);
  vVorne.y = sin ((arcsin (vVorne.y) + pi/10);
}

onRightPressed
{
  vVorne.x = cos ((arccos (vVorne.x) - pi/10);
  vVorne.y = sin ((arcsin (vVorne.y) - pi/10);
}

onUpPressed
{
  vPosition += vVorne * nGeschwindigkeit;
}


So oder so ähnlich.
Alternativ einfach den Nach-vorne-Vektor mit einer Rotationsmatrix multiplizieren und skaliert mit einem Geschwindigkeitsfaktor zum Positionsvektor addieren.


Wär es nicht besser, den Rotationsgrad zu speichern und dann bei jedem Tastendruck
diesen dann aktualisieren und vVorne komplet neu zu berechnen ?
dabei spart man sich dann 2 doch recht rechenaufwendige arccos bzw. arcsin...

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

8

17.05.2009, 10:23

Um Input mit mehreren Tasten gleichzeitig zu verarbeiten brauchst du auf jeden Fall RenderWindow::GetInput(). Die Events funktionieren dafür nicht. Für GetInput() sollte es Beispiele in den Tutorials geben.

9

17.05.2009, 12:31

also ich hab das jetzt so gemacht das wenn linke oder rechte pfeiltaste gedrückt wird der sprite sich rotiert
mit dem gas weis ich also nun nicht genau wie ichs anstellen soll

Werbeanzeige