Jump to content

Dx Rotation


Lalalu

Recommended Posts

Hola, hago este post por el siguiente motivo.

Estoy usando el siguiente código para hacer que una imagen rote constantemente.

La cuestión es que quisiera que esta imagen se creara sobre otra imagen, lo que trato de hacer es una especie de ventana a pantalla completa que sería una imagen, y sobre esta imagen se cree el dx de la que rota, ambas cosas funcionan sin embargo no logro hacer que la imagen que rota quede sobre la imagen base, siempre queda por debajo de esta, para la imagen base de pantalla completa debo usar guiCreateStaticImage porque con dx no se adapta a todas las resoluciones. Funcionó cuando usé dx para ambos y lo metí en la misma función pero sucede lo de la resolución, cosa que con guiCreateStaticImage no pasa

 

local rotation = 0
function DxLOAD()
rotation = rotation < 360 and rotation + 5 or 0 	
dxDrawImage(x*1147, y*889, x*105, y*105, "Images/LOAD.png",rotation)
end

 

Edited by Lalalu
Link to post
1 hour ago, aka Blue said:

Lo que tienes que hacer es primero dibujar la imagen base y debajo de esta la imagen que rota.

Hice exactamente eso mismo también, si lo meto en la misma función funciona perfecto pero crear la imagen base con dx no permite que se adapte a todas las resoluciones como con guiCreateStaticImage  y pues no se ve nada bien, y también cree la imagen base primero con  guiCreateStaticImage y después la que rota pero pasa lo mismo, aparece debajo de la imagen base

Link to post

Cada dxDraw function tiene este argumento "postGUI" y la wiki dice que:

Quote

postGUI: A bool representing whether the image should be drawn on top of or behind any ingame GUI (rendered by CEGUI).

 

  • Like 1
Link to post

Para DX debes calcular las posiciones de tal forma que se ajuste a todas las resoluciones. Es algo más complicado que ponerle true al argumento relative de las GUI. Utiliza esto para dx, es lo que utilizo yo y me funciona de maravilla:

local sx, sy = guiGetScreenSize()
local x, y = ( sx / 1024 ), ( sy / 768 ) -- El 1024 y el 768 lo cambias por el ancho y alto de tu pantalla

dxDrawRectangle( x*20, y*100, x*200, y*150, tocolor(255,255,255) )

-- Y para los textos y*escala

 

  • Like 1
Link to post

Probaré con ese método, lo que sucede es que mi pantalla tiene una resolución no muy común por lo que para poder crear elementos dx o para gui debo cambiar mi resolución a 1280 x 720 o 1980 x 1080, para que pueda adaptarse a las resoluciones más comunes y no solo a la mía, me ha funcionado hasta ahora con todos los elementos DX sin embargo con el de poner el Dx de una imagen a pantalla completa no me ha servido

local sx,sy = guiGetScreenSize()  --- me funciona con todos los elementos 
local px,py = 1280,720
local x,y = (sx/px), (sy/py)

local x1,y1 = guiGetScreenSize ()  --- me funciona sólo con los guiStaticImage, con los Dx no (imagen pantalla completa)
local factor = x1 / 720
local newY = y1*factor
9 hours ago, aka Blue said:

Para DX debes calcular las posiciones de tal forma que se ajuste a todas las resoluciones. Es algo más complicado que ponerle true al argumento relative de las GUI. Utiliza esto para dx, es lo que utilizo yo y me funciona de maravilla:


local sx, sy = guiGetScreenSize()
local x, y = ( sx / 1024 ), ( sy / 768 ) -- El 1024 y el 768 lo cambias por el ancho y alto de tu pantalla

dxDrawRectangle( x*20, y*100, x*200, y*150, tocolor(255,255,255) )

-- Y para los textos y*escala

 

 

Link to post

Cuando iteras un elemento dx es importante el orden en que está establecido en tu código. Por ejemplo:

-- La ultima funcion en iterarse va ser la que va a superponerse a la otra.
addEventHandler("onClientRender", root,
	function()
		dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(255, 0, 0, 255), false)
		dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(0, 255, 0, 255), false) 
	end
)


En el caso de usar el argumento POSTGUI:

-- La primera funcion en iterarse va ser la que va a superponerse a todas las demás que las siguen.
addEventHandler("onClientRender", root,
    function()
        dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(255, 0, 0, 255), true)
        dxDrawImage(0, 0, 50, 50, "imagen.png", 0, 0, 0, tocolor(0, 255, 0, 255), false) 
    end
)

Ahora con el caso de adaptarse DX Image a todas las resoluciones, al igual que con guiCreateStaticImage, puedes utilizar los porcentajes para que se adapten de igual manera que los static-image.

-- Se busca la resolución.
local sx, sy = guiGetScreenSize()
-- Calcular las posiciones utilizando porcentajes. ejemplo: x=0.5, y=0.5 crea la imagen a partir de la mitad de la pantalla.
dxDrawImage(sx * 0.5, sy * 0.5, sx * 0.3, sy * 0.1, "imagen.png")

Una forma más accesible sería re definir la misma función dxDrawImage para que se adapte a los porcentajes sin realizar los cálculos uno y otra vez.

-- Primero redefinir la función.
_dxDrawImage = dxDrawImage
local function dxDrawImage(x, y, w, h, ...)
	local sx, sy = guiGetScreenSize()
	return _dxDrawImage(x * sx, y * sy, w * sx, h * sy, ...)
end

-- Luego dibujar
addEventHandler("onClientRender", root,
	function()
		dxDrawImage(0.5, 0.5, 0.05, 0.05, "imagen.png", 0, 0, 0, tocolor(0, 255, 0, 255), false) 
		dxDrawImage(0.3, 0.5, 0.05, 0.05, "imagen.png", 0, 0, 0, tocolor(255, 255, 0, 255), false)
		
		-- Ya como vez no haces el calculo una y otra vez ya que está realizandolo directamente cuando llamas a la función.
	end
)

Puedes utilizar las posiciones del static-image como guía para usarlos en dx-image.

  • Thanks 1
Link to post

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