Winkel ausrichten nach speed

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ToeB

Betreff: Winkel ausrichten nach speed

BeitragDi, Jun 24, 2008 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab zwei Speed-Variablen, speed_x und speed_y und ich habe wei Position-Variablen x und y. Ich setzt die jetzt immer x und y Auf MouseX/Y und speed_x/y auf MouseX/YSpeed. Aber wie errechne ich jetzt, wie der winkel sein muss, wenn ich mit der Maus herum fahre, und wie errechne ich eine SpeedVariable, die ich zu dem winkel dazu oder abziehen kann, damit er sich bei ruhestand der Maus wieder auf 90° einpendeln kann ?

Danke schonmal...


mfg ToeB

EDIT:
Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Type kett
   Field x#,y#,w#,r#,l,speed#,anz,cas,w2#
End Type

Global Kette1 = CreateKett(400,300,20)
Global ket[10]
ket[0] = AddKett(Kette1,20)
For i = 1 To 10
   ket[i] = AddKett(ket[i-1],20)
Next

MoveMouse 420,320

Global FPS[2]

Repeat
   If FPS[0] <= MilliSecs() FPS[2] = FPS[1]:FPS[1] = 0:FPS[0] = MilliSecs() + 999
   Text 0,0,FPS[2]
   SetKettPos(Kette1,MouseX(),MouseY())
   UpdateKett()
   Flip
   Cls
   FPS[1] = FPS[1] +1
Until KeyHit(1)
End


Function CreateKett(x#,y#,r#)
   kett.kett = New kett
   kett\x = x
   kett\y = y
   kett\r = r
   kett\w# = 90
   kett\l = 0
   kett\anz = 0
   Return Handle(kett.kett)
End Function


Function AddKett(Hand,r#)
   kett2.kett = Object.kett(Hand)
   kett.kett = New kett
   kett\x = kett2\x+Cos(kett2\w)*kett2\r
   kett\y = kett2\y+Sin(kett2\w)*kett2\r
   kett\r = r
   kett\w = 90
   kett\l = Hand
   Return Handle(kett.kett)
End Function

Function UpdateKett()
   For kett.kett = Each kett
      la.kett = Object.kett(kett\l)
      If la.kett <> Null
         kett\x = la\x+Cos(la\w)*la\r
         kett\y = la\y+Sin(la\w)*la\r
         kett\w = la\w
         kett\w2 = la\w2
      Else
         Text 1,15,kett\speed
         Text 1,30,kett\w
      EndIf
      kett\speed = kett\speed * 0.1
      kett\speed = kett\w2-kett\w
      kett\w = kett\w + kett\speed*0.03
      Line kett\x,kett\y,kett\x+Cos(kett\w)*kett\r,kett\y+Sin(kett\w)*kett\r
   Next
End Function


Function SetKettPos(Hand,x#,y#)
   kett.kett = Object.kett(Hand)
   If kett\l = 0
      ox# = kett\x
      oy# = kett\y
      kett\x = x
      kett\y = y
      If ox <> x And oy <> y
         kett\w2# = ((-ATan2(ox-x,oy-y)+450) Mod 360)
      Else
         kett\w2 = 90
      EndIf
   EndIf
End Function


Warum funzt das nicht ??


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jun 24, 2008 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Mark hat es und sehr einfach gemacht, indem er Atan2 erstellte.

Für eine Kette muß jedes Kettenglied auf die Position der maximal beiden benachbarten reagieren. Eine programmierte ''Kette'' also. Das ganze kannst du dir auch hier selbst ansehen, wenn du Blitz3D hast. Das Beispiel Physix, rope testing.bb sollte da erstmal weiter helfen. Oder su schaust dir mal folgenden Code an:

Code: [AUSKLAPPEN]
Graphics 800,800,0,2
SetBuffer BackBuffer()

q%=0;Allgemeine Schleifenvariable
ln#=20;Länge der einzelnen Kettenglieder
st%=20;Gesamtanzahl der Kettenglieder
s1#=0;Ist/länge des aktuellen Kettenglieds
s2#=0;Soll/länge des aktuellen Kettenglieds
dx#=0;Zwischenvariable für Phytagoraz
dy#=0;Zwischenvariable für Phytagoraz
wk#=0;Winkel des aktuellen Kettenglieds
Dim xp#(st)   ;X-Position
Dim yp#(st)   ;Y-Position
Dim x1#(st)   ;X-1.Zwischenposition
Dim y1#(st)   ;Y-1.Zwischenposition
Dim xg#(st)   ;X-Geschwindigkeit
Dim yg#(st)   ;Y-Geschwindigkeit
hh#=2 ;Steifigkeit einzelner Glieder

;Mausposition auf mitte des Bildschirmes
MoveMouse 400,200

;Kettenposition auf mitte des Bildschirmes
For q=0 To st
 xp(q)=400
 yp(q)=200+q*ln;(q Mod 2)*ln
 x1(q)=xp(q)
 y1(q)=yp(q)
Next




While Not KeyHit(1)

 ;Erstes Kettenglied auf Mausposition setzen
 xp(0)=MouseX()
 yp(0)=MouseY()

For w=1 To 20
 xp(0)=MouseX()
 yp(0)=MouseY()

 For q=0 To st-1
  wk=(ATan2(yp(q)-yp(q+1),xp(q)-xp(q+1)))Mod 360
  dx=(xp(q+1)+Cos(wk)*ln)-xp(q)
  dy=(yp(q+1)+Sin(wk)*ln)-yp(q)
  xp(q+1)=xp(q+1)-dx/2.0
  yp(q+1)=yp(q+1)-dy/2.0
  xg(q+1)=xg(q+1)-dx/2.0
  yg(q+1)=yg(q+1)-dy/2.0
  xp(q)=xp(q)+dx/2.0
  yp(q)=yp(q)+dy/2.0
  xg(q)=xg(q)+dx/2
  yg(q)=yg(q)+dy/2
 Next
Next

 For q=1 To st
  yg(q)=yg(q)+.02
  xg(q)=xg(q)*.999
  yg(q)=yg(q)*.999
  xp(q)=xp(q)+xg(q)
  yp(q)=yp(q)+yg(q)
  Color 120+(q Mod 2)*120,0,0
  Line xp(q),yp(q),xp(q-1),yp(q-1)
 Next

 ;Cursorspielerei
 If KeyDown(203) xg(st)=xg(st)-1
 If KeyDown(205) xg(st)=xg(st)+1
 If KeyDown(200) yg(st)=yg(st)-1
 If KeyDown(208) yg(st)=yg(st)+1

 ;Mausposition zeichnen
 Color 200,200,200
 Oval xp(0)-4,yp(0)-4,9,9,0

 ;Standardkramm
 Flip
 Cls
Wend
End


Dieser ist von mir aber vor über 2, 1/2 Jahren programmiert worden. Das soll heissen, dass ich jetzt sicherlich viele Sachen ganz anders machen würde. Sicherlich auch effektiver.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group