Jump to content

Cambiar posición de los DX usando el mouse


Anzo

Recommended Posts

Hola, Estoy haciendo un panel en dx y quisiera saber como puedo mover el dx como en el guieditor, no precisamente me lo tienen que hacer, pero si me pueden decir que funciones usar les agradecería. :P

Lo que quiero hacer es que al darle click derecho al dx te salga una opción de ''Cambiar posición del panel'' y si le das click lo puedas mover a donde quieras.

Si es muy complicado, diganmelo...

Link to comment
No es complicado, solo se lleva mucho tiempo desarrollarlo.
  
addEventHandler() 
removeEventHandler() 
"onClientClick" 
"onClientCursorMove" 
  

Probare más tarde, ahorita no puedo... Igual ya tengo más o menos una idea de como hacerlo con esas funciones. (aunque no sé si vaya a funcionar)

Link to comment

Una pregunta, cómo puedo hacer para que un dx se vea en TODAS las resoluciones? yo use esto:

local sx, sy= 1280, 1024 
local x, y= guiGetScreenSize ( ) 
  
dxDrawLine((65 /sourceX  )*sx, (746 /sourceY  )*sy, (65 /sourceX  )*sx, (784 /sourceY)*sy, tocolor(0, 0, 0, 255), 1, false) 
        dxDrawLine((386 /sourceX)*sx, (746 /sourceY  )*sy, (65 /sourceX  )*sx, (746 /sourceY )*sy, tocolor(0, 0, 0, 255), 1, false) 
        dxDrawLine((65 /sourceX  )*sx, (784 /sourceY)*sy, (386 /sourceX)*sx, (784 /sourceY)*sy, tocolor(0, 0, 0, 255), 1, false) 
        dxDrawLine((386 /sourceX)*sx, (784 /sourceY)*sy, (386 /sourceX)*sx, (746 /sourceY  )*sy, tocolor(0, 0, 0, 255), 1, false) 
         
        dxDrawRectangle((65 /sourceX)*sx, (746 /sourceY)*sy, (321 /sourceX)*sx, (38 /sourceY)*sy, tocolor(0, 0, 0, 180), false) 
        dxDrawText("GPS:", (75 - 1 /sourceX)*sx, (759 - 1 /sourceY)*sy, (386 - 1 /sourceX)*sx, (794 - 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 + 1 /sourceX)*sx, (759 - 1 /sourceY)*sy, (386 + 1 /sourceX)*sx, (794 - 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 - 1 /sourceX)*sx, (759 + 1 /sourceY)*sy, (386 - 1 /sourceX)*sx, (794 + 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 + 1 /sourceX)*sx, (759 + 1 /sourceY)*sy, (386 + 1 /sourceX)*sx, (794 + 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 /sourceX)*sx, (759 /sourceY)*sy, (386 /sourceX)*sx, (794 /sourceY)*sy, tocolor(255, 255, 255, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawLine((70 /sourceX)*sx, (746 /sourceY)*sy, (70 /sourceX)*sx, (787 /sourceY)*sy, tocolor(255, 255, 255, 255), 1, false) 

Pero solo me aparece donde debe ser en la resolución 1280x1024, en la 1024x768 o 800x600 me aparece más abajo el dx, y aveces, en la resolución donde lo hice (1280x1024) no me aparece el dxText...

Link to comment
1 = sourceX y sourceY no está definido (o al menos, no lo muestras)

2 = sourceX, sourceY = 1366, 768, lo más recomendable para ese tipo de cálculo que usas

3 = sx, sy = guiGetScreenSize()

4 = De nada.

Cambie los sourceX y sourceY para 'sx' y 'sy' por que miré un post viejo y lo tenían así, pero me olvide también de cambiar los sourceX/Y a los dx.

Me aparecen más abajo los dx ahora:

local sourceX, sourceY = 1366, 768 
local sx, sy = guiGetScreenSize ( ) 
  
dxDrawLine((65 /sourceX  )*sx, (746 /sourceY  )*sy, (65 /sourceX  )*sx, (784 /sourceY)*sy, tocolor(0, 0, 0, 255), 1, false) 
        dxDrawLine((386 /sourceX)*sx, (746 /sourceY  )*sy, (65 /sourceX  )*sx, (746 /sourceY )*sy, tocolor(0, 0, 0, 255), 1, false) 
        dxDrawLine((65 /sourceX  )*sx, (784 /sourceY)*sy, (386 /sourceX)*sx, (784 /sourceY)*sy, tocolor(0, 0, 0, 255), 1, false) 
        dxDrawLine((386 /sourceX)*sx, (784 /sourceY)*sy, (386 /sourceX)*sx, (746 /sourceY  )*sy, tocolor(0, 0, 0, 255), 1, false) 
         
        dxDrawRectangle((65 /sourceX)*sx, (746 /sourceY)*sy, (321 /sourceX)*sx, (38 /sourceY)*sy, tocolor(0, 0, 0, 180), false) 
        dxDrawText("GPS:", (75 - 1 /sourceX)*sx, (759 - 1 /sourceY)*sy, (386 - 1 /sourceX)*sx, (794 - 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 + 1 /sourceX)*sx, (759 - 1 /sourceY)*sy, (386 + 1 /sourceX)*sx, (794 - 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 - 1 /sourceX)*sx, (759 + 1 /sourceY)*sy, (386 - 1 /sourceX)*sx, (794 + 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 + 1 /sourceX)*sx, (759 + 1 /sourceY)*sy, (386 + 1 /sourceX)*sx, (794 + 1 /sourceY)*sy, tocolor(0, 0, 0, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawText("GPS:", (75 /sourceX)*sx, (759 /sourceY)*sy, (386 /sourceX)*sx, (794 /sourceY)*sy, tocolor(255, 255, 255, 255), 1.00, dxfont0_fontmoney11, "left", "top", false, false, false, true, false) 
        dxDrawLine((70 /sourceX)*sx, (746 /sourceY)*sy, (70 /sourceX)*sx, (787 /sourceY)*sy, tocolor(255, 255, 255, 255), 1, false) 

Link to comment

Yo sinceramente no uso ese método me ya que lo que haces es agrandar o hacer mas pequeño el rectángulo lo que hace que en resoluciones altas o muy bajas se ve muy mal gráficamente. Te sugiero hacerlo en tamaño real al que lo creaste solo usando el método para los posicionamientos.

Otra cosa que te sugiero es hacer como unos parent imaginarios es decir poner un cuadrado mas o menos en tu pantalla y de allí ir añadiendo o quitando pixeles es decir en vez de usar toda la pantalla usas solo un pequeño trozo de ella donde irán tus cálculos es decir una cosa asi:

local sX, sY = guiGetScreenSize 
local x = sX/2 - 400 
local y = sY/2 - 300 
local w = 800 
local h = 600 

De esa manera solo tendrás que hacer en plan

dxDrawRectangle(x, y, w, h, tocolor(255, 0, 0, 255)) 
dxDrawRectangle(x, y, w, 32, tocolor(0, 0, 0, 255) 

Es decir estas haciendo un solo calculo para el posicionamiento de tu panel lo que ahora bastantes cuentas a la hora de ejecutar el código dentro de un render ( El código de arriba mejor ponerlo fuera y cambiar desde el script si es necesario cambiando su variable)

También esta la manera mas sencilla que es un usando un render y dibujando tu panel en la resolución que tu quieras pero eso suele ser un poco mal gráficamente ya que cuando dibujas algo renderizado lo que hace es pixelizarlo un poco.

Espero que te sirva de ayuda.

Edito: no te sugiero usar el guieditor si no que crear los paneles paso por paso manualmente te sale mucho mas rápido y mejor posicionado. También te sugiero no usar una resolución fija para eso, es decir como haces que es sourceX = 1366... yo prefiero crear los paneles usando pixeles que yo necesito mas o menos haciendo cuentas un ejemplo podría ser para lineas o cuadrados uso pixeles como 16, 32, 48, 64, 128, 256, 512.... Esto ultimo es solo una manera de hacerlo. NO es obligatorio ni nada de eso hacer esto que yo he dicho pero son unos trucos que yo pienso que vienen bien

Link to comment
Yo sinceramente no uso ese método me ya que lo que haces es agrandar o hacer mas pequeño el rectángulo lo que hace que en resoluciones altas o muy bajas se ve muy mal gráficamente. Te sugiero hacerlo en tamaño real al que lo creaste solo usando el método para los posicionamientos.

Otra cosa que te sugiero es hacer como unos parent imaginarios es decir poner un cuadrado mas o menos en tu pantalla y de allí ir añadiendo o quitando pixeles es decir en vez de usar toda la pantalla usas solo un pequeño trozo de ella donde irán tus cálculos es decir una cosa asi:

local sX, sY = guiGetScreenSize 
local x = sX/2 - 400 
local y = sY/2 - 300 
local w = 800 
local h = 600 

De esa manera solo tendrás que hacer en plan

dxDrawRectangle(x, y, w, h, tocolor(255, 0, 0, 255)) 
dxDrawRectangle(x, y, w, 32, tocolor(0, 0, 0, 255) 

Es decir estas haciendo un solo calculo para el posicionamiento de tu panel lo que ahora bastantes cuentas a la hora de ejecutar el código dentro de un render ( El código de arriba mejor ponerlo fuera y cambiar desde el script si es necesario cambiando su variable)

También esta la manera mas sencilla que es un usando un render y dibujando tu panel en la resolución que tu quieras pero eso suele ser un poco mal gráficamente ya que cuando dibujas algo renderizado lo que hace es pixelizarlo un poco.

Espero que te sirva de ayuda.

Edito: no te sugiero usar el guieditor si no que crear los paneles paso por paso manualmente te sale mucho mas rápido y mejor posicionado. También te sugiero no usar una resolución fija para eso, es decir como haces que es sourceX = 1366... yo prefiero crear los paneles usando pixeles que yo necesito mas o menos haciendo cuentas un ejemplo podría ser para lineas o cuadrados uso pixeles como 16, 32, 48, 64, 128, 256, 512.... Esto ultimo es solo una manera de hacerlo. NO es obligatorio ni nada de eso hacer esto que yo he dicho pero son unos trucos que yo pienso que vienen bien

No entendí mucho... en el x = y = hay que poner la posición del panel? y en el w,h tu resolución?

Otra cosa, me descargue un radar y usa este metodo:

local sx, sy = guiGetScreenSize() 
local rt = dxCreateRenderTarget(397, 210) 
local xFactor, yFactor = sx/1366, sy/768 
local yFactor = xFactor --otherwise the radar looses it's 2:3 ratio. 
  
dxDrawRectangle((67)*xFactor, sy-((245+10))*yFactor, (344)*xFactor, (226)*yFactor, tocolor(0, 0, 0, 175)) 
dxDrawImage((67+5)*xFactor, sy-((245+5))*yFactor, (344-10)*xFactor, (226)*yFactor, rt, 0, 0, 0, tocolor(255, 255, 255,255)) 

Cuál es la diferencia con lo que yo hice?

Link to comment
  • Recently Browsing   0 members

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