gleichmäßige Bewegung bei Waypoints

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen

PhillipB

BeitragSa, Mai 07, 2011 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wir kennen uns zwar aber wir arbeiten nicht zusammen.

Aber er hat mir eh gesagt das er kein Internet hat momentan.Aber ob es für ihn geklärt ist müsste ich ihn mal fragen wenn ich mal mit ihm telefoniere (eher selten).

Edit: Sein internet ist sehr instabiel!
 

Cedric30003

BeitragSa, Mai 07, 2011 23:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Internet funktuiniert endlcih wieder einigermaßten (hoffe auch dass das so bleibt)

Ich habe die BEwegung jetzt einigermaßten hinbekommen.
Allerdings weiß ich jetzt nicht wie ich diese variabel machen kann, dass sie z.B. aus einer Textdatei englesen werden mit ReadLine.

Es müsste ja der Theorie nach gehen, mit, Wenn Punkt errreicht, dann Nächsten Punkt auslesen und diesen dann wieder berechnen, und dann Bewegung und dann immer wieder.
Könnte mir jemand vielleicht behilflich sein, das zu Code zu bringen?
Ich habe schon Anfänge versucht, aber irgendwie kommt da nichts wirklich funktuinierendes zustande.
Und 2. müsste auch, wenn der letzte Punkt erreich wurde, dass das ganze dann stehen bleibt, weil sonst gibt es ja keinen "Ausweg" mehr Very Happy

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Global cam1=CreateCamera()
PositionEntity cam1,0,5,-5
TurnEntity cam1,45,0,0

Global erreicht = 1 ; 1 = erreicht /// 0 nciht erreicht
Objekt = CreateCube ()
PositionEntity Objekt,0,0,0

spped# = 0.01 ;Input ("Geschwindigkeit:/")

While Not KeyHit(1)
   
   
   Include "Kamera.bb"
   
   If erreicht = 0 Then
   MoveEntity Objekt, EV_X * spped#, EV_Y * spped#, EV_Z * spped#
End If

If EV_X * spped# > x2# And EV_Y * spped# > y2# And EV_Z > spped# = z2# Then
   erreicht = 1
End If

