Jump to content

Problema com física de objeto dinâmico setElementVelocity sem sucesso.


Recommended Posts

spacer.png

local obj = createObject(1264, -2401.30, -631.06, 133.70)
setElementVelocity(obj, 0,0,0)

Segundo a wiki: Note: Dynamic objects do not automatically have physics applied to them. Use setElementVelocity(object, 0, 0, 0) to fix this.

 

Fiz como diz na wiki mesmo assim sem sucesso, a física só é aplicada quando eu toco no objeto, alguma solução?

Link to comment

Estou com um problema na colisão, talvez eu passe tudo para colsphere, minha dúvida é existe alguma diferença na colisão entre "cylinder" e "corona"?

Quando o objeto fica de ponta cabeça não está detectando a colisão. Se a colisão do "corona" for uma esfera deveria tá colidindo não?

Corona size 4 na anexado na posição 0,0,0:

spacer.png

 

Cylinder size 4 anexado na posição 0,0,-2:

spacer.png

Quando o objeto está em pé funciona normalmente,  mas quando ele está deitado ou de ponta cabeça tem que ficar empurrando o objeto para detectar colisão. Mesmo quando eu coloquei o corona que era pra ser algo como uma esfera não funcionou, dependendo de como o objeto está não detecta a colisão.

Devo passar para colsphere ou tem outra solução?

Link to comment
  • Other Languages Moderators

Não anexe o cilindro em objetos com física dinâmica. Eles irão bugar os markers pois o jogo não atualiza direito a posição da colisão dos markers. Em vez disso use um onClientRender (se o script for client-side) para ficar obtendo a posição do objeto e setando o marker nessa posição.

Se for server-side, use setTimer para ficar atualizando a posição do marker de acordo com a posição do objeto.

Edited by Lord Henry
Link to comment
21 hours ago, Lord Henry said:

Não anexe o cilindro em objetos com física dinâmica. Eles irão bugar os markers pois o jogo não atualiza direito a posição da colisão dos markers. Em vez disso use um onClientRender (se o script for client-side) para ficar obtendo a posição do objeto e setando o marker nessa posição.

Se for server-side, use setTimer para ficar atualizando a posição do marker de acordo com a posição do objeto.

Não funcionou, 

setTimer(function() 

    for i in ipairs(JOB.trash) do 
        local x,y,z = getElementPosition(JOB.trash[i])

        if setElementPosition(JOB.spheres[i], x,y,z) then
            outputChatBox("Update")
        end

    end

end, 100, 0, JOB)

Não apresenta nenhum erro, e ele teoricamente está atualizando a posição do colshape porque não está retornando "Update"

Link to comment

Correção: Não apresenta nenhum erro e a mensagem "Update" é enviada o que significa que está retornando true na função setElementPosition, mas a posição não está sendo atualizada.

Entendi o problema, quando eu aplico física no objeto e movimento ele ainda sim sua posição é a inicial:

Server-side:

local obj = createObject(1264, -2400, -650, 132.5)
local marker = createMarker(-2400, -650, 132.5, "cylinder", 2, 255,255,255,255)

setElementVelocity(obj, 0,0,1) -- Não funciona o obj continua flutuando.




setTimer(function() 

    local x,y,z = getElementPosition(obj)

    setElementPosition(marker, x,y,z-1) -- Funciona mas não tem efeito, pois a posição do objeto não é atualizada.

end, 100, 0, obj, marker)


addCommandHandler("pos", function(player)

    local x,y,z = getElementPosition(obj)
    outputChatBox("x= "..x.." y= "..y.." z= "..z) -- Sempre retorna a posição inicial do objeto.

end)

 

 

Link to comment
On 07/12/2020 at 15:08, Lord Henry said:

Se você movimentar o objeto encostando nele (sem ser pelo setElementVelocity), a posição obtida também é sempre a inicial?

Na verdade o setElementVelocity nem funcionou, e sim, movimentando o objeto a posição sempre é a inicial, outra coisa é que o marker visualmente acompanha o objeto mas sua colisão fica na posição inicial.

Link to comment
  • Other Languages Moderators

Consegui fazer o marker acompanhar o objeto somente client-side.

local obj = createObject (1264, -2400, -650, 132.5)
setObjectBreakable (obj, false)
local marker = createMarker (-2400, -650, 132.5, "cylinder", 2, 255, 255, 255, 255)

setTimer (function ()
    setElementVelocity (obj, 0, 0, 0)
end, 100, 1)

addEventHandler ("onClientRender", root, function()
    local x, y, z = getElementPosition (obj)
    setElementPosition (marker, x, y, z - 1)
end)

 

Edited by Lord Henry
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...