[Resolvido] Estranho bug ao executar arquivos externos

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

[Resolvido] Estranho bug ao executar arquivos externos

Mensagem por saim em Qua 14 Dez 2011, 15:45

Como muitos sabem, eu costumo programar de longe do game maker. Tenho uma lista com todas as funções e um game genérico, que pega um arquivo de texto e executa o que estiver dentro dele. Dentre as "coisas dentro dele" eu crio objetos com object_add() e adiciono eventos com object_event_add(ind,evtype,evnumb,codestr).
Isso tem me ajudado a testar minhas engines pra depois, em casa, já saber o que fazer pro jogo funcionar.

Só que agora me deparei com algo inusitado. Usando esse sistema, estabelece-se um limite pra função draw_text e pra draw_text_ext. Fiz um teste e não consegui exibir um texto com 53 caracteres na tela usando draw_text_ext. 52 vai numa boa, mas 53 trava o jogo. Usando a função draw_text, esse limite sobe para 59 caracteres.

Claro que esses limites não se aplicam quando eu jogo os textos diretamente no executável ou - isso estou supondo - ou mesmo quando eu importo os textos de um arquivo externo, mas faço isso com um objeto de dentro do executável.

Existe alguma explicação pra esse fenômeno? Porque eu não posso usar textos com muitos caracteres num objeto criado a partir de object_add()?

Sinto-me obrigado a mostrar o que usei em cada arquivo. Vai no spoiler:
Spoiler:
no arquivo "tutorial.saim", que é o arquivo que o game genérico executa, coloquei:
Código:
globalvar objTutoControl, objTowerParent, objEgg, objSpermTuto, sprSperm, sprTower, sprEgg;

objTutoControl = object_add();
objTowerParent = object_add();
objEgg = object_add();
objSpermTuto = object_add();

execute_file(working_directory + "\quadrados.draw");
execute_file(working_directory + "\tutorial2.obj");
execute_file(working_directory + "\towerTuto.obj");
execute_file(working_directory + "\spermTuto.obj");

fonte = font_add("Arial", 12, 0, 0, 0, 255);
draw_set_font(fonte);

