Jump to content

Imagem com a face virada sempre a tela anexada a um player


Recommended Posts

eu queria criar uma imagem 2D porém com um efeito que a face dela sempre esteja virada para o visualizador

assim como aquele script de /pro que cria uma imagem no player ai todos podem ver ela, não achei nenhum tópico/wiki/video, caso haja um, pode apontar que
eu vou lá e vejo também, mas se puderem dar uma explicação detalhada eu agradeceria, já que sou meio leigo

Link to comment

eu tentei assim:

 

local image = dxCreateTexture("armour.png")

local cx, cy, cz = getCameraMatrix()

function toggleArmorImage(enabled)
    if enabled then
		local imagem dxDrawImage3D(0, 0, 0, 100, 100, image, 255, 255, 255, 0, false, cx, cy, cz)
		attachElements(imagem, localPlayer)
    else
        if isElement(imagem) then
            destroyElement(imagem)
            imagem = nil
        end
    end
end
addEvent("onProStaffToggle", true)
addEventHandler("onProStaffToggle", root, toggleArmorImage)

function dxDrawImage3D( x, y, z, width, height, material, color, rotation, ... )
    return dxDrawMaterialLine3D( x, y, z, x + width, y + height, z + tonumber( rotation or 0 ), material, height, color or 0xFFFFFFFF, ... )
end

ta dando erro no attachElements, primeiro argumento, tenho quase certeza que é porque não pode usar pra attachar uma imagem eu acho, como
eu faria nesse caso?

Link to comment
  • Other Languages Moderators

DX não é um elemento, vc não pode anexar ele em alguma coisa. Pegue a posição da coisa que o DX deve seguir dentro do onClientRender e fique atualizando a posição 3D do DX a cada frame.

A posição da câmera tbm precisa estar dentro do onClientRender para ser atualizada a cada frame.

Link to comment
  • Other Languages Moderators

Não, vc teria que ficar usando o getElementPosition para obter a posição do player e depois ficar dando dxDrawImage3D com essa posição XYZ do player.

Obs: Optei por usar o dxDrawMaterialLine3D pois a função útil dxDrawImage3D não tem os parâmetros de faceToward para apontar para a câmera.

Edited by Lord Henry
Link to comment
  • Other Languages Moderators
local texture = dxCreateTexture("info.png", "argb", true, "clamp") -- MTA San Andreas 1.5\MTA\cgui\images\info.png

addEventHandler("onClientRender", root, function()
    local x, y, z = getElementPosition(localPlayer)
    local cx, cy, cz = getCameraMatrix()
    local sx, sy = getScreenFromWorldPosition (x, y, z+1, 0, false)
    
    -- Exemplo 1
    dxDrawMaterialLine3D (x, y, z+1.08, x, y, z+0.9, false, texture, 0.17, 0xFFFFFFFF, false, cx, cy, cz) -- Tamanho fixo no mundo (fica menor se afastar a câmera e maior se aproximar a câmera)
    
    -- Exemplo 2
    if sx then
        dxDrawImage (sx-21, sy, 42, 42, texture) -- Tamanho fixo na tela (mantém o tamanho igual mesmo se afastar a câmera)
    end
end)

Lembrando que vc pode mudar a câmera usando a tecla V.

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...