O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Animação errada

Iniciado por Cybermaker, 24/08/2015 às 16:16

O Problema é o seguinte: Eu quero colocar uma animação no personagem quando ele
empurra uma caixa, porém eu fiz com que quando o jogador encosta na caixa a
animação ocorre, e desse jeito quando o jogador vira para o outro lado
sem desencostar da caixa acontece isso:


Eu queria saber se tem algum jeito de fazer com que a
animação ocorra apenas quando o personagem olhar para ela.

Colocou a condição da direção do Personagem?

Tem uma condição lá para cada direção do personagem, logo você consegue ajeitar esses gráficos de acordo para onde o personagem está olhando.

24/08/2015 às 21:51 #2 Última edição: 24/08/2015 às 21:59 por Cronus
Olha, tem vários jeitos de se fazer isso. Pra falar a verdade, eu recomendo que você fizesse isso com o jogador apertando a tecla na caixa porque seria mais fácil de fazer funcionar. Mas vou tentar te ensinar um método que é garantia de funcionar do jeito que você quer (encostando na caixa pelos lados).

 Explicação do problema
Antes de mais nada, considere que o evento de mudar o gráfico do personagem vai rodar apenas quando ele encosta na caixa, mas não há um comando específico pra saber quando o personagem está desencostando dela. Isso já gera um problema, porque se você mudar o gráfico do personagem quando ele encosta no evento, já não dá pra saber quando é que você pode mudar o gráfico dele de volta pro normal.
A segunda coisa é que você quer saber de que lado o personagem tá encostando na caixa, e fazer com que ele só mude o gráfico se estiver olhando pro lado certo.

Você pode resolver isso usando condições de posição X (horizontal) pra saber de que lado da caixa o personagem está, e usar condições de direção do personagem pra saber se ele está olhando pra caixa mesmo estando do lado dela.
[close]

Há como se fazer isso com variáveis, mas por comandos de script vai te poupar trabalho. Crie um evento em processo paralelo, e coloque esses comandos:
Spoiler
  • Primeiro uma condição pra checar se a posição Y do personagem é igual a posição Y da caixa. Selecione a opção de Script (última da aba 4)
    $game_player.y == $game_map.events[ID do Evento].y
    


  • Dentro da última condição, coloque outra dessa vez checando se o personagem está posicionado à esquerda da caixa, marque a caixa de exceção.
    $game_player.x == $game_map.events[ID do Evento].x-1
    


  • Dentro da última condição, coloque outra dessa vez checando se o personagem está olhando pra direita (Aba 3, Segunda opção), e marque a caixa de exceção.

  • Dentro da última condição, coloque o comando pra mudar o gráfico do personagem pra ele empurrando a caixa.

  • Dentro da exceção, coloque o comando pra mudar o gráfico do personagem pro gráfico normal.

    O evento deve ficar assim:



[close]
Isso vai fazer o personagem mudar o gráfico corretamente caso esteja à esquerda da caixa. Copie o código todo a patir do segundo comando (sem a parte da condição Y) e cole dentro da exceção que sobrou. Os únicos comandos que você precisa mudar são esses:

Spoiler
  • Pra checar se o personagem está à direita da caixa coloque +1 ao invés de -1
    $game_player.x == $game_map.events[ID do Evento].x+1
    


  • Pra checar se o personagem está olhando pra direção certa, coloque Esquerda.

  • Dentro da última exceção, coloque um comando pra mudar o gráfico pro normal.



    O fim do evento deve ficar assim.

[close]
Gif do meu evento funcionando

E com isso, a coisa do gráfico deve funcionar direito contanto que o personagem só ande pra esquerda e pra direita. Se o personagem anda em todas as direções seria necessário modificar o evento, mas a lógica ainda é a mesma.

Como falei, há outras formas de se fazer isso, mas creio eu que isso faça o que você quer e do jeito que você quer. Espero que ajude \o

Spoiler
Citação de: Cronus online 24/08/2015 às 21:51
Olha, tem vários jeitos de se fazer isso. Pra falar a verdade, eu recomendo que você fizesse isso com o jogador apertando a tecla na caixa porque seria mais fácil de fazer funcionar. Mas vou tentar te ensinar um método que é garantia de funcionar do jeito que você quer (encostando na caixa pelos lados).

 Explicação do problema
Antes de mais nada, considere que o evento de mudar o gráfico do personagem vai rodar apenas quando ele encosta na caixa, mas não há um comando específico pra saber quando o personagem está desencostando dela. Isso já gera um problema, porque se você mudar o gráfico do personagem quando ele encosta no evento, já não dá pra saber quando é que você pode mudar o gráfico dele de volta pro normal.
A segunda coisa é que você quer saber de que lado o personagem tá encostando na caixa, e fazer com que ele só mude o gráfico se estiver olhando pro lado certo.

Você pode resolver isso usando condições de posição X (horizontal) pra saber de que lado da caixa o personagem está, e usar condições de direção do personagem pra saber se ele está olhando pra caixa mesmo estando do lado dela.
[close]

Há como se fazer isso com variáveis, mas por comandos de script vai te poupar trabalho. Crie um evento em processo paralelo, e coloque esses comandos:
Spoiler
  • Primeiro uma condição pra checar se a posição Y do personagem é igual a posição Y da caixa. Selecione a opção de Script (última da aba 4)
    $game_player.y == $game_map.events[ID do Evento].y
    


  • Dentro da última condição, coloque outra dessa vez checando se o personagem está posicionado à esquerda da caixa, marque a caixa de exceção.
    $game_player.x == $game_map.events[ID do Evento].x-1
    


  • Dentro da última condição, coloque outra dessa vez checando se o personagem está olhando pra direita (Aba 3, Segunda opção), e marque a caixa de exceção.

  • Dentro da última condição, coloque o comando pra mudar o gráfico do personagem pra ele empurrando a caixa.

  • Dentro da exceção, coloque o comando pra mudar o gráfico do personagem pro gráfico normal.

    O evento deve ficar assim:



[close]
Isso vai fazer o personagem mudar o gráfico corretamente caso esteja à esquerda da caixa. Copie o código todo a patir do segundo comando (sem a parte da condição Y) e cole dentro da exceção que sobrou. Os únicos comandos que você precisa mudar são esses:

Spoiler
  • Pra checar se o personagem está à direita da caixa coloque +1 ao invés de -1
    $game_player.x == $game_map.events[ID do Evento].x+1
    


  • Pra checar se o personagem está olhando pra direção certa, coloque Esquerda.

  • Dentro da última exceção, coloque um comando pra mudar o gráfico pro normal.



    O fim do evento deve ficar assim.

[close]
Gif do meu evento funcionando

E com isso, a coisa do gráfico deve funcionar direito contanto que o personagem só ande pra esquerda e pra direita. Se o personagem anda em todas as direções seria necessário modificar o evento, mas a lógica ainda é a mesma.

Como falei, há outras formas de se fazer isso, mas creio eu que isso faça o que você quer e do jeito que você quer. Espero que ajude \o
[close]

Eu testei o que você disse em um projeto em branco e ele funcionou,
porem quando eu coloquei na ARC Engine os comandos por scripts
simplesmente não funcionam.

Eu tentei usar variáveis para ver se resolviam e elas não funcionam também.

Se você tiver uma maneira de fazer isso sem usar coordenadas talvez desse certo.