instance_create(0, 0, objTutoControl);
Basicamente, eu só crio o objeto objTutoControl, executo o arquivo "tutorial2.obj" e crio a instância do objTutoControl. O resto todo é dispensável. Está aí só pra manter a honestidade da pergunta, porque não crio instâncias dos outros objetos (eu criava, até perceber o bug, daí retirei tudo pra isolar o problema).
No arquivo "tutorial2.obj" tem o seguinte:
Código:
object_event_add(objTutoControl, ev_create, 0, '
//substituir isso aqui pela rotina de importar textos
texto[0]= "123456789 121415181 222426282 323436383 424446484 52";
texto[1]= "123456789 121415181 222426282 323436383 424446484 525";
texto[2]= "123456789 121415181 222426282 323436383 424446484 5254565856";
textoAtual = 0;
')

object_event_add(objTutoControl, ev_keypress, vk_space, '
textoAtual += 1;

if (textoAtual == 3){
   game_end();
   }
')

object_event_add(objTutoControl, ev_draw, 0, '
draw_text(20, 20, texto[textoAtual]);
')

object_event_add(objTutoControl, ev_other, ev_game_end, '
sprite_delete(sprSperm);
sprite_delete(sprTower);
sprite_delete(sprEgg);
')
O evento "ev_game_end" só elimina as sprites criadas pelo arquivo "quadrados.draw". Achei prudente manter.

O bug acontece ao exibir o texto[1], quando eu uso draw_text_ext e ao exibir o texto[2], ao usar draw_text


Última edição por saim em Qui 15 Dez 2011, 10:10, editado 1 vez(es)

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: [Resolvido] Estranho bug ao executar arquivos externos

Mensagem por luiz_eldorado em Qua 14 Dez 2011, 17:59

Que estranho...
Acho que não há esse "limite". Mas, que eu vi, você só está usando draw_text, nunca draw_text_ext. E não entedi direto qual é o bug que está dando. Explique melhor o que é que acontece e o que deveria acontecer.

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: [Resolvido] Estranho bug ao executar arquivos externos

Mensagem por henriquebr em Qua 14 Dez 2011, 18:05

bom, vi que o problema é um bug mesmo, vc já tentou usar uma variavel para o texto e depois abrilá no draw_text_ext com uma var global?

henriquebr

Ranking : Nota D
Número de Mensagens : 421
Data de inscrição : 03/10/2011
Notas recebidas : D+B+D
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Resolvido] Estranho bug ao executar arquivos externos

Mensagem por Klior em Qua 14 Dez 2011, 19:10

Estranho eu testei aqui e não tive problema nenhum, você deveria por a engine para saber exatamente como você está fazendo.

Testei da seguinte maneira:
#tutorial.saim.txt
Código:

globalvar objTutoControl, objTowerParent, objEgg, objSpermTuto, sprSperm, sprTower, sprEgg;

objTutoControl = object_add();
objTowerParent = object_add();
objEgg = object_add();
objSpermTuto = object_add();

execute_file(working_directory + "\tutorial2.obj.txt");

fonte = font_add("Arial", 12, 0, 0, 0, 255);
draw_set_font(fonte);

instance_create(0, 0, objTutoControl);

#tutorial2.obj.txt
Código:

object_event_add(objTutoControl, ev_create, 0, '
//substituir isso aqui pela rotina de importar textos
texto[0]= "123456789 121415181 222426282 323436383 424446484 52";
texto[1]= "123456789 121415181 222426282 323436383 424446484 525";
texto[2]= "123456789 121415181 222426282 323436383 424446484 5254565856";
textoAtual = 0;
')

object_event_add(objTutoControl, ev_keypress, vk_space, '
textoAtual += 1;

if (textoAtual == 3){
  game_end();
  }
')

object_event_add(objTutoControl, ev_draw, 0, '
draw_text(20, 20, texto[textoAtual]);
')

object_event_add(objTutoControl, ev_other, ev_game_end, '
sprite_delete(sprSperm);
sprite_delete(sprTower);
sprite_delete(sprEgg);
')

Creation Code da Room:
Código:
execute_file(working_directory + "\tutorial.saim.txt");

Todos os três textos foram mostrados sem problemas

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: [Resolvido] Estranho bug ao executar arquivos externos

Mensagem por saim em Qui 15 Dez 2011, 00:05

luiz_eldorado escreveu:Que estranho...
Acho que não há esse "limite". Mas, que eu vi, você só está usando draw_text, nunca draw_text_ext. E não entedi direto qual é o bug que está dando. Explique melhor o que é que acontece e o que deveria acontecer.
Não há o limite MESMO, por isso estou estranhando.
Eu fiquei alternando entre as opções, mas postei uma só. Na prática, eu fiz as duas.
O bug é que o jogo trava, tem que ser fechado pelo gerenciador de tarefas. Como se eu tivesse entrado num loop infinito, o que não parece ser o caso.

henriquebr escreveu:bom, vi que o problema é um bug mesmo, vc já tentou usar uma variavel para o texto e depois abrilá no draw_text_ext com uma var global?
Já tentei:
- importar o texto de um outro arquivo externo (esse é meu objetivo final, na verdade)
- usar uma variável para o texto (que é o que está no exemplo)
- usar o texto diretamente no draw_text e draw_text_ext.
- Usar outros textos antes, pra ver se não é algo a ver com o índice do texto (o erro sempre ocorre ao mostrar o mesmo texto e muda de texto se eu mudar de função).
Não tentei usar uma global, mas não faz sentido uma global ser mais eficiente que uma local.

Klior escreveu:Estranho eu testei aqui e não tive problema nenhum, você deveria por a engine para saber exatamente como você está fazendo.
A engine está meio inacessível, no momento... Foi com o game genérico, aquele mesmo que está no link do tutorial. Essa sua versão deveria funcionar igualzinho - na prática, o que é feito é isso mesmo. Então o erro é só comigo? Estranho. Não faz sentido querer culpar a máquina - qualquer placa de vídeo consegue mostrar um texto desse tamanho (aliás, qualquer placa de SOM consegue isso). Por via das dúvidas, vou tentar testar em outras máquinas. Se importa em baixar a engine? Vou copiar o link aqui.
Pra não dizer que você fez idêntico, a extensão do primeiro arquivo é .saim, mesmo, sem o .txt no final. E a minha engine tem um objeto que procura arquivos da extensão .saim pra executar. Mas se não achar, ele pede o novo nome da extensão, então é só escrever "txt" (acho que SEM o ".").

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: [Resolvido] Estranho bug ao executar arquivos externos

Mensagem por Klior em Qui 15 Dez 2011, 09:11

saim escreveu:
Se importa em baixar a engine? Vou copiar o link aqui.

Com esse arquivo que você mandou realmente está travando, deu uma travada e tive que finalizar com ctrl + del, refiz o procedimento que eu tinha descrevi-do acima para ter certeza, e não travou, está com algum outro problema na 'engina' que você me mandou.

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: [Resolvido] Estranho bug ao executar arquivos externos

Mensagem por saim em Qui 15 Dez 2011, 10:10

Hm... Não faço idéia do que pode ser. Bom, o problema está isolado, então. Até eu recuperar o acesso ao editável da engine, não faz sentido continuar esse tópico, de forma que estou trancando ele.

Muito obrigado a todos!

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: [Resolvido] Estranho bug ao executar arquivos externos

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


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