Conectar-se
Quem está conectado
16 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 16 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

[Resolvido] Estranho bug ao executar arquivos externos

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)
avatar
Ranking : Nota C
Notas recebidas : C
Data de inscrição : 30/07/2011
Número de Mensagens : 928
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 47

Prêmios
   : 0
   : 0
   : 1
Ver perfil do usuáriohttp://luizpontes.tk/

Re: [Resolvido] Estranho bug ao executar arquivos externos

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.
avatar
Ranking : Nota D
Notas recebidas : D+B+D
Data de inscrição : 03/10/2011
Número de Mensagens : 421
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 1
Ver perfil do usuário

Re: [Resolvido] Estranho bug ao executar arquivos externos

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?
avatar
Data de inscrição : 07/03/2010
Número de Mensagens : 426
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 13

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido] Estranho bug ao executar arquivos externos

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
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: [Resolvido] Estranho bug ao executar arquivos externos

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 ".").
avatar
Data de inscrição : 07/03/2010
Número de Mensagens : 426
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 13

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: [Resolvido] Estranho bug ao executar arquivos externos

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.
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 121

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

Re: [Resolvido] Estranho bug ao executar arquivos externos

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!
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum