[lua] Objekt vor Spieler erstellen

Tockra

Lt. Commander
Registriert
Dez. 2008
Beiträge
1.063
Hallo Leute,
ich habe folgenden Programmcode geschrieben um in dem Spiel MTA die Position die genau 5.0 Einheiten vor dem Spieler ist zu errechnen ... Leider funktioniert die Funktion nicht ganz richtig, deswegen wollte ich mal erfahrende Leute drüber schauen lassen. Ich versuche mit Comments die einzelnen Funktionen zu beschreiben:
Code:
local abstand = 5 -- Der Abstand
local x,y,z = getElementPosition(player) -- Aktuelle Spielerposition 
rotax,rotay,rota = getElementRotation ( player )  -- Liest die Blickrichtung des Spielers  aus. Mist den Winkel gegen den Uhrzeigersinn 
local ny = math.sin(math.rad(rota)) * abstand
local nx = math.sqrt(abstand^2 - ny^2)
createObject(1337,nx + x,ny + y,z) -- Erstellt das Objekt mit der ID 1337 an der Pos(nx +x , ny + y , z
Was passiert wenn ich das ausführe wollt ihr sicher wissen... Das Objekt wird in der Nähe des Spielers erstellt allerdings nicht vor ihm sondern neben oder hinter ihn. Leider konnte ich keine Regelmäßigkeit erkennen...
 
Also spontan würde ich sagen, dass du vermutlich mit den falschen Koordinaten rechnest, weil X und Z die beiden Koordinaten sind, die für die eigentliche Position stehen, d.h. links, rechts, vorne, hinten.
Y wäre dann noch für die Höhe im 3D Raum, d.h nah beim Kopf oder eher bei den Füßen. In deinem Script sehe ich jedoch dass du X und Y zur Berechnung verwendest, während Z unberührt bleibt und somit sich auch klärt, warum du dein neues Objekt immer in einer anderen Position vom Spieler siehst abhängig von der horizontalen Blickrichtung. Aber wie gesagt nur eine spontane Vermutung und muss nicht zwingend der Grund sein...

Edit: Denke aber das die Berechnung so nicht hinhaut, würde das eher so rechnen:

1. Länge des Richtungsvektors bestimmen, d.h. Quadratwurzel von der Summe der Quadrate von rx, ry und rz
2. mit der Länge den Faktor bestimmen sodaß der Vektor die Länge 5 hat
3. der Position (x,y,z) das Skalarprodukt des Richtungsvektors hinzu addieren
=> neue Position mit Abstand 5

Code:
local abstand = 5 -- Der Abstand
local x,y,z = getElementPosition(player) -- Aktuelle Spielerposition 
rx,ry,rz = getElementRotation ( player )  -- Liest die Blickrichtung des Spielers  aus.
local laenge = math.sqrt(rx^2 + ry^2 + rz^2)
local faktor = laenge / abstand
local nx = (x + (faktor * rx))
local ny = (y + (faktor * ry))
local nz = (z + (faktor * rz))
createObject(1337,nx,ny,nz) -- Erstellt das Objekt mit der ID 1337 an der neuen Position

Wenn das neue Objekt immer auf der gleichen Höhe dargestellt werden soll, dann einfach beim erzeugen des Objektes das ny durch y ersetzen!

achja, da wäre noch der Grund, warum ich das so machen würde: lineare-algebra-und-analytische-geometrie/vektoren/
 
Zuletzt bearbeitet:
Leider leider nein X und Y sind West - Ost und Nord - Süd Koordinaten und Z ist die Höhe

€: Hat sich erledigt habe es hiermit gelöst:

Code:
	if(rota <=90 or rota >=270) then
		createObject(1337,x - nx,y + ny,z)
	elseif(rota > 90 and rota < 270) then
		createObject(1337,x - nx,y - ny,z)
	end
 
Zuletzt bearbeitet:
Zurück
Oben