Voltar no tempo

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

Voltar no tempo

Mensagem por Luiz A. Oliveira em Seg 18 Jul 2011, 13:43

Eae pessoal, gostaria de saber como faço para armazenar os últimos 5 segundos de jogo para quando pressionar uma tecla poder voltar atras, mais ou menos como no Prince of Pérsia.

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por PedroX em Seg 18 Jul 2011, 14:00

Se só o player for voltar no tempo, é simples.
Se os inimigos também voltarem, não vai ser dificil, mas vai ficar mais lento.

CREATE
Código:
posicao=0;
meu_x=0;
meu_y=0;
voltar=0;
tempo_grava=5*room_speed;

STEP:
Código:

if !voltar{
posicao+=1;
if posicao>tempo_grava posicao=0;
meu_x[posicao]=x;
meu_y[posicao]=y;
}
if keyboard_check_pressed(vk_space){
voltar=1;
posicao=0;
}
if (voltar){
x=meu_x[tempo_grava-posicao];
y=meu_y[tempo_grava-posicao];
posicao+=1;
if posicao>tempo_grava {voltar=0; posicao=0;}
}

Testa ai. Ele só vai voltar na posição.
Dá para gravar o sprite, o image_index, e outras coisas.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por Luiz A. Oliveira em Seg 18 Jul 2011, 14:07

ERROR in
action number 3
of Step Event
for object obj_nave:

Error in code at line 12:
x=meu_x[tempo_grava-posicao];
^
at position 4: Unknown variable meu_x or array index out of bounds

Apareceu isso, mais acho que posso resolver

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por PedroX em Seg 18 Jul 2011, 14:09

Acho que você deve esperar pelo menos 5 segundos antes de apertar o botão.
É que o valor ainda não existia.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por Luiz A. Oliveira em Seg 18 Jul 2011, 14:33

Ficou daora, mais eu queria tipo um room_speed reverso (Eu disse tipo, não que isso exista) daí tudo, exatamente tudo voltaria (Até objs ja destruidos)

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por PedroX em Seg 18 Jul 2011, 14:42

Seria bem complicado.
Você teria que desativar as instâncias, em vez de destrui-las.
Você salvaria todas as informações: quais instancias estão na tela, suas posicoes, suas sprites, entre outros.
Depois você leria as informações.
Você poderia usar um indice para cada instancia.
Ex:
sprite[1]=sprite_do_player
xx[1]=x_do_player
sprite[2]=sprite_da_instancia_1_do_inimigo;

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por GameMakerTutoriais em Seg 18 Jul 2011, 18:35

Só pra complementar, você não precisa necessariamente de fazer isso objeto por objeto, também daria pra usar um with (all), e usar isso em todas as instâncias de uma só vez.

Além disso, teria que ver a necessidade de armazenar ou não estados de backgrounds, timelines, etc...

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: Voltar no tempo

Mensagem por Luiz A. Oliveira em Seg 18 Jul 2011, 18:46

To tentando fazer, mais não consigo!!!
Acho que não entendi, poderia me fazer uma engine?
Quando uso o with() mostra que algumas variáveis não existem.

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por PedroX em Seg 18 Jul 2011, 18:58

Porque os objetos precisam ter essas variaveis.
Se não tiver, você pode fazer:
Código:

