Troca de resolução com display_set_size está explodindo o jogo

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Qui 10 Maio 2012, 11:26

Olá!

Estou fazendo um aplicativo que começa em fullscreen, trocando resolução da tela para 800x600, pois é cheio de texto e se não ficar na resolução igual da room fica ruim a qualidade. Mas tb quero dar a opção da pessoa tirar o fullscreen, e voltar a resolução nativa da sua máquina.

Então preciso usar o display_set_size para definir a resolução quando o usuário acionar o botão que faz isso. Porém sempre que uso esse comando o jogo explode. Ou dá erro de execução e sai fora, ou a tela fica preta, windows fica maluco e tranca tudo.

Pesquisando aqui no fórum vi que o pessoal usou isso sem problemas, mas era em versão antiga do GM... agora na 8.1 alguém já testou isso? Há alguma outra solução?

Thanks!

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Klior em Qui 10 Maio 2012, 13:45

Poderia postar um exemplo?

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Qui 10 Maio 2012, 14:19

É simples só usar o comando que dá problema.
Ex: crie um jogo novo, com uma room vazia, qualquer tamanho.
Crie um objeto que quando acionar algum botão ele executa display_set_size(800,600) ou outra resolução.

Ao rodar coisas estranhas acontecem...

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Klior em Qui 10 Maio 2012, 14:30

Você deve estar achando estrando ao sair da tela cheia, a resolução da tela está em 800x600, você tem que por a resolução da tela a mesma que estava antes de você coloca-la com 800x600, fiz um exemplo:
http://dl.dropbox.com/u/34803365/engines/fullscreen%20e%20tela%20normal.gmk
Pressione F12 para por em tela cheia.
Pressione F11 para por janela normal.

Caso não seja isso, seria melhor por um exemplo.
Edit: Fiz em Gm 8.0, caso o problema só ocorra com Gm 8.1, verifique se você está usando a ultima verão, pois estão corrigindo problemas do Gm 8.1 constantemente.

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Qui 10 Maio 2012, 14:38

Testei teu projeto. Aciono F12, fica tela preta, ícone do windows aparece como "processando" e dá erro, tranca tudo.

Estou com última versão do 8.1

Testou no windows 7? O meu é 7.

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Klior em Qui 10 Maio 2012, 14:41

Testei com windows seven, gm 8.0. funcionou normalmente

Klior

Número de Mensagens : 426
Idade : 25
Data de inscrição : 07/03/2010
Reputação : 13
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por GameMakerTutoriais em Qui 10 Maio 2012, 14:44


Amigo, a ideia de mudar a resolução do monitor é, basicamente, acelerar a performance da placa em relação ao sistema inteiro (quando você reduz a resolução, a placa tem que atualizar menos dados no vídeo trabalhando na mesma frequência). Se o seu jogo não usar um recurso pesado de 3D ou se o hardware em que ele rodar for muito modesto, essa função de trocar a resolução não é muito recomendada.

Dê preferência em colocar o jogo em tela inteira. O GM já interpola a imagem do jogo e dá um acabamento muito bom, mesmo se a imagem for pequena. Além das funções de mexer no registro, uma das mais perigosas do GM é a display_set_frequency(), que também não recomendaria.

Enfim, você pode tentar fazer uma coisa pra ver se é realmente um erro do GM ou se é a placa de vídeo. Mude a resolução pra 800x600 através do seu Windows mesmo, nas propriedades de vídeo. Depois disso:

1) Abre a janela de diagnóstico do DirectX. Iniciar -> Executar -> Digite "Dxdiag" e dê enter.
2) Vá na guia "Exibir" e mande testar o Direct Draw e o Direct 3D nesta resolução de 800x600. Se rodar, tudo certo, provavelmente o problema é com o GM. Nas placas de vídeo antigas, o DX não era bem suportado em todas as resoluções altas, mas hoje em dia é o contrário (embora 800x600 não seja baixa) dependendo de placa pra placa.

Eu não sei se pode dar certo, mas você pode tentar marcar aquela opção do Game Maker, nas configurações de tratamento de erros do jogo, "Write error messages to file game_errors.log". Sei que esse tratamento é em relação ao jogo e não ao comportamento em relação ao sistema, mas se funcionar, talvez dê alguma ideia a respeito do que está acontecendo.

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Qui 10 Maio 2012, 18:02

Sim, a idéia é o jogo entrar em tela cheia, mas preciso baixar resolução para o texto ficar com boa qualidade. Se deixar o gamemaker esticar a qualidade fica ruim.

A placa é uma GForce GTS 450. Mas tb fiz um teste numa máquina com winXP e outra placa e o resultado foi o mesmo.

