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

FSA

Community-Fossil

  • Private Nachricht senden

11

04.06.2012, 17:35

Zitat von »timi19«

Zitat von »"BlueCobold"«

Ich würde es so machen:
NewObjectPos = ObjectPos + Normalize(CursorPos - ObjectPos) * MovementSpeed * FrameTime
Was heisst normalisieren?

Oh da fehlen aber 3D Mathematik Grundkenntnisse.
Vektornormaliesieren:
§ \frac{\overrightarrow {a}}{\left| \left| \overrightarrow {a} \right| \right|} = Normaliesiert \overrightarrow {a} §
EDIT: Da war jemand schneller -.-
EDIT2: Irgendwie is beim Zitieren was schiefgelaufen :thumbdown: Jetzt ist es verbessert ^^

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (05.06.2012, 13:49)


12

05.06.2012, 12:57

Noch mehr Geschmeidigkeit kriegst du mit beschleunigter Bewegung so ungefähr..
vo += n(posc - poso) * ao * t;
poso += vo * t;

wobei..
vo Geschwindigkeitsvektor Objekt
ao Beschleunigung
t Zeit / Frame
poso Ortvektor
posc Ortsvektor Cursor
n Verbindungsvektor normal

Je kleiner ao, desto weicher die Bewegung.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

13

05.06.2012, 14:07

Wobei das eine schlechte Idee ist, weil damit das folgende Objekt über die Zeit "unendlich" schnell wird.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

14

05.06.2012, 14:40

(sofern ich das richtig verstanden habe und es dem Gedanken entspricht, den ich auch beim Schreiben meines Beitrags hatte)
nein
was David_pb offenbar auch nicht verstanden hat:
das Objekt soll in dem Fall nicht in Richtung des Mauszeigers bewegt werden, sondern es soll in Richtung des Mauszeigers beschleunigt werden
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

15

05.06.2012, 15:00

Das ist ja etwas ganz anderes. Soll es eine Trägheit besitzen und Richtung Cursor beschleunigen oder soll es sich wirklich einfach nur Richtung Cursor bewegen?
"Cursor verfolgen" klingt für mich absolut nicht nach Trägheit und Beschleunigung, sondern simpel und einfach nur drauf zu bewegen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

16

05.06.2012, 15:19

übertriebenes Beispiel:
dir sagt jemand, du sollst eine bestimmte Person verfolgen (was du auch machst!)
würdest du dich einfach auf sie zu bewegen, bis du bei ihr bist?

und bevor du antwortest:
es kommt natürlich auf den Zusammenhang an
und da dieser Zusammenhang nicht weiter definiert wurde, habe ich in meinem ersten Beitrag verschiedene Möglichkeiten aufgezählt
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

17

06.06.2012, 00:05

Er wollte mehr 'Geschmeidigkeit' in die Bewegung und das kommt man mit obiger^ Rechnung schon hin, wenn ich unter Geschmeidigkeit mal 'keinen abrupten Richtungswechsel' verstehe. Da wächst auch nicht zügellos, denn Ausdruck n(posc - poso) * ao * t kann je nach Cursor-Objekt-Positionierung positiv oder negativ sein.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

06.06.2012, 06:47

Dennoch wächst die Geschwindigkeit bei diesem Beispiel konstant an. Weder ist da eine Bremsung drin, noch eine obere Schranke für die Geschwindigkeit.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

19

06.06.2012, 13:32

Ja, sie wächst (warscheinlich zu sehr als das eine brauchbare Lösung sein könnte), aber nicht bis unendlich, es sei denn ich habe einen unendlich großen Bildschirm auf dem ich meinen Cursor unendlich schnell bewege. Das Objekt steuert ja immer mit konstanter Beschleunigung auf den Cursor zu. Die Bewegung ist noch sehr verbesserungsfähig, obere Schranke und Abbremsung auf 0, wenn das Objekt am Ziel ankommt wäre lustig. :)

20

07.06.2012, 13:24

Hier hatte ich den Spaß das etwas auseinanderzudröseln, ist aber dasselbe wie im Bsp. oben
UND jetzt aber mit Schranke..

C-/C++-Quelltext

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
//Verbindungsvektor Cursor-Objekt..
dy = yc - yo;
dx = xc - xo;
//Vektor-Betrag..
b = sqrt(pow(dx,2)+pow(dy,2));
//normalisierte Komponenten..
n_x = dx / b;
n_y = dy / b;
//Geschw.-änderung / Frame, t = Framezeit, a = konst. ..
dv = a * t;
//Geschw.-änderung der Komponenten
dv_x = dv * n_x;
dv_y = dv * n_y;
//Speedvektor..
vx += dv_x;
vy += dv_y;
//Maximalspeed, maxv = konst.
maxv_x = maxv * n_x; 
maxv_y = maxv * n_y;
//Speedschranke.. 
if(vx > maxv_x) vx = maxv_x;
if(vx < -maxv_x) vx = -maxv_x;
if(vy > maxv_y) vy = maxv_y;
if(vy < -maxv_y) vy = -maxv_y;
//Objekt-Position..
xo += vx * t;
yo += vy * t;

Werbeanzeige