Winkel ausrichten nach speed
Übersicht

![]() |
ToeBBetreff: Winkel ausrichten nach speed |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mark hat es und sehr einfach gemacht, indem er Atan2![]() 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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group