Liguei a opção de geração de log mas ele não foi feito, deveria estar na pasta do jogo?

No dxdiag como falou não tem mais os botões de teste (DX11), mas isso não deveria ser problema. Se configurar o jogo para já começar em tela cheia e baixando a resolução pelo global game settings, tudo funciona blz.

Só por código que dá erro. O display_set_size que é o culpado, qualquer outra coisa funciona.


Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por GameMakerTutoriais em Qui 10 Maio 2012, 19:16

O log deveria estar na mesma pasta do jogo. Mas como ele não gerou, nem precisa mais. Ele não vai resolver. Acho que esse log deve ser só pra tratamento de erros de sintaxe.

É realmente difícil saber o que é. Um programa simplesmente fechar é um problema genérico pra praticamente qualquer coisa. Eu tentaria fazer uns testes.

1) Criar um projeto vazio só com uma room e no código de inicialização dela, tentar mudar a resolução desse jeito, via código:

Código:
if display_test_all(800,600,-1,-1) then display_set_size(800,600);

2) Em que evento você está colocando essa função?
3) Você está usando somente essa função? Nem sempre uma resolução X é compatível com um colordepth Y ou frequência Z.
4) Tentar usar alguma dll pra ver o resultado dessa alteração em runtime, usando exatamente o mesmo evento e código, apenas substituindo a função nativa pela função na dll.

Quanto mais você conseguir observar do problema, melhor as chances de a gente conseguir uma solução.

A placa é uma GForce GTS 450. Mas tb fiz um teste numa máquina com winXP e outra placa e o resultado foi o mesmo.

Eu fiz um teste aqui pra mudar a resolução durante o jogo e funcionou nas versões 4.3, 6.1, 7 e 8 no Windows XP. Se você puder mostrar a forma como você colocou o código, e onde, talvez fique mais fácil.

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Kabeção em Qui 10 Maio 2012, 19:17

Por falar nisso, ouvi dizer que mudaram a forma que redimensionam os jogos no GM 8.1.

http://gmc.yoyogames.com/index.php?showtopic=537949

Em uma das repostas falam que essa função que era usada para acelerar a performance é antiga e sempre gerou problemas principalmente como os monitores widescreen.
Não é recomendado seu uso pois hoje em dia o sistema operacional usa diretamente o hardware pra isso.

O melhor é colocar fullscreen e deixar o Windows fazer os ajustes de acordo com a resolução do usuário.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por GameMakerTutoriais em Qui 10 Maio 2012, 19:20

Eu também concordo. Essas funções de display são terríveis. Elas, e as do registro são o gatilho do Game Maker. Mas tenta lá de qualquer forma, se der certo, talvez a gente consiga alguma solução.

Valeu!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Qui 10 Maio 2012, 20:33

Ninja8006:

Fiz o teste que você indicou, rodou sem problemas no GM 8 mas deu o erro no 8.1. Realmente esta função está bichada... Vou desistir de usá-la.

Quanto a sua sugestão de usar dll, não entendi. Diz via um plugin, extensão ?

Eu já usei o display_set_size no create de objeto, ou quando aperta uma tecla específica, sempre dá o mesmo erro.

Pelo que li nos links indicados pelo Kabeção, realmente o negócio tá com problemas, outras pessoas tem o mesmo bug...

A questão é que meu "aplicativo" é um leitor de carta virtual exibindo o conteúdo delas na tela, ou seja, é praticamente texto puro. Por isso texto tem que ficar bom. A room nativa é 1024x768. Mas eu gostaria que o "jogo" entrasse em tela cheia para dar maior imersão. Porém se uso fullscreen o texto fica assim: (já que meu desktop é 1280x1024)
http://www.freeimagehosting.net/ktzsf

Já se mando trocar resolução para 1024x768 - igual ao room, fica do jeito que deveria ficar sempre:
http://www.freeimagehosting.net/z52re

Se não tiver como trocar resolução para arrumar o texto em fullscreen, vou ter que desistir disso e deixar só janela... ou fazer 2 exe´s na hora de distribuir, um full e outro não, a pessoa escolhe qual quer rodar. Nada elegante, mas é uma saída... pig

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por GameMakerTutoriais em Sex 11 Maio 2012, 01:49


A sugestão da dll era pra gente poder fazer um comparativo, mas como você já testou na 8 e não deu erro, o problema deve ser mesmo na 8.1.

Já se mando trocar resolução para 1024x768 - igual ao room, fica do jeito que deveria ficar sempre:

Você tem duas opções então. A primeira é ir naquela janelinha de opções globais do jogo e, na opção "Scaling", marcar a "Fixed scale in 100%". Nesse caso, quando o jogo for entrar em fullscreen ele não vai redimensionar a janela, mas pelo menos não vai distorcer.

