Autor Beitrag
Ebil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Di 30.12.08 03:08 
Hi leute,
Einfache sache dachte ich... ist es aber wohl doch nicht.
Ich habe mit der Andorra2D engine ein paar einfache 1px große ellipsen erstellt, die sollen der Maus folgen, allerdings weiss ich nicht wie ich es hinkriege.
Es ist kein Problem die Punkte zufällig durch den Raum hüpften zu lassen, aber ich bin echt schlecht in Mathe, will aber den Kugeln gezieltere Bewegungen beibringen, Beispiele:
Die Kugeln Folgen der Maus.
Die Kugeln Drehen Kreise.

Aber wie mache ich sowas?
Im moment hab ich das hier, das sie nicht aus den fenster fallen und sich mit gleichmäßiger geschwindigkeit bewegen (timegap)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  
  if (PosX > frmMain.Width)   or (posX < 0)  then XSpeed := -XSpeed;
  if (PosY > frmMain.Height-60)  or (PosY < 0)  then YSpeed := -YSpeed;
  posX := posX+(Xspeed*(PerCounter.TimeGap/1000));
  posY := posY+(Yspeed*(PerCounter.TimeGap/1000));


Wie gesagt, da ist keine spur von intelligenter bewegung hinter.
Hab mir irgendwas gedacht mit einen "imaginären" Kreis/linie erstellen und die punkte daran entlang laufen lassen, aber keien ahnung wie...

Ebil
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 30.12.08 04:54 
also einen Kreis bekommst du so(keine ahnung von der andorra syntax aber mal sehn ^^):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  
  if (PosX > frmMain.Width)   or (posX < 0)  then XSpeed := -XSpeed;
  if (PosY > frmMain.Height-60)  or (PosY < 0)  then YSpeed := -YSpeed;
  aFloat := aFloat + speed*(PerCounter.TimeGap/1000);
  posX := sin(aFloat);
  posY := cos(aFloat);

oder so ähnlich. musst mal ausprobieren ;)

Der maus hinterher fliegen tun sie so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
if PosX > Mouse.X then //wie auch immer du die maus bestimmst ;) 
  XSpeed := XSpeed - beschleunigung
else
  XSpeed := XSpeed + beschleunigung;

if PosY > Mouse.Y then
  YSpeed := YSpeed - beschleunigung
else
  YSpeed := YSpeed + beschleunigung;
posX := posX + XSpeed*(PerCounter.TimeGap/1000);
posY := posY + YSpeed*(PerCounter.TimeGap/1000);

Hierbei ist halt die beschleunigung irgendeine konstante.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Mi 31.12.08 01:01 
Naja das funkt soweit, auch wenns nicht so spektakulär ist :D
Ein problem hab ich aber noch, ich will die objekte in konstanter geschwindigkeit bewegen, allerdings geht das nicht wirklich.
wenn ich zb geschwindigkeit 100 mach, kann er sich gerade mal in 4 richtungen bewegen, allerdings soll die geschwindigkeit natürlich unabhängig von der richtung sein...
Wie wird sowas gemacht?

Ebil
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 31.12.08 01:19 
Da musst du mit dem Betrag eines Vektors rechnen: der ist definiert durch die die quadratwurzel der summe der koeffizienten im quadrat: sqrt(x^2 + y^2) und der muss dann 100 sein für eine konstante geschwindigkeit von 100. in diesem fall ist dein vektor der geschwindigkeitsvektor aus xSpeed und ySpeed.

Am besten gibst du zuerst einen geschwindigkeitsvektor an, der in die richtige richtung zeigt, dann normierst du ihn indem du die koeffizienten durch seinen betrag teilst, und dann multiplizierst du seine koeffizienten nochmal mit der gewünschten geschwindigkeit, dadurch bleibt seine richtung erhalten und sein betrag = geschwindigkeit.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Mi 31.12.08 01:58 
Oha ich glaub sogar es funktioniert :D (Hätte nicht gedacht das ich es hinkrieg, aber hast es echt gut erklärt).
Habe einen geschwindigkeitsVektor (denke ich mal) erstellt, und multipliziere ihn mit der gewünschten geschwindigkeit:

ausblenden Delphi-Quelltext
1:
2:
  XSpeed := geschwindigkeit*(XSpeed/(sqrt(Power(XSpeed,2) + Power(YSpeed,2))));
  YSpeed := geschwindigkeit*(YSpeed/(sqrt(Power(XSpeed,2) + Power(YSpeed,2))));



Und das wo ich doch so schlecht in mathe bin ^^

Denke damit bin ich erstmal für eine weile beschäftigt ;P

Ebil