If erreicht = 1 And KeyDown (20) Then
   erreicht = 0
   x1# = 0
   y1# = 0
   z1# = 0
   
   x2# = Input("X2:/")
   y2# = Input("Y2:/")
   z2# = Input("Z2:/")
   
   
   
   Distanz# = Sqr((x2#-x1#)^2+(y2#-y1#)^2+(z2#-z1#)^2)
   EV_x = (x2#-x1#)/Distanz#
   EV_y = (y2#-y1#)/Distanz#
   EV_z = (z2#-z1#)/Distanz#
End If
   


   UpdateWorld
   RenderWorld
   
   Text 100,10, "x2:/      " + x2#    
Text 100,20, "y2:/      "  + y2#
Text 100,30, "z2:/      "  + z2#
Text 100,40, "Erreicht:/" + erreicht
Text 100,60, "EV_X * spped# " + EV_X * spped#
Text 100,70,"EV_Y * spped# " + EV_Y * spped#
Text 100,80,"EV_Z * spped# " +EV_Z * spped#
   
   Flip
Wend
End


Wie setze ich das jetzt um?

Vielen Dank im Voraus

Mit freundlichen Grüßen aus Kiel

Cedric
Windows 7 Enterprise (x64) | AMD Athlon II X4 620 (4x2,61GHz) | 8GB RAM | nVIDIA GeForce 9500GT (1024MB)

Xeres

Moderator

BeitragSa, Mai 07, 2011 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Tippe eine Textdatei z.B.:
Code: [AUSKLAPPEN]
10, 20, 15

Lade die Datei mit Readfile. Lade die Zeile(n) mit Readline. Dann separierst du alle Koordinatenteile mittels instr, mid usw. und speicherst das ganze in einen Type. CloseFile nicht vergessen.

Das solltest du wirklich selbst hin bekommen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Cedric30003

BeitragSo, Mai 08, 2011 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, ich hatte mich vllt ein wenig doof ausgedrückt, das reinladen hatte cih ja schomal nen Thread gemacht (war auch erfolgreich)

Das mit Instr war mir zwar noch nicht bekannt, aber man lernt ja nie aus Smile

Also das mit der Type, mach ich jetzt beispielsweise so:

Code: [AUSKLAPPEN]

File = ReadFile("C:/Applications/test.txt")
Type Koordinate
Field ReadLine(File)  ;x-koordinate
Field ReadLine(File)  ;Y-kkordinate
Field ReadLine(File)  ;z-kkordinate
End Type
CloseFile File


Rischtig?

Wenn ja, wie lese ich das dann genau aus der Type aus, weil aus dem Tut werde ich nicht so ganz schlau. (Aliens)

Wenn nicht, was is denn da falsch?
Windows 7 Enterprise (x64) | AMD Athlon II X4 620 (4x2,61GHz) | 8GB RAM | nVIDIA GeForce 9500GT (1024MB)

Xeres

Moderator

BeitragSo, Mai 08, 2011 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, du verstehst offenbar noch nicht, wie Types funktionieren. Ich bin aber zuversichtlich, dass es mittlerweile genug Tutorials dazu gibt Arrow Forensuche.
Am besten kümmerst du dich erst mal um die strukturellen Grundlagen bevor du den Schritt weiter gehst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Cedric30003

BeitragSo, Mai 08, 2011 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So, habe das nun endlich kapiert mit den Types.

Nun sollen also X/Y/Z Achsen in Types eingefügt werden??
Windows 7 Enterprise (x64) | AMD Athlon II X4 620 (4x2,61GHz) | 8GB RAM | nVIDIA GeForce 9500GT (1024MB)

count-doku

BeitragSo, Mai 08, 2011 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja.

Du hast also deinen Waypoint Type
BlitzBasic: [AUSKLAPPEN]
Type TWaypoint
Field x#
Field y#
Field z#
Field ID ; Zum Durchnummerieren
End Type

Dann liest du halt deine Datei ein, und erstellst pro Zeile einen neuen Type-Eintrag
in den du die Koordinaten reinpackst. Die ID erhöst du einfach immer um 1.
Danach bewegst du halt dein Objekt von seinem Startpunkt, zu den Koordinaten auf WayPoint 1 dann nach Waypoint 2 usw...

Am Ende prüfst du ob der Waypoint der Letzte ist (Last) und fängst wieder von vorne an.
Zum Ausrichten nimmst du halt PointEntity oder AlignToVector

mfg,
count-doku

EDIT:
Beispiel:
BlitzBasic: [AUSKLAPPEN]
Type TWaypoint;Waypoint Type zum Speichern der WPs
Field x#
Field y#
Field z#
Field ID
Field entity
End Type

Graphics3D 800,600,0,6
SetBuffer BackBuffer()
Local Wp.TWaypoint
SeedRnd 4660
;Zufallsgenerierte WPs
For i=0 To 10
Wp.TWaypoint=New TWaypoint
Wp\x=Rand(-25,25):Wp\y=Rand(0,10):Wp\z=Rand(-25,25)
Wp\ID=i
Wp\entity=CreateCone()
PositionEntity Wp\entity,Wp\x,Wp\y,Wp\z
Next
;-------------
;Per Datei lesen: ( PRO ZEILE EIN Wp. FORMAT x,y,z
;Local wpFile=ReadFile("Wps.txt")
;While Not Eof(wpFile)
; zeile$=ReadLine(wpFile)
; komma1%=Instr(zeile,",")
; komma2%=Instr(zeile,",",komma1+1)
; DebugLog komma1
; DebugLog komma2
; x$=Left$(zeile,komma1-1)
; y$=Mid$(zeile,komma1+1,komma2-komma1-1)
; z$=Mid$(zeile,komma2+1)
; DebugLog x
; DebugLog y
; DebugLog z
; Wp.TWaypoint=New TWaypoint
; Wp\x=Int(x):Wp\y=Int(y):Wp\z=Int(z)
; Wp\ID=i
; Wp\entity=CreateCone()
; PositionEntity Wp\entity,Wp\x,Wp\y,Wp\z
; i=i+1
;Wend
;CloseFile wpFile
;-------------

CreateLight();Licht damit man Konturen hat
Local camera=CreateCamera(),cube=CreateCube(),cubeID;Kamera, NPC Würfel, Aktueller WP des Würfels
PositionEntity camera,0,20,-35;Kamera so positionieren, das die ganze Szene sichtbar ist
PointEntity camera,cube ; "
Local timer=CreateTimer(30) ;Timer 30FPS
While Not KeyHit(1)
Cls
;NPC Updaten
For Wp.TWaypoint=Each TWaypoint ;Alle WPs durchgehen
If Wp\ID=cubeID ;Wenn der WP der aktuelle ist
PointEntity cube,Wp\entity ;Dahin den Würfel ausrichten
End If
If MeshesIntersect(cube,Wp\entity) ;Wenn Würfel bei WP ankommt / in berührt.
;Hier ginge auch Collisions oder eine einfach Koordinaten abfrage.
cubeID=Wp\ID+1;WP einen Weiterschalten
WpL.TWaypoint=Last TWaypoint ;Letzten WP wählen
If WpL\ID<cubeID Then cubeID=0 ;Prüfen ob aktueller WP hinter Letztem ist, wenn ja, von vorne anfangen

End If
Next
MoveEntity cube,0,0,0.2;Würfel bewgen
RenderWorld()
For Wp.TWaypoint=Each TWaypoint ;Alle Waypoints durchgehen und ID anzeigen -> Debugzwecke...
Color 255,0,0
CameraProject camera,Wp\x,Wp\y,Wp\z
Text ProjectedX(),ProjectedY(),Wp\ID
Next
WaitTimer timer
Flip 0
Wend
End

Gehe zu Seite Zurück  1, 2, 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group