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.12.2012, 13:54

Bewegung innerhalb eines Koordinatensystem zwischen 2 Koordinaten

Hallo Leute,



ich komme gerade nicht wirklich weiter, wäre super, wenn Ihr mir weiterhelfen
könntet.

(Link)




Und zwar habe ich ein Koordinatensystem, dass oben Links mit 0 beginnt.

Nun habe ich einen Startpunkt(50,1), und einen Zielpunkt(20,20), mein Startpunkt soll sich jetzt natürlich zum Zielpunkt bewegen.

Wie lässt sich das am besten realisieren (inkl. Geschwindigkeitsfaktor).

Danke schonmal für eure Hilfe.



MfG

Ghorki

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

17.12.2012, 14:11

Sichwort: Interpolation

Wo genau liegt das Problem? Was genau verstehst du unter einem "Geschwindigkeitsfaktor"?

3

17.12.2012, 14:21

Ich möchte, dass sich mein Startpunkt auf direktem Weg zum Zielpunkt bewegt, in einer Geschwindigkeit, abhänhig der int Variabel.

Mometan habe ich nur eine einfache Schleife die überprüft, ob der x Wert stimmt, wenn nicht, bewegt er sich 1 Pixel zur Seite und das gleiche auch für den y Wert.

Wie kann ich das nun erweitern bzw verändern, damit der Punkt sich auf direktem Weg zu dem Zielpunkt bewegt.

Käsekönig

1x Contest-Sieger

  • Private Nachricht senden

4

17.12.2012, 15:09

Du weißt die Entfernung in x-Richtung und du weißt die Entfernung in y-Richtung. Wenn du nun den Pythagoras anwendest, kommst du auf die "direkte" Entfernung. Nun weißt du, dein Ding bewegt sich x Entfernungseinheiten pro Sekunde. Das heißt, er bewegt sich genau um den Teil x/Entfernung Richtung Ziel. Das is jetzt ein Faktor, z.B. 0,1 oder 0,5 oder was dir auch immer dabei raus kommt, den multipliziert mit der x-Entfernung und y-Entfernung ergibt dir deine Bewegung in x-Richtung und deine Bewegung in y-Richtung.
Ist es das, wonach du suchst?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

17.12.2012, 15:10

Du kannst linear zwischen beiden Positionen interpolieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
vec2 lerp(const vec2& start, const vec2& end, float t)
{
  /*
  if (t < 0)
    return start;
  if (t > 1)
    return end;
  */
  return start + (end-start) * t; 
}


Der Parameter t liegt in Bereich 0 - 1, so das für t = 0 der Startpunkt, t = 0.5 der Punkt auf der halben Strecke zwischen Start- und Endpunkt (usw...) gewählt wird.
@D13_Dreinig

Geheim

Treue Seele

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

6

17.12.2012, 15:38

Du berechnest dir den Betrag zwischen den 2 Punkten und dividierst jede Komponente damit, damit
erhälts du den Einheitsvektor:

(Link)


(Link)

float Betrag = sqrt(pow(ZielPositionX - StartPositionX, 2) + pow(ZielPositionY - StartPositionY, 2));
X = (ZielPositionX - StartPositionX) / Betrag;
Y = (ZielPositionY - StartPositionY) / Betrag;

X und Y sind jetzt Werte zwischen -1 und +1, aber die Länge beträgt immer +1 ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

17.12.2012, 15:53

Einheitsvektor? Hat erstmal mit dem Problem nix zu zun, aber man kann's ja mal erwähnen... :rolleyes:
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]

Geheim

Treue Seele

Beiträge: 202

Wohnort: Salzburg

Beruf: Schüler

  • Private Nachricht senden

8

17.12.2012, 16:00

So hab ich seinen "Geschwindigkeitsfaktor" verstanden ;)

9

18.12.2012, 00:13

Soo, ich habe mich jetzt mal in die Theorie eingelesen und habe es mir auch erklären lassen,

nur scheitert es jetzt einwenig an der Umsetzung.


Um näher auf meinen Code einzugehen.

Wenn ich mein Smarthphone Display berühre, wird folgender Code aufgerufen:

C#-Quelltext

1
2
3
Main.class
 
Waffe.werfen(touchX, touchY);


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
28
29
30
31
32
33
34
35
Waffe.class
 
float targetX;
float targetY;
 
float x;
float y;
 
public static void werfen(float touchX, float touchY)
{
     targetX = touchX;
     targetY = touchY;
     wurfBool= true;
}
 
private void wurf()
{
     if(wurfBool == true)
     {
          
          // Code der die Waffe bewegen lässt
          x = 
          y =
 
          // Waffe neu Zeichnen
          getWaffe().setX(x);
          getWaffe().setY(y);
     }
}
 
// Dauerschleife
public void update()
{
     wurf();
}


Ich weiß auch nicht, wie ich den Richtungsvector mit einbringen muss...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

18.12.2012, 06:39

Vielleicht versuchst Dich erst einmal an etwas, was keine Mathematik benötigt, das ist scheinbar nicht so Deine Welt, obwohl Dir die Lösung ja schon fertig präsentiert wurde.
Übrigens wird es ohne einen Zeitstempel vermutlich nie sonderlich toll funktionieren.
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]

Werbeanzeige