move analogico

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

move analogico

Mensagem por Vizage em Dom 21 Set 2014, 19:31

Olá de novo.
Baixei uma engine de move analógico e estou com dificuldade pra mudar as sprites na movimentação.
http://gmbr.forumeiros.com/t29826-controle-analogico?highlight=move+anal%F3gico
Fiz assim:
Código:
if direction = 270 {sprite_index=spr_270}
else {sprite_index = spr_bloco};
Até aí tudo certo. O problema é pra mudar a sprite para as outras direções. Devo fazer assim?:
Código:
if direction = 270 {sprite_index=spr_270}
else {sprite_index = spr_bloco};
if direction = 225 {sprite_index = spr_225}
else {sprite_index = spr_bloco};
E assim nas 8 direções. O problema é que só troca a primeira sprite, deixando as outras sem utilidade. Como devo fazer?

Vizage

Número de Mensagens : 18
Data de inscrição : 19/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por WellingtonBecker em Dom 21 Set 2014, 20:16

Amigo, tente assim :

Código:

if obj_player.direction = 270 {sprite_index=spr_270}
else {sprite_index = spr_bloco};
if obj_player.direction = 225 {sprite_index = spr_225}
else {sprite_index = spr_bloco};

WellingtonBecker

Ranking : Nota D
Número de Mensagens : 820
Idade : 35
Data de inscrição : 09/05/2013
Notas recebidas : D
Reputação : 105
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Vizage em Seg 22 Set 2014, 11:30

Não deu. Continua mudando só a primeira sprite e as outras nada. Coloquei no step do player:
Código:
if obj_player.direction = 270 {sprite_index=spr_270}
else {sprite_index = spr_bloco};
if obj_player.direction = 225 {sprite_index = spr_225}
else {sprite_index = spr_bloco};

if obj_player.direction = 135 {sprite_index=spr_135}
else {sprite_index = spr_bloco};
if obj_player.direction = 45 {sprite_index = spr_45}
else {sprite_index = spr_bloco};

if obj_player.direction = 315 {sprite_index=spr_315}
else {sprite_index = spr_bloco};
if obj_player.direction = 90 {sprite_index = spr_90}
else {sprite_index = spr_bloco};

if obj_player.direction = 0 {sprite_index=spr_0}
else {sprite_index = spr_bloco};
if obj_player.direction = 180 {sprite_index = spr_180}
else {sprite_index = spr_bloco};

Alguma outra sugestão?

Vizage

Número de Mensagens : 18
Data de inscrição : 19/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por DieBoy em Seg 22 Set 2014, 12:25

'-', cara usando esses "else's". Teria que a direção fosse 225 e 45 ao mesmo tempo pra funcionar.

Tente assim:

Código:

switch (obj_player.direction){
    case 270: sprite_index = spr_270; break;
    case 225: sprite_index = spr_225; break;
    default:  sprite_index = spr_bloco;
}

DieBoy

Número de Mensagens : 91
Data de inscrição : 22/08/2014
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Vizage em Seg 22 Set 2014, 19:17

Cara, deu certinho a movimentação, mas agora é o spr_bloco q não vai. Ele sempre fica na animação da ultima direção.

Vizage

Número de Mensagens : 18
Data de inscrição : 19/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por DieBoy em Seg 22 Set 2014, 19:27

Você pode fazer a animação parar, modificando a variável image_speed para 0

Código:

image_speed = 0;

Se deseja fazer isso no switch, faça assim:

Código:

switch (obj_player.direction){
    case 270: sprite_index = spr_270; image_speed = 0.3; break;
    case 225: sprite_index = spr_225; image_speed = 0.3; break;
    default:  sprite_index = spr_bloco; image_speed = 0;
}

DieBoy

Número de Mensagens : 91
Data de inscrição : 22/08/2014
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Vizage em Ter 23 Set 2014, 16:55

Seria isso aqui?
Código:
 switch (obj_player.direction){
    case 270: sprite_index = spr_270; image_speed = 0.3; break;
    case 225: sprite_index = spr_225; image_speed = 0.3; break;
    case 135: sprite_index = spr_135; image_speed = 0.3; break;
    case 45: sprite_index = spr_45; image_speed = 0.3; break;
    case 315: sprite_index = spr_315; image_speed = 0.3; break;
    case 90: sprite_index = spr_90; image_speed = 0.3; break;
    case 0: sprite_index = spr_0; image_speed = 0.3; break;
    case 180: sprite_index = spr_180; image_speed = 0.3; break;
       
    default:  sprite_index = spr_bloco; image_speed = 0;
}

Não deu. Acho que tá encantado... Devorei os tutoriais sobre switch e if e não acho o erro...

Vizage

Número de Mensagens : 18
Data de inscrição : 19/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por DieBoy em Ter 23 Set 2014, 17:10

