Jump to content

[DUVIDA] mudando a cor do dxDrawText


Recommended Posts

bom eu andei dando uma olhada e não vi nada relevante por ai então resolvi fazer desse jeito.. alguem conheçe outro modo?

NumeroInicial = 1
function textSelecioando(key3)
  if key3 == "arrow_u" then
    NumeroInicial = NumeroInicial-1
    if NumeroInicial < 1 then
      NumeroInicial = 1 end
      Textoselecioado[NumeroInicial+1] = tocolor(255,255,255,255)
      
  elseif key3 == "arrow_d" then
    NumeroInicial = NumeroInicial+1
    if NumeroInicial > 11 then
      NumeroInicial = 11 end
      Textoselecioado[NumeroInicial-1] = tocolor(255,255,255,255)
  end
  Textoselecioado[NumeroInicial] = tocolor(0,255,255,255)
end

bindKey("arrow_u","down",textSelecioando)
bindKey("arrow_d","down",textSelecioando)

 

ex https://imgur.com/a/nNhXk1c

Link to comment
  • Other Languages Moderators

Carregou, mas quero que vc explique. Pois quando outra pessoa vier com uma dúvida parecida, talvez a imagem não esteja mais disponível.

Edited by Lord Henry
Link to comment
1 minute ago, Lord Henry said:

Carregou, mas quero que vc explique.

e auto explicativo. conforme eu vou nevegando pelo menu a cor do texto vai mudando

 

basicamente a minha pergunta e: existe outro modo de fazer isso mais simples?

Edited by brunob22
Link to comment
  • Other Languages Moderators

E então vc quer saber se tem outro jeito de fazer o texto selecionado da lista mudar de cor, é isso?

Mas pq vc está buscando uma forma alternativa de fazer isso? Do jeito atual está bugando ou algo assim?

Link to comment
Just now, Lord Henry said:

E então vc quer saber se tem outro jeito de fazer o texto selecionado da lista mudar de cor, é isso?

Mas pq vc está buscando uma forma alternativa de fazer isso? Do jeito atual está bugando ou algo assim?

não esta bugando . apenas saber se tem outra forma. alguma função que faiz isso.. 

Link to comment
3 minutes ago, Lord Henry said:

Ah, seu objetivo é saber se tem como otimizar o código atual, é isso? Deixar ele mais limpo.

exatamente meu amigo.. mais onde eu andei veno e perguntando aqui não existe função para mudar a cor do drawtext so na base da gambiarra msm '-'

Link to comment
  • Other Languages Moderators

Bom, eu no seu lugar primeiramente faria o menu inteiro em GUI em vez de DX, por ser mais fácil, mais otimizado e mais leve.

Dai eu usaria a função de guiCreateGridList. Com ela, vc já tem várias funções de seleção e também dá pra trocar o texto dos itens da lista usando guiGridListSetItemColor. Funcionaria a princípio com o mouse, mas vc ainda poderia bindar as teclas arrow_u e arrow_d para mudar a seleção pro item anterior/seguinte usando a função guiGridListSetSelectedItem. Tudo sem gambiarra.

Link to comment
  • Other Languages Moderators

Bem, dai a escolha é sua.

DX não é ideal para menus interativos, ele serve para painéis que mostrem informações em tempo real (tipo velocímetros) já que eles precisam ser desenhados a cada frame para se manterem visíveis. Seu uso é melhor utilizado para mostrar imagens e textos que surgem e somem da tela em alguns segundos ou que envolvam animações de posição, escala, fade e rotação, etc. Seus elementos devem ser criados manualmente um por um, você cria o retângulo do botão, depois o texto e depois cria uma área de clique e anexa uma função nela. Para mudar um botão de lugar, é necessário mover junto seu texto, área clicável e demais propriedades, já que eles são elementos separados. Elementos DX não podem ser arrastados pela tela, a não ser que seja criada uma função gambiarra para fazer isso.

GUI é ideal para menus, botões e janelas que o usuário deve interagir, além de textos e caixas de entrada de texto. São elementos nativos do MTA criados 1 vez e ficam na tela até serem ocultados pelo usuário ou destruídos. Sua aparência depende do tema que o cliente do usuário está configurado. Sua desvantagem é que não são completamente customizáveis como o DX e também não atualizam informações em tempo real. São compatíveis com certas animações de posição, escala e fade, mas não podem ser rotacionados. São mais fáceis de se criar e fazer manutenção em relação ao DX, já que possuem funções nativas para automatizar a maioria das coisas. Você cria um botão qualquer e o texto, área clicável e efeitos do clique já vem inclusos. Se você mudar a posição do botão, seu texto e área clicável acompanharão o botão e suas propriedades. As janelas GUI suportam clicar e arrastar, permitido que o usuário mova a janela pela tela.

