Dúvida na sequência de execução de scripts.

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

Dúvida na sequência de execução de scripts.

Mensagem por Allan Dennis em Sex 14 Maio 2010, 22:21

Fiz um script que cria objetos e suas instancias relacionadas ao mouse, funcionou perfeitamente.

Passei então para a próxima etapa fazendo outro script que altera algumas características dos objetos do primeiro script de acordo algumas regras definidas para o jogo.

Criei um objeto com D&D, só para testar, e nele um evento create com dois execute script, um pra cada script (na ordem correta).

Acontece que, quando executo o jogo, a tela fica vazia e executa os sons relativos ao segundo script e só então aparecem os objetos do primeiro script sendo que com as alterações relativas ao segundo.

Tudo funcionou, exeto pela ordem de execução.

Allan Dennis

Número de Mensagens : 15
Idade : 43
Data de inscrição : 28/04/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida na sequência de execução de scripts.

Mensagem por Kabeção em Sex 14 Maio 2010, 22:41

Bom, você tem dois objetos: obj1 e obj2.
O obj1 é o primeiro a ser criado e o obj2 é criado com um script no evento Create do obj1.
O script no Create do obj1 é assim:

var1 = 10;
var2 = 10;
obj_id = instance_create(x,y,obj2);
with (obj_id)
{
x = 500;
y = 400;
forca = 10;
}
var3 = 50;
var4 = 60;

O execução de eventos ficaria nessa ordem:
obj1 - Create até a linha onde esta 'obj_id = instance_create(x,y,obj2);'
obj2 - Create - O obj2 executa seu Create
obj2 - Create - x, y e forca são definidas
obj1 - Create - a execução volta para o obj1 e continua de 'var3 = 50;' até a ultima linha
obj1 - Draw
obj2 - Draw
obj1 - Begin Step
obj2 - Begin Step
obj1 - Step
obj2 - Step
obj1 - End Step
obj2 - End Step

Depois do ultimo End Step a execução volta para o Draw do obj1 e se repeti.
Na verdade, na parte do instance_create e with, primeiro o Create do obj2 é executado ai volta para o obj1 depois o with faz voltar dinovo no obj2 e fazar ele definir as variaveis e ai sim volta para o obj1. scratch
Isso é claro se você usasse só esses eventos.

Não entendi direito seu problema mas é assim a ordem de execução de eventos do GM.

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: Dúvida na sequência de execução de scripts.

Mensagem por Convidad em Sex 14 Maio 2010, 23:35

Allan Dennis escreveu:Acontece que, quando executo o jogo, a tela fica vazia e executa os sons relativos ao segundo script e só então aparecem os objetos do primeiro script sendo que com as alterações relativas ao segundo.

Tudo funcionou, exeto pela ordem de execução.

Se eu entendi direito, acho que o que pode estar havendo é apenas uma "impressão" de que o objeto é criado depois. Os sons serão executados no evento create normalmente (junto com todo o código), porém, a impressão que se tem é de que os objetos serão criados depois, já que tem que haver atualização do step para perceber o objeto na room.

Se você definir a velocidade da room bem baixa, é possível que aconteça isso mesmo. Isso se eu tiver entendido direito o que aconteceu com você aí.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Dúvida na sequência de execução de scripts.

Mensagem por Allan Dennis em Sab 15 Maio 2010, 00:14

Kabeção, acho que não entendeu a pergunta, talvêz eu não tenha sido claro o suficiente.

Objetivo:
O Script_1 cria os objetos já com suas características definidas e os coloca na tela.
O Script_2 altera algumas características de alguns objetos criados no Script_1

Aí vai parte do código (simplificado):

Script_1:
Obj1=object_add();
instance_create(10,10,Obj1);
with(Obj1){sprite_index=Spt1;visible=true; depth=0;};
Obj2=object_add();
instance_create(10,20,Obj2);
with(Obj2){sprite_index=Spt1;visible=true; depth=0;};

Script_2:
sleep(1000);
i=0;
while (i<5)
{
Teste=irandom_range(1,2);
if Teste = 1 {with(Obj1){sprite_index=Spt2;sound_play(Snd1);sleep(500);}};
if Teste = 2 {with(Obj2){sprite_index=Spt2;sound_play(Snd2);sleep(500);}};
i+=1;
}

Room0 Creation Code:
script_execute(Script_1);
script_execute(Script_2);

Resultado (não desejado):
Abre a janela sem nada, executa o Script_2 (só o som),
Só depois do último som aparecem os objetos criados pelo Script_1, porém com os sprites já alterados pelo script_2.

Se puderem, façam o teste aí pra visualizarem melhor o problema.

Allan Dennis

Número de Mensagens : 15
Idade : 43
Data de inscrição : 28/04/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Dúvida na sequência de execução de scripts.

Mensagem por Convidad em Sab 15 Maio 2010, 00:31

Acho que o que tá acontecendo é o fato de que o sleep() tá parando o código. O redraw da tela do jogo só é feito depois de todo o código ser executado! Coloca no Script_2 (dentro do while):

Código:
screen_redraw(); screen_refresh();

Só pra ressalvar, você pode usar seus scripts sem usar o script_execute, apenas digitando o nome dele e os argumentos:

Código:
Script_1();
Script_2();

Você também poderia substituir o while pelo "repeat" (se não estiver usando a variável "i") e o seu script "irandom_range" por "choose()":

Código:
sleep(1000);
repeat (5)
{
Teste=choose(1,2);
if Teste = 1 {with(Obj1){sprite_index=Spt2;sound_play(Snd1);sleep(500);}};
if Teste = 2 {with(Obj2){sprite_index=Spt2;sound_play(Snd2);sleep(500);}};
}

Boa sorte.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Dúvida na sequência de execução de scripts.

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


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