with(all){
if variable_local_exists('variavel')
{//fazer algo com a variavel}
}

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por GameMakerTutoriais em Seg 18 Jul 2011, 19:06

.


Última edição por brendan640 em Sab 08 Jun 2013, 20:35, editado 1 vez(es)

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: Voltar no tempo

Mensagem por Lauro em Seg 18 Jul 2011, 19:13

não é mais fácil criar um sistema de save??
por exemple, no evento create insere o D&D save game e no value insere "tempo", depois insere alarm0, steps=50 no evento alarm0 insere novamente o save, e o D&D alarm também.
No evento release key control, insira load game="tempo"
Espero que ajude.

Lauro

Ranking : Nota D
Número de Mensagens : 854
Idade : 19
Data de inscrição : 09/11/2010
Notas recebidas : C+D
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.google.com

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por diego333 em Seg 18 Jul 2011, 19:24

Crie um Objeto Controlador, e coloque nele
Create Event
Código:

Voltando = false;
End Step
Código:

if(Voltando)
{
    with(all)
    {
        if(variable_local_exists("SPRITE_INDEX"))
        {
            sprite_index = ds_stack_pop(SPRITE_INDEX);
            x = ds_stack_pop(X);
            y = ds_stack_pop(Y);
        }
    }
}
else
{
    with(all)
    {
        if(variable_local_exists("SPRITE_INDEX"))
        {
            ds_stack_push(SPRITE_INDEX,sprite_index);
            ds_stack_push(X,x);
            ds_stack_push(Y,y);
        }
    }
}

e em cada objeto que vai voltar no tempo , coloque
Create Event
Código:

SPRITE_INDEX = ds_stack_create();
X = ds_stack_create();
Y = ds_stack_create();


e para voltar no tempo é só mudar a variavel "Voltando" para true

diego333

Número de Mensagens : 84
Data de inscrição : 06/10/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por Markituh em Seg 18 Jul 2011, 19:24

Usando um sistema de save você não poderia voltar cada step feito no jogo, apenas na hora que salvou. E se você salvar o jogo a cada step, poderia deixar o jogo um pouco lento(já que é necessário fazer operações com arquivos). O jeito do Pedro Henrique é o mais correto para se fazer isso, é trabalhoso porém dá resultados satisfatórios.

Outra coisa que também seria legal armazenar seria a image_index, assim fica mais realista tongue Sem falar das peculiaridades que o Ninja citou, como estados de backgrounds, timelines, paths, variáveis locais do objeto, variáveis globais etc e tal. É BASTANTE trabalhoso, mas pelo menos é o jeito usado no Prince of Persia(sem falar que é o único jeito xD)

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por GameMakerTutoriais em Seg 18 Jul 2011, 19:33

.


Última edição por brendan640 em Sab 08 Jun 2013, 20:36, editado 1 vez(es)

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: Voltar no tempo

Mensagem por Luiz A. Oliveira em Seg 18 Jul 2011, 19:43

Aqui o jeito do diego quando volta ao estado inicial depois fica y=0,x=0 e a sprite some

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por PedroX em Seg 18 Jul 2011, 19:48

O jeito do diego333 é bem interessante.
Não sabia para que servia essa função.
De qualquer modo, luiz, você teria que gravar tudo o que puder, depois reproduzir.

Off:
Obs: Bem que no game maker podia ser assim:
room_speed=-30;
Ai voltava tudo.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por GameMakerTutoriais em Seg 18 Jul 2011, 20:11

luiz_100juizo escreveu:Aqui o jeito do diego quando volta ao estado inicial depois fica y=0,x=0 e a sprite some

Não sei, acho que é porque ainda falta gravar os valores no create, coloca lá no create e tenta aí:

Código:

ds_stack_push(SPRITE_INDEX,sprite_index);
ds_stack_push(X,x);
ds_stack_push(Y,y);

Se não der então é porque o último 'pop' tá puxando o último valor e deixando 0 (zero) no lugar. Se for isso, é só você controlar "quanto" você quer que ele volte!

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: Voltar no tempo

Mensagem por Luiz A. Oliveira em Ter 19 Jul 2011, 09:18

Continua do mesmo jeito
Nunca tinha visto essa função ds_... por isso não posso a manipular sozinho.
PLZ me ajudem!!!

Luiz A. Oliveira

Ranking : Nota C
Número de Mensagens : 914
Idade : 19
Data de inscrição : 08/09/2010
Notas recebidas : D-B-C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://luizgm.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por diego333 em Ter 19 Jul 2011, 14:03

Código:

if(Voltando)
{
    with(all)
    {
        if(variable_local_exists("SPRITE_INDEX"))
        {
            sprite_index = ds_stack_pop(SPRITE_INDEX);
            x = ds_stack_pop(X);
            y = ds_stack_pop(Y);
        }
    }
}
else
{
    with(all)
    {
        if(variable_local_exists("SPRITE_INDEX"))
        {
            if(ds_stack_empty(SPRITE_INDEX))
            {
                other.Voltando = false;
                break;
            }
            else
            {
                ds_stack_push(SPRITE_INDEX,sprite_index);
                ds_stack_push(X,x);
                ds_stack_push(Y,y);
            }
        }
    }
}
tenta mudar isso , OBS ão sei se vai pegar , não tenho game maker

diego333

Número de Mensagens : 84
Data de inscrição : 06/10/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Voltar no tempo

Mensagem por Conteúdo patrocinado Hoje à(s) 18:23


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