-----------------------

Resumindo

  • DX: Painéis, menus e textos que mostram informações.
  • GUI: Painéis, menus, textos, caixas de texto que o usuário pode interagir.
  • Haha 1
Link to comment
NumeroInicial = 1

function changeSelectedIndex (btn)
    Textoselecioado[NumeroInicial] = tocolor(255,255,255,255);

    if (btn == "arrow_u") then
        NumeroInicial = math.max(1, NumeroInicial - 1);
    elseif (btn == "arrow_d") then
        NumeroInicial = math.min(11, NumeroInicial + 1);
    end

    Textoselecioado[NumeroInicial] = tocolor(0,255,255,255);
end

bindKey("arrow_u", "down", changeSelectedIndex)
bindKey("arrow_d", "down", changeSelectedIndex)

 

Link to comment
1 minute ago, crdn said:

NumeroInicial = 1

function changeSelectedIndex (btn)
    Textoselecioado[NumeroInicial] = tocolor(255,255,255,255);

    if (btn == "arrow_u") then
        NumeroInicial = math.max(1, NumeroInicial - 1);
    elseif (btn == "arrow_d") then
        NumeroInicial = math.min(11, NumeroInicial + 1);
    end

    Textoselecioado[NumeroInicial] = tocolor(0,255,255,255);
end

bindKey("arrow_u", "down", changeSelectedIndex)
bindKey("arrow_d", "down", changeSelectedIndex)

 

vou testa dps ^^

Link to comment
  • Moderators

Tirando a falta de 'end' nas linhas 5 e 11 o código está bom, eu não mexeria a menos que achasse necessário uma organização em todo código.

Você se referiu ao manuseio da variável NumeroInicial, certo? Acho que o código do @crdn deve funcionar. Me parece que só tem um erro com "NumeroInicial - 1" no botão "arrow_u" sendo que deve ser ao contrário.

Outra alternativa seria assim:

	if (btn == "arrow_u") then
		NumeroInicial = (NumeroInicial == 1) and 1 or (NumeroInicial + 1)
	elseif (btn == "arrow_d") then
		NumeroInicial = (NumeroInicial == 11) and 11 or NumeroInicial - 1
	end

 

On 08/11/2018 at 15:21, Lord Henry said:

Bem, dai a escolha é sua.

DX não é ideal para menus interativos, ele serve para painéis que mostrem informações em tempo real (tipo velocímetros) já que eles precisam ser desenhados a cada frame para se manterem visíveis. Seu uso é melhor utilizado para mostrar imagens e textos que surgem e somem da tela em alguns segundos ou que envolvam animações de posição, escala, fade e rotação, etc. Seus elementos devem ser criados manualmente um por um, você cria o retângulo do botão, depois o texto e depois cria uma área de clique e anexa uma função nela. Para mudar um botão de lugar, é necessário mover junto seu texto, área clicável e demais propriedades, já que eles são elementos separados. Elementos DX não podem ser arrastados pela tela, a não ser que seja criada uma função gambiarra para fazer isso.

GUI é ideal para menus, botões e janelas que o usuário deve interagir, além de textos e caixas de entrada de texto. São elementos nativos do MTA criados 1 vez e ficam na tela até serem ocultados pelo usuário ou destruídos. Sua aparência depende do tema que o cliente do usuário está configurado. Sua desvantagem é que não são completamente customizáveis como o DX e também não atualizam informações em tempo real. São compatíveis com certas animações de posição, escala e fade, mas não podem ser rotacionados. São mais fáceis de se criar e fazer manutenção em relação ao DX, já que possuem funções nativas para automatizar a maioria das coisas. Você cria um botão qualquer e o texto, área clicável e efeitos do clique já vem inclusos. Se você mudar a posição do botão, seu texto e área clicável acompanharão o botão e suas propriedades. As janelas GUI suportam clicar e arrastar, permitido que o usuário mova a janela pela tela.

-----------------------

Resumindo

  • DX: Painéis, menus e textos que mostram informações.
  • GUI: Painéis, menus, textos, caixas de texto que o usuário pode interagir.

