Jump to content

[HELP]: setElementRotation


Recommended Posts

Здравствуйте, перейду сразу к делу. Я получаю координаты камеры игрока через getCameraMatrix() и затем я хочу повернуть его туда, куда смотрит камера, но у меня никак не получается это сделать. Кто знает, как нужно обработать данные полученные из getCameraMatrix(), чтобы их можно было ввести в setElementRotation и потом персонаж поворачивался в ту сторону, куда смотрит камера?

Edited by Skraund
Link to comment

При таком варианте по одной оси персонаж поворачивается лицом туда, куда смотрит камера, а по другой оси поворачивается в противоположную сторону. 

У меня есть airbrake и мне нужно, чтобы когда персонаж перемещался, он смотрел лицом туда, куда направлена камера.

Вот код:

function putPlayerInPosition(timeslice)
	local cx,cy,cz,ctx,cty,ctz = getCameraMatrix()
	ctx,cty = ctx-cx,cty-cy
	timeslice = timeslice*0.1
	if getKeyState("num_7") then timeslice = timeslice*4 end
	if getKeyState("num_9") then timeslice = timeslice*0.25 end
	local mult = timeslice/math.sqrt(ctx*ctx+cty*cty)
	ctx,cty = ctx*mult,cty*mult
	if getKeyState("w") then abx,aby = abx+ctx,aby+cty end
	if getKeyState("s") then abx,aby = abx-ctx,aby-cty end
	if getKeyState("d") then abx,aby = abx+cty,aby-ctx end
	if getKeyState("a") then abx,aby = abx-cty,aby+ctx end
	if getKeyState("space") then abz = abz+timeslice end
	if getKeyState("lshift") then abz = abz-timeslice end
	setElementPosition(localPlayer,abx,aby,abz)
end

function toggleAirBrake()
	air_brake = not air_brake or nil
	if air_brake then
		abx,aby,abz = getElementPosition(localPlayer)
		addEventHandler("onClientPreRender",root,putPlayerInPosition)
	else
		abx,aby,abz = nil
		removeEventHandler("onClientPreRender",root,putPlayerInPosition)
	end
end
bindKey("num_0","down",toggleAirBrake)

 

Link to comment
  • 1 month later...
function putPlayerInPosition(timeslice)
	local cx,cy,cz,ctx,cty,ctz = getCameraMatrix()
	ctx,cty = ctx-cx,cty-cy
	timeslice = timeslice*0.1
	if getKeyState("num_7") then timeslice = timeslice*4 end
	if getKeyState("num_9") then timeslice = timeslice*0.25 end
	local mult = timeslice/math.sqrt(ctx*ctx+cty*cty)
	ctx,cty = ctx*mult,cty*mult
	if getKeyState("w") then abx,aby = abx+ctx,aby+cty end
	if getKeyState("s") then abx,aby = abx-ctx,aby-cty end
	if getKeyState("d") then abx,aby = abx+cty,aby-ctx end
	if getKeyState("a") then abx,aby = abx-cty,aby+ctx end
	if getKeyState("space") then abz = abz+timeslice end
	if getKeyState("lshift") then abz = abz-timeslice end
	setElementRotation(localPlayer,0,0, getPedCameraRotation(localPlayer), "ZXY", true)
	setElementPosition(localPlayer,abx,aby,abz)
end

function toggleAirBrake()
	air_brake = not air_brake or nil
	if air_brake then
		abx,aby,abz = getElementPosition(localPlayer)
		addEventHandler("onClientPreRender",root,putPlayerInPosition)
	else
		abx,aby,abz = nil
		removeEventHandler("onClientPreRender",root,putPlayerInPosition)
	end
end
bindKey("num_0","down",toggleAirBrake)

 

  • Like 2
Link to comment
1 hour ago, alexaxel705 said:

function putPlayerInPosition(timeslice)
	local cx,cy,cz,ctx,cty,ctz = getCameraMatrix()
	ctx,cty = ctx-cx,cty-cy
	timeslice = timeslice*0.1
	if getKeyState("num_7") then timeslice = timeslice*4 end
	if getKeyState("num_9") then timeslice = timeslice*0.25 end
	local mult = timeslice/math.sqrt(ctx*ctx+cty*cty)
	ctx,cty = ctx*mult,cty*mult
	if getKeyState("w") then abx,aby = abx+ctx,aby+cty end
	if getKeyState("s") then abx,aby = abx-ctx,aby-cty end
	if getKeyState("d") then abx,aby = abx+cty,aby-ctx end
	if getKeyState("a") then abx,aby = abx-cty,aby+ctx end
	if getKeyState("space") then abz = abz+timeslice end
	if getKeyState("lshift") then abz = abz-timeslice end
	setElementRotation(localPlayer,0,0, getPedCameraRotation(localPlayer), "ZXY", true)
	setElementPosition(localPlayer,abx,aby,abz)
end

function toggleAirBrake()
	air_brake = not air_brake or nil
	if air_brake then
		abx,aby,abz = getElementPosition(localPlayer)
		addEventHandler("onClientPreRender",root,putPlayerInPosition)
	else
		abx,aby,abz = nil
		removeEventHandler("onClientPreRender",root,putPlayerInPosition)
	end
end
bindKey("num_0","down",toggleAirBrake)

 

Большое спасибо, это то, что мне нужно, тема закрыта.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...