Jump to content

Mover imagem


Recommended Posts

screenW, screenH = guiGetScreenSize()
x,y,w,h = 1514, 413, 100, 100


slots = { 
    {1067, 381, 281, 281, imgx = 1101, imgy = 433},
    {1067, 381, 281, 281, imgx = 1101, imgy = 513},
    {1067, 381, 281, 281, imgx = 1218, imgy = 511},
    {1067, 381, 281, 281, imgx = 1179, imgy = 511},
    {1067, 381, 281, 281, imgx = 1140, imgy = 512},
    {1067, 381, 281, 281, imgx = 1140, imgy = 433},
    {1067, 381, 281, 281, imgx = 1179, imgy = 433},
    {1067, 381, 281, 281, imgx = 1218, imgy = 433}
}
addEventHandler("onClientRender", root, function()
	dxDrawImage(1067, 381, 281, 281, "exemplo1.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
    dxDrawImage(x,y,w,h, "exemplo2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
end)
showCursor(true)

temp = {}

movendo = false
addEventHandler("onClientClick", root, function(b, s)
    if b == "left" then
        if s == "down" then
            if isMouseInPosition(x,y,w,h) then
                movendo = true
                addEventHandler("onClientRender", root, Mover)
            end
        else
            if movendo then
                movendo = false              
                local inSlot = false
                            
                if not inSlot then
                    x,y = temp[1], temp[2]
                end            
				for i,v in ipairs(slots) do  
                    if isMouseInPosition(v[1], v[2], v[3], v[4]) then
                        inSlot = true
                        x,y = v.imgx, v.imgy
                        break
                    end
                end
                temp = {}
                difx, dify = nil,nil
                removeEventHandler("onClientRender", root, Mover)
            end
        end
    end
end)

difx, dify = nil,nil
function Mover()   
    if #temp == 0 then temp[1], temp[2] = x, y end   
    local mx, my = getCursorPosition()    
    if not difx then
        difx, dify = (screenW * mx) - x, (screenH * my) - y
    end    
    local cx, cy = (screenW * mx) - difx, (screenH * my) - dify  
    x, y = cx, cy
end

function isMouseInPosition ( x, y, width, height )
	if ( not isCursorShowing( ) ) then
		return false
	end
	local sx, sy = guiGetScreenSize ( )
	local cx, cy = getCursorPosition ( )
	local cx, cy = ( cx * sx ), ( cy * sy )	
	return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) )
end

Estou na duvida de como fazer com que a imagem exemplo2 fique sempre disponivel para ser movida para imagem exemplo1, ou seja, ao mover a imagem exemplo2 para a exemplo1, ela sera criada no primeiro slot imgx = 1101, imgy = 433. Assim sucessivamente, como se tivesse preenchendo a caixa.

Link to comment
2 hours ago, Cristtk said:
screenW, screenH = guiGetScreenSize()
x,y,w,h = 1514, 413, 100, 100


slots = { 
    {1067, 381, 281, 281, imgx = 1101, imgy = 433},
    {1067, 381, 281, 281, imgx = 1101, imgy = 513},
    {1067, 381, 281, 281, imgx = 1218, imgy = 511},
    {1067, 381, 281, 281, imgx = 1179, imgy = 511},
    {1067, 381, 281, 281, imgx = 1140, imgy = 512},
    {1067, 381, 281, 281, imgx = 1140, imgy = 433},
    {1067, 381, 281, 281, imgx = 1179, imgy = 433},
    {1067, 381, 281, 281, imgx = 1218, imgy = 433}
}
addEventHandler("onClientRender", root, function()
	dxDrawImage(1067, 381, 281, 281, "exemplo1.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
    dxDrawImage(x,y,w,h, "exemplo2.png", 0, 0, 0, tocolor(255, 255, 255, 255), false)
end)
showCursor(true)

temp = {}

movendo = false
addEventHandler("onClientClick", root, function(b, s)
    if b == "left" then
        if s == "down" then
            if isMouseInPosition(x,y,w,h) then
                movendo = true
                addEventHandler("onClientRender", root, Mover)
            end
        else
            if movendo then
                movendo = false              
                local inSlot = false
                            
                if not inSlot then
                    x,y = temp[1], temp[2]
                end            
				for i,v in ipairs(slots) do  
                    if isMouseInPosition(v[1], v[2], v[3], v[4]) then
                        inSlot = true
                        x,y = v.imgx, v.imgy
                        break
                    end
                end
                temp = {}
                difx, dify = nil,nil
                removeEventHandler("onClientRender", root, Mover)
            end
        end
    end
end)

difx, dify = nil,nil
function Mover()   
    if #temp == 0 then temp[1], temp[2] = x, y end   
    local mx, my = getCursorPosition()    
    if not difx then
        difx, dify = (screenW * mx) - x, (screenH * my) - y
    end    
    local cx, cy = (screenW * mx) - difx, (screenH * my) - dify  
    x, y = cx, cy
end

function isMouseInPosition ( x, y, width, height )
	if ( not isCursorShowing( ) ) then
		return false
	end
	local sx, sy = guiGetScreenSize ( )
	local cx, cy = getCursorPosition ( )
	local cx, cy = ( cx * sx ), ( cy * sy )	
	return ( ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) )
end

Estou na duvida de como fazer com que a imagem exemplo2 fique sempre disponivel para ser movida para imagem exemplo1, ou seja, ao mover a imagem exemplo2 para a exemplo1, ela sera criada no primeiro slot imgx = 1101, imgy = 433. Assim sucessivamente, como se tivesse preenchendo a caixa.

Para fazer com que a imagem exemplo2 possa ser movida para a imagem exemplo1, você precisa adicionar algumas linhas de código no evento "onClientClick" que verifica se a imagem exemplo2 está sobre a imagem exemplo1 e, em caso afirmativo, coloca a imagem exemplo2 no primeiro slot livre na imagem exemplo1.
 

Aqui está um exemplo de como você pode fazer isso:

addEventHandler("onClientClick", root, function(b, s)
    if b == "left" then
        if s == "down" then
            if isMouseInPosition(x,y,w,h) then
                movendo = true
                addEventHandler("onClientRender", root, Mover)
            end
        else
            if movendo then
                movendo = false              
                local inSlot = false
                            
                for i,v in ipairs(slots) do  
                    if isMouseInPosition(v[1], v[2], v[3], v[4]) then
                        inSlot = true
                        x,y = v.imgx, v.imgy
                        break
                    end
                end
                
                if isMouseInPosition(1067, 381, 281, 281) and not inSlot then
                    -- procura o primeiro slot livre
                    for i,v in ipairs(slots) do  
                        if not v.weapon then
                            v.weapon = true
                            x,y = v.imgx, v.imgy
                            break
                        end
                    end
                end
                
                temp = {}
                difx, dify = nil,nil
                removeEventHandler("onClientRender", root, Mover)
            end
        end
    end
end)

 

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