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

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Voltar no tempo

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.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Voltar no tempo

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!
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Re: Voltar no tempo

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
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Voltar no tempo

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!
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Re: Voltar no tempo

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)
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Voltar no tempo

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!
Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

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

Re: Voltar no tempo

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...
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Re: Voltar no tempo

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.
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Voltar no tempo

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}
}
Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

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

Re: Voltar no tempo

em Seg 18 Jul 2011, 19:06
.


Última edição por brendan640 em Sab 08 Jun 2013, 20:35, editado 1 vez(es)
avatar
Ranking : Nota D
Notas recebidas : C+D
Data de inscrição : 09/11/2010
Número de Mensagens : 854
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.google.com

Re: Voltar no tempo

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.
Data de inscrição : 06/10/2010
Número de Mensagens : 84
Insígnias de JAM :

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

Re: Voltar no tempo

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
avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

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

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

Re: Voltar no tempo

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)
Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

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

Re: Voltar no tempo

em Seg 18 Jul 2011, 19:33
.


Última edição por brendan640 em Sab 08 Jun 2013, 20:36, editado 1 vez(es)
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Re: Voltar no tempo

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
Ranking : Nota C
Notas recebidas : C+B
Data de inscrição : 26/07/2008
Número de Mensagens : 6037
Insígnias de JAM :

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

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

Re: Voltar no tempo

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!
Data de inscrição : 29/01/2011
Número de Mensagens : 800
Insígnias de JAM :

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

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

Re: Voltar no tempo

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!
avatar
Ranking : Nota C
Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Número de Mensagens : 914
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://luizgm.blogspot.com/

Re: Voltar no tempo

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!!!
Data de inscrição : 06/10/2010
Número de Mensagens : 84
Insígnias de JAM :

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

Re: Voltar no tempo

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
Conteúdo patrocinado

Re: Voltar no tempo

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