Vou discordar de você sobre o DX. Eu gosto de usar DX em todas ocasiões e acho que dá um visual muito melhor que o estilo GUI; e acho bom pra quem tá afim de se aprofundar em Lua pois te dá muitas formas de interagir com a programação. Não acho que seja ruim pra performance a ponto de você abrir mão de utilizar, sinceramente nunca tive tal problema, é questão de saber otimizar seu código da melhor forma, visto que utiliza o evento "onClientRender", e quase sempre os problemas estão nesse evento. Quem é inexperiente em programação comete muitos erros usando DX/"onClientRender". DX Abrange tudo o que GUI oferece e com certeza muito mais que isso.

No fim, o gosto na verdade é pessoal. Quem prefere as coisas mais agilizadas e simples prefere GUI, já o DX é pra quem quer explorar visuais de interface, mexer mais com programação e cálculos, ou seja, pra quem quer interfaces mais agradáveis pro seu servidor.

Link to comment
  • Other Languages Moderators
15 hours ago, DNL291 said:

Vou discordar de você sobre o DX. Eu gosto de usar DX em todas ocasiões e acho que dá um visual muito melhor que o estilo GUI; e acho bom pra quem tá afim de se aprofundar em Lua pois te dá muitas formas de interagir com a programação. Não acho que seja ruim pra performance a ponto de você abrir mão de utilizar, sinceramente nunca tive tal problema, é questão de saber otimizar seu código da melhor forma, visto que utiliza o evento "onClientRender", e quase sempre os problemas estão nesse evento. Quem é inexperiente em programação comete muitos erros usando DX/"onClientRender". DX Abrange tudo o que GUI oferece e com certeza muito mais que isso.

No fim, o gosto na verdade é pessoal. Quem prefere as coisas mais agilizadas e simples prefere GUI, já o DX é pra quem quer explorar visuais de interface, mexer mais com programação e cálculos, ou seja, pra quem quer interfaces mais agradáveis pro seu servidor.

Bom, eu acho o DX muito flat e quadradão (apesar de que agora na versão 1.5.6 dá pra colocar cantos arredondados), por isso acho o GUI muito mais bonito, sem contar que o jogador escolhe o estilo configurando no client. Mas isso é apenas gosto pessoal, devemos levar em conta apenas os detalhes técnicos aqui.

Temas da Interface:

Spoiler

0SYDhBUTRf2KjYaBuJYGyA.png28xCSJjBTpCziT4XV-njWg.pngHefhZVFZRmKTRu2sE8Oqbg.png

A questão de "muitas formas de interagir com a programação" seria o quê exatamente?
Obrigar o programador a fazer tudo na mão em vez de usar funções prontas? Por um lado é bom para o usuário que está aprendendo, por ser mais difícil, ele é obrigado a entender perfeitamente como é construído cada elemento da interface pra fazer um painel decente em DX, coisa que em GUI seria mais simples e ele não aprenderia tanto pois estaria usando as funções prontas. Mas para o programador experiente, se torna uma perda de tempo e mais trabalho é necessário para fazer uma manutenção no sistema, pois para mudar as posições ou escalas de um elemento, precisa mover cada parte uma por uma.

Na questão de performance, concordo que não há muita diferença, para ser notável precisaria de uma quantidade absurda de elementos DX sendo desenhados ao mesmo tempo na tela, o que nunca acontece pois os menus nunca são complexos demais. O menu mais complexo em GUI que conheço é o painel Admin. O painel mais complexo em DX que eu conheço, é do Cinema Experience. (que também usa elementos GUI)

"DX abrange tudo o que o GUI oferece e com certeza muito mais que isso"? Ok, crie uma janela compatível com clicar-e-arrastar na posição, um campo de input dentro dessa janela que permita no máximo 5 caracteres, uma lista com sorting que o usuário escolhe as ordens clicando nas colunas, e um botão que tenha efeito de "entrar" ao ser pressionado e "sair" ao ser soltado. A maioria dessas coisas você vai precisar de gambiarras pra fazer sem usar GUI.

Uma coisa que eu sei que o DX oferece e que o GUI não, é o fato de rotacionar os elementos. Outra coisa a ser destacada é que você pode construir um painel DX com um buraco no meio (Ex: painel de seleção de veículos, onde o veículo aparece no cenário e o painel ao redor), coisa que no GUI normalmente não dá. (daria pra fazer com gambiarra também, criando TabPanels)

Acho que cada um tem seu principal objetivo e suas vantagens. Na minha opinião, o DX é voltado para mostrar informações ao usuário e o GUI é voltado para interação com o usuário.

Link to comment
  • Moderators