Oque acontece exatamente com o spr_bloco?
E como assim ele "fica na animação da ultima direção"?

DieBoy

Número de Mensagens : 91
Data de inscrição : 22/08/2014
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Vizage em Ter 23 Set 2014, 17:18

Assim, se a última direção clicada for direita, ele fica na sprite 0 ao invés de mudar pro spr_bloco. E o problema no spr_bloco é exatamente esse: quando solta o direcional ele mantém a última sprite e não muda pro spr_bloco.

Vizage

Número de Mensagens : 18
Data de inscrição : 19/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por WellingtonBecker em Ter 23 Set 2014, 20:49

Vizage escreveu:Assim, se a última direção clicada for direita, ele fica na sprite 0 ao invés de mudar pro spr_bloco. E o problema no spr_bloco é exatamente esse: quando solta o direcional ele mantém a última sprite e não muda pro spr_bloco.

No STEP do obj_joystick, adicione essa ultima linha de script como esta abaixo:

Código:
obj_player.speed=0
x=xstart;
y=ystart;

obj_player.sprite_index=spr_bloco //adicione essa linha no script do obj_joystick

WellingtonBecker

Ranking : Nota D
Número de Mensagens : 820
Idade : 35
Data de inscrição : 09/05/2013
Notas recebidas : D
Reputação : 105
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Rodrigo Santiago em Ter 23 Set 2014, 22:26

Erros lógicos. Somente isso.
Vou explicar o erro do if/else e do switch.

Veja :
Código:

if obj_player.direction = 270 {sprite_index=spr_270}
else {sprite_index = spr_bloco};
if obj_player.direction = 225 {sprite_index = spr_225}
else {sprite_index = spr_bloco};

if obj_player.direction = 135 {sprite_index=spr_135}
else {sprite_index = spr_bloco};
if obj_player.direction = 45 {sprite_index = spr_45}
else {sprite_index = spr_bloco};

if obj_player.direction = 315 {sprite_index=spr_315}
else {sprite_index = spr_bloco};
if obj_player.direction = 90 {sprite_index = spr_90}
else {sprite_index = spr_bloco};

if obj_player.direction = 0 {sprite_index=spr_0}
else {sprite_index = spr_bloco};
if obj_player.direction = 180 {sprite_index = spr_180}
else {sprite_index = spr_bloco};
O ultimo 'else' será executado para todas as direções exceto 180. Por isso apena ela pode mudar a sprite. Na verdade todos os 'else' serão executados , mas o que conta é o ultimo.
Corrigindo, o código seria :
Código:

if obj_player.direction = 270 {sprite_index=spr_270}
else if obj_player.direction = 225 {sprite_index = spr_225}
else if obj_player.direction = 135 {sprite_index=spr_135}
else if obj_player.direction = 45 {sprite_index = spr_45}
else if obj_player.direction = 315 {sprite_index=spr_315}
else if obj_player.direction = 90 {sprite_index = spr_90}
else if obj_player.direction = 0 {sprite_index=spr_0}
else if obj_player.direction = 180 {sprite_index = spr_180}
else {sprite_index = spr_bloco};
Porém este script não resolve o problema.
Pense nisso, quando nenhuma direção é selecionada a ultima direção continua
Por isso nunca será possível a execução do else. Isso explica o erro do switch. Default nunca será executado porque ,como eu disse, a ultima direção continua.
O que você tem que fazer é criar uma condição : movendo-não movendo;
tente este script :
Código:

if (speed>0){
switch (obj_player.direction){
   case 270: sprite_index = spr_270; break;
   case 225: sprite_index = spr_225; break;
   case 135: sprite_index = spr_135; break;
   case 45: sprite_index = spr_45; break;
   case 315: sprite_index = spr_315; break;
   case 90: sprite_index = spr_90;  break;
   case 0: sprite_index = spr_0; break;
   case 180: sprite_index = spr_180; break;
}

image_speed = 0.3;
}else {
sprite_index = spr_bloco;
image_speed = 0;
}

Rodrigo Santiago

Ranking : Nota B
Número de Mensagens : 1281
Idade : 20
Data de inscrição : 28/07/2012
Notas recebidas : C + C + B
Reputação : 73
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 1
   : 3

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Vizage em Qua 24 Set 2014, 10:09

kkkk! Batata! Deu certinho Rodrigo Santiago, valeu pela explicação. Apesar de ler e reler tutos sobre if e else sempre tem alguma coisa que escapa do iniciante. Muito agradecido pela ajuda Rodrigo Santiago,WellingtonBecker, DieBoy. Tranca o tópico aí...

Vizage

Número de Mensagens : 18
Data de inscrição : 19/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: move analogico

Mensagem por Conteúdo patrocinado Hoje à(s) 15:36


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