AlignToVector - Raketenwerfer schießt daneben
Übersicht

![]() |
Willi die RübeBetreff: AlignToVector - Raketenwerfer schießt daneben |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tagchen,
Ich brauchte mal eine kurze Verschnauffpause von meinem Editor und habe dann mal kurzerhand beschlossen einen Raketenwerfer mit Zielverfolgung, so wie z.B. in Half-Life 2 oder Crysis, zu programmieren. ![]() So weit so gut, allerdings verfehlt die Rakete ihr Ziel immer um ein kleines Stück, selbst auf linearer Ebene. Und irgendwie finde ich meinem Code einfach keinen Fehler. Vllt. findet ihn ja jemand von euch, hier ist er: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() cam = createcamera() PositionEntity cam, 0,0,-5 Type Tshot Field Hshot, Hpiv ; Hshot= Handle des Schussentity, Hpiv = Handle des Zielpivots End Type ;--------- Hauptschussentity EShot=CreateCylinder(30) ScaleEntity EShot,.1,.5,.1 EntityColor EShot, 25,25,150 HideEntity EShot ;--------- Raum cube = CreateCube() FlipMesh cube ScaleEntity cube,80,40,80 EntityPickMode cube,2 EntityShininess cube, 1 ;--------- Licht light = CreateLight(2) LightColor light,25,25,5 PositionEntity light,70,10,0 TurnEntity light,91,0,0 ;--------- Ziel Markierung c1=createcube() EntityColor c1, 255,0,0 Global shots_count% ; Anzahl Raketen ; Hauptschleife Repeat PositionEntity Eshot, EntityX(cam), EntityY(cam), EntityZ(cam) TurnEntity cam,0, -MouseXSpeed(), 0, 1 TurnEntity cam,MouseYSpeed(),0 , 0 entity = CameraPick(cam,400,300) If MouseHit(1) s.Tshot = New Tshot s\Hpiv = CreatePivot() ; Zielpivot erstellen PositionEntity s\Hpiv, PickedX(), PickedY(), PickedZ() ; Position des Zielpivots bestimmmen s\Hshot = CopyEntity( EShot ) ; Schussentity von dem Hauptschussentity kopieren ShowEntity s\Hshot ;Schussentity sichtbar machen AlignToVector s\Hshot, EntityX(s\Hpiv), EntityY(s\Hpiv), EntityZ(s\Hpiv), 2, 1 ; Schussentity zum Zielpivot ausrichten shots_count% = shots_count%+1 ; Counter erhöhen EndIf PositionEntity c1, PickedX(), PickedY(), PickedZ() ; Rote Markierung setzten s.Tshot= Last Tshot ; Letzter Schuss If shots_count%<>0 Then PositionEntity s\Hpiv, PickedX(), PickedY(), PickedZ() ; Zielpivot des letzten Schusses an die Mauskoordinaten setzten For s.Tshot = Each Tshot AlignToVector s\Hshot, EntityX(s\Hpiv), EntityY(s\Hpiv), EntityZ(s\Hpiv), 2, .03 ; Schuss langsam ausrichten MoveEntity s\Hshot, 0, .4, 0 ; Schuss bewegen Next UpdateWorld() RenderWorld() Color 255,0,0 Text 15,15, shots_count% MoveMouse 400,300 Flip Until KeyHit(1) Ob das Problem bei AlignToVector liegt kann ich nicht sagen, aber ich vermute es. |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ligt unglaublicherweise an
Code: [AUSKLAPPEN] PositionEntity cam, 0,0,-5 ![]() ich vermute mal, dass es einfach die Ansicht die Realität verfälscht(oder dass CameraPick es mit Kameraverschiebung nicht schafft) ![]() probiers mal mit(oder ganz ohne, da 0|0|0 Standart ist) Code: [AUSKLAPPEN] PositionEntity cam, 0,0,0 ![]() |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstmal vielen Dank, da hätte ich das Problem im Leben nie vermutet.
Aber schau dir mal den Code an: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() cam = createcamera() PositionEntity cam, 0,0,50 Type Tshot Field Hshot, Hpiv ; Hshot= Handle des Schussentity, Hpiv = Handle des Zielpivots End Type ;--------- Hauptschussentity EShot=CreateCylinder(30) ScaleEntity EShot,.1,.5,.1 EntityColor EShot, 25,25,150 HideEntity EShot EntityType EShot, 1 ;--------- Raum cube = CreateCube() FlipMesh cube ScaleEntity cube,80,40,80 EntityPickMode cube,2 EntityShininess cube, 2 EntityType cube,2 ;--------- Licht light = CreateLight(2) LightColor light,25,25,5 PositionEntity light,70,10,0 TurnEntity light,91,0,0 ;--------- Ziel Markierung c1=createcube() EntityColor c1, 255,0,0 Global shots_count% ; Anzahl Raketen ; Hauptschleife Repeat Collisions 1,2,2,1 TurnEntity cam,0, -MouseXSpeed(), 0, 1 TurnEntity cam,MouseYSpeed(),0 , 0 entity = CameraPick(cam,400,300) px=pickedx() py=pickedy() pz=pickedz() If MouseHit(1) s.Tshot = New Tshot s\Hpiv = CreatePivot() ; Zielpivot erstellen s\Hshot = CopyEntity( EShot ) ; Schussentity von dem Hauptschussentity kopieren PositionEntity s\Hshot, EntityX(cam), EntityY(cam), EntityZ(cam) PositionEntity s\Hpiv, PX, PY, PZ ; Position des Zielpivots bestimmmen AlignToVector s\Hshot, EntityX(s\Hpiv), EntityY(s\Hpiv), EntityZ(s\Hpiv), 2, 1 ; Schussentity zum Zielpivot ausrichten shots_count% = shots_count%+1 ; Counter erhöhen EndIf PositionEntity c1, PX, PY, PZ ; Rote Markierung setzten For s.Tshot = Each Tshot AlignToVector s\Hshot, EntityX(s\Hpiv), EntityY(s\Hpiv), EntityZ(s\Hpiv), 2, .03 ; Schuss langsam ausrichten MoveEntity s\Hshot, 0, .4, 0 ; Schuss bewegen Next s.Tshot= Last Tshot ; Letzter Schuss If shots_count%<>0 Then PositionEntity s\Hpiv, Px, PY, PZ ; Zielpivot des letzten Schusses an die Mauskoordinaten setzten UpdateWorld() RenderWorld() Color 255,0,0 s.Tshot= Last Tshot ; Letzter Schuss If shots_count%<>0 Text 15,70, EntityX(s\Hpiv) Text 15,86, EntityY(s\Hpiv) Text 15,101, EntityZ(s\Hpiv) Text 15,130, EntityX(s\Hshot) Text 15,145, EntityY(s\Hshot) Text 15,160, EntityZ(s\Hshot) EndIf Text 15,15, px Text 15,30, py Text 15,45, pz ; Text 15,70, MoveMouse 400,300 Flip Until KeyHit(1) Da müssten theoretisch, wenn man die Maus nicht bewegt, oben links alle 3 Koordinaten aller 3 Entities gleich sein. Allerdings sind sie nur gleich, wenn x und y=0 sind. Sonst weicht immer eine Koordinate ein wenig ab. |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
- Zuletzt bearbeitet von Willi die Rübe am Do, Okt 11, 2007 20:05, insgesamt 2-mal bearbeitet
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
shit, wollte editieren, bitte löschen ![]() |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
hängt das was du meinst vielleicht damit zusammen, dass die Kamera sich bei dir jetzt auf 0,0,50 befindet? | ||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ja meine Absicht, ich will ja später die Kamera auch noch woanders haben außer bei 0,0,0, deshalb sollte es auch damit funktionieren. Ich wollte damit nur schauen, ob sich damit der Abstand des "Verfehlens" vergrößert. Aber durch die Koordinaten oben links sieht man ja jetzt, dass das auch tatsächlich nicht stimmt, also dass da tatsächlich, selbst bei einer geraden Linie ohne Mausbewegung, der Cylinder das Ziel verfehlt.
z.B. schieße mal auf die Koordinaten 30,5,80. Dort wird dann auch der Pivot erstellt, was man an den zweiten drei Koordinaten sehen kann, nur bei den Dritten zeigt er an: 10.87, 1.81, 78.99 also bis auf die Z Koordinate gibt es eine größere Abweichung. |
||
Ich habe keine Lösung, aber ich bewundere das Problem.
Tehadon Q6600, MSI Neo2-FR, 4GB Ram, nVidia 7800 GTX At the Farewell Party visit: MySpace | Homepage |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ist ja schön dass du die Kamera irgendwo haben willst. Nur dann solltest du vielleicht (aber nur vielleicht ![]() ![]() Bzw um korrekt zu sein: Du musst für den Vektor den Vektor Projektil -> Ziel nehmen, nicht Kamera. Ist nur so, dass zum Zeitpunkt der Erzeugung das überein stimmt. Je weiter du jedoch von 0,0,0 weg bist und daran vorbei zielst, desto grösser die Abweichungen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Willi die Rübe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Arg, danke für den Tipp, daran habe ich heute auch überhaupt nicht gedacht ![]() Code: [AUSKLAPPEN] TFormPoint 0,0,0, s\hshot, s\hpiv
AlignToVector s\Hshot, -TFormedX(),-TFormedY(),-TFormedZ(), 2, .3 So funktioniert es jetzt wie es sollte, danke ![]() Edit: Wer am kompletten Code interessiert ist: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() cam = createcamera() PositionEntity cam, 0,0,-5 Type Tshot Field Hshot, Hpiv ; Hshot= Handle des Schussentity, Hpiv = Handle des Zielpivots End Type ;--------- Hauptschussentity EShot=CreateCylinder(30) ScaleEntity EShot,.1,.5,.1 EntityColor EShot, 25,25,150 HideEntity EShot ;--------- Raum cube = CreateCube() FlipMesh cube ScaleEntity cube,80,40,80 EntityPickMode cube,2 EntityShininess cube, 1 ;--------- Licht light = CreateLight(2) LightColor light,25,25,5 PositionEntity light,70,10,0 TurnEntity light,91,0,0 ;--------- Ziel Markierung c1=createcube() EntityColor c1, 255,0,0 Global shots_count% ; Anzahl Raketen ; Hauptschleife Repeat PositionEntity Eshot, EntityX(cam), EntityY(cam), EntityZ(cam) TurnEntity cam,0, -MouseXSpeed(), 0, 1 TurnEntity cam,MouseYSpeed(),0 , 0 entity = CameraPick(cam,400,300) If MouseHit(1) s.Tshot = New Tshot s\Hpiv = CreatePivot() ; Zielpivot erstellen PositionEntity s\Hpiv, PickedX(), PickedY(), PickedZ() ; Position des Zielpivots bestimmmen s\Hshot = CopyEntity( EShot ) ; Schussentity von dem Hauptschussentity kopieren ShowEntity s\Hshot ;Schussentity sichtbar machen AlignToVector s\Hshot, EntityX(s\Hpiv), EntityY(s\Hpiv), EntityZ(s\Hpiv), 2, 1 ; Schussentity zum Zielpivot ausrichten shots_count% = shots_count%+1 ; Counter erhöhen EndIf PositionEntity c1, PickedX(), PickedY(), PickedZ() ; Rote Markierung setzten s.Tshot= Last Tshot ; Letzter Schuss If shots_count%<>0 Then PositionEntity s\Hpiv, PickedX(), PickedY(), PickedZ() ; Zielpivot des letzten Schusses an die Mauskoordinaten setzten For s.Tshot = Each Tshot TFormPoint 0,0,0, s\hshot, s\hpiv AlignToVector s\Hshot, -TFormedX(),-TFormedY(),-TFormedZ(), 2, .3 ; Schuss langsam ausrichten MoveEntity s\Hshot, 0, .4, 0 ; Schuss bewegen Next UpdateWorld() RenderWorld() Color 255,0,0 Text 15,15, shots_count% MoveMouse 400,300 Flip Until KeyHit(1) |
||
- Zuletzt bearbeitet von Willi die Rübe am Fr, Mai 23, 2008 16:48, insgesamt einmal bearbeitet
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bitte ![]() Und das ist meist so mit Bäumen und Wäldern ... Drum zeichne ich mir meist ne Skizze vom Wald ![]() ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group