Sobre o DX "quadradão" você se referiu ao dx-rectangle. Realmente janelas em GUI têm temas bonitos, mas isso só funciona para o jogador local. Quando eu citei o visual do DX eu não enquadrei apenas dx-rectangle, há várias formas de se desenvolver em DX, essa seria a mais básica, você pode encontrar pela comunidade global do MTA vários tipos de painéis muito bem desenvolvidos que obviamente vai exigir um conhecimento bem avançado do programador. Pode-se usar render target, shader, interfaces 3D, etc. - nesse ponto que as funções DX quando usadas ao máximo que oferece supera de longe as interfaces padrão do MTA (GUI).

Quanto à primeira pergunta sua, você mesmo a respondeu. O DX por não ser uma interface gráfica já definida como GUI, requer que o programador dê todas as funções por meio de códigos que você mesmo vai desenvolver. E isso não seria nenhuma "obrigação" se o programador escolheu por conta própria fazer. Manutenção caso seja necessário, tenho certeza que não seria trabalhoso pra um programador experiente que tem uma boa organização no seu código. Na verdade tem servidores que utilizam uma biblioteca em DX própria, e isso não exige que ele esteja sempre fazendo as coisas do zero.

Quote

Ok, crie uma janela compatível com clicar-e-arrastar na posição, um campo de input dentro dessa janela que permita no máximo 5 caracteres, uma lista com sorting que o usuário escolhe as ordens clicando nas colunas, e um botão que tenha efeito de "entrar" ao ser pressionado e "sair" ao ser soltado. A maioria dessas coisas você vai precisar de gambiarras pra fazer sem usar GUI.

Isso já tem em bibliotecas DX e eu mesmo já desenvolvi alguns que você citou aí; isso não vejo como gambiarra, se for levar por esse lado, todos scripts complexos são gambiarras.

Entendo que você prefere GUI, mas não mencione DX superficialmente; para um jogador novo que procura por interfaces para o seu servidor, sim, ele deve usar GUI. E interfaces em DX é pra quem quer um diferencial no seu servidor e que gosta desenvolver com essas funções.

Edited by DNL291
Link to comment
On 08/11/2018 at 14:21, Lord Henry said:

Bem, dai a escolha é sua.

DX não é ideal para menus interativos, ele serve para painéis que mostrem informações em tempo real (tipo velocímetros) já que eles precisam ser desenhados a cada frame para se manterem visíveis. Seu uso é melhor utilizado para mostrar imagens e textos que surgem e somem da tela em alguns segundos ou que envolvam animações de posição, escala, fade e rotação, etc. Seus elementos devem ser criados manualmente um por um, você cria o retângulo do botão, depois o texto e depois cria uma área de clique e anexa uma função nela. Para mudar um botão de lugar, é necessário mover junto seu texto, área clicável e demais propriedades, já que eles são elementos separados. Elementos DX não podem ser arrastados pela tela, a não ser que seja criada uma função gambiarra para fazer isso.

GUI é ideal para menus, botões e janelas que o usuário deve interagir, além de textos e caixas de entrada de texto. São elementos nativos do MTA criados 1 vez e ficam na tela até serem ocultados pelo usuário ou destruídos. Sua aparência depende do tema que o cliente do usuário está configurado. Sua desvantagem é que não são completamente customizáveis como o DX e também não atualizam informações em tempo real. São compatíveis com certas animações de posição, escala e fade, mas não podem ser rotacionados. São mais fáceis de se criar e fazer manutenção em relação ao DX, já que possuem funções nativas para automatizar a maioria das coisas. Você cria um botão qualquer e o texto, área clicável e efeitos do clique já vem inclusos. Se você mudar a posição do botão, seu texto e área clicável acompanharão o botão e suas propriedades. As janelas GUI suportam clicar e arrastar, permitido que o usuário mova a janela pela tela.

-----------------------

Resumindo

  • DX: Painéis, menus e textos que mostram informações.
  • GUI: Painéis, menus, textos, caixas de texto que o usuário pode interagir.

Amigo, respeito sua opinião, mas acredito que seja muito ignorante de sua parte dizer isto.

O programador deve usar as funções de acordo com a sua criatividade, elementos Dx básicos de criação de interfaces, são bem optimizados, pelo menos comigo, nunca houve problema algum em relação a queda de FPS.

O GUI nativo do MTA, já é muito ultrapassado, os programadores adaptarem Dx para fazer painéis com todos os tipos de elementos, só prova o poder da criatividade.

Eu por exemplo, utilizo todos os elementos GUI, em Dx.

https://imgur.com/a/uddULt4

https://imgur.com/a/Oa8WEyK

 

Edited by VazErn
Esqueci do link, rs
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...