Se mesmo assim não melhorar você pode tentar usar uma dll no lugar da função. Eu fiz um exemplo aqui para o GM8, mas a ideia é que você experimente na 8.1:

http://dl.dropbox.com/u/77818756/game_maker_changeres.rar

Antes de alterar a resolução essa dll vai fazer um teste de vídeo, mas é bem rápido. Ela só vai alterar se o teste for positivo. Eu compilei e testei no Windows XP, mas não pude testar no Seven.

Talvez usar uma dll seja a solução pelo menos até aparecer mais alguém com alguma outra ideia. De qualquer forma, boa sorte!

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Sex 11 Maio 2012, 13:21

Testei no GM 8.1, ele realmente troca a resolução e não dá erro, mas toda tela do jogo fica preta...
Se mando trocar a resolução automaticamente via dll, logo depois que ela inicializa, dá erro.

Usar o fixed scale deixa só barra pretas no fullscreen, com a tela pequena no meio, então não dá muita diferença de deixar em janela normal...

Não estou vendo solução...

(Obs: esse dll programou por fora, você que fez?)

[]´s

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por GameMakerTutoriais em Sex 11 Maio 2012, 13:42


Rapaz, que negócio doido é esse heim. Eu fiz a dll (funcionou beleza no XP) e tô pensando aqui em uma coisa que até não deve ser coincidência não... Eu usei um recurso de API porque é bem seguro (ou pelo menos deveria) mas no próprio site da Msdn eles estão apontando um erro de compatibilidade com o Vista/Seven:

http://social.msdn.microsoft.com/Forums/en/windowsuidevelopment/thread/5bc2396d-1e0e-44fb-b73b-95f8dfc45684

Quem sabe não seja esse o problema do Game Maker também... scratch

Até a gente achar uma solução eu vou tentar encontrar uma forma de alterar a resolução por outro caminho seguro e que seja compatível com qualquer Windows... Se eu conseguir eu posto aqui no tópico.

Abraços!

GameMakerTutoriais

Número de Mensagens : 800
Data de inscrição : 29/01/2011
Reputação : 26
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por saim em Sex 11 Maio 2012, 14:05

O papo parece meio evoluído demais pra uma solução tão prosaica, mas eu sou cara-de-pau e posto assim mesmo: Já pensou em alterar o tamanho da view pra bater com o tamanho da tela? Isso eliminaria a necessidade de mudar a resolução (se bem que eu não tenho certeza se entendi direito o problema).

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Sex 11 Maio 2012, 14:25

Se eu criar uma view e fazer ela maior, tudo estica e fica com texto ruim, mesmo problema de configurar no global game settings p/ ficar em fullscreen e esticar.

Fiz tudo pensando em 1024x768, que seria uma resolução mais usada e genérica hoje em dia. Todos os gráficos, etc, feios pensando nisso. Realmente não imagino uma forma do visual ficar bom sem baixar a resolução do windows... (digo se a pessoa usa 1280x1024 ou algo maior)

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por saim em Sex 11 Maio 2012, 14:54

É só fazer a view ser exatamente do tamanho da tela e ocupar exatamente o tamanho da tela, usando o display_get_width/height. É uma rotina que eu uso direto:
Código:
lar = display_get_width; alt = display_get_height;

view_enabled = true;
view_visible[0] = true;
view_xview[0] = 0; view_yview[0] = 0;
view_xport[0] = 0; view_yport[0] = 0;
view_wview[0] = lar; view_hview[0] = alt;
view_wport[0] = lar; view_hport[0] = alt;
view_angle[0] = 0;
window_set_position(0, 0);

//e, se quiser,
window_set_fullscreen = true;
//o que só vai sumir com a barrinha do windows. O jogo já vai estar dimensionado

Eu costumo mudar o tamanho da room antes de usar esses códigos, ou seja, antes de ir pra room. Não sei se eles funcionariam bem sem redimensionar a room (mas acho que sim). Pra redimensionar a room, eu uso room_set_width e room_set_height

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Mauricio em Sex 11 Maio 2012, 16:11

Fiz um teste aqui com este teu código (usando o fullscreen(true)) e ficou esticado exatamente igual ao ligar o fullscreen via global game settings.

Sem usar o fullscreen não mudou nada do normal.

Mauricio

Número de Mensagens : 114
Data de inscrição : 13/06/2008
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   :

http://mbg3dmind.wordpress.com/

Voltar ao Topo Ir em baixo

Re: Troca de resolução com display_set_size está explodindo o jogo

Mensagem por Conteúdo patrocinado Hoje à(s) 02:05


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum