GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


move analogico

4 participantes

Ir para baixo

move analogico Empty move analogico

Mensagem por Vizage 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.
https://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?
avatar
Vizage

Data de inscrição : 19/08/2014
Reputação : 0
Número de Mensagens : 18
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por WellingtonBecker 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
WellingtonBecker

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 09/05/2013
Reputação : 105
Número de Mensagens : 824
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Vizage 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?
avatar
Vizage

Data de inscrição : 19/08/2014
Reputação : 0
Número de Mensagens : 18
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por DieBoy 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
DieBoy

Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Vizage 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.
avatar
Vizage

Data de inscrição : 19/08/2014
Reputação : 0
Número de Mensagens : 18
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por DieBoy 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
DieBoy

Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Vizage 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. move analogico 413374 Acho que tá encantado... Devorei os tutoriais sobre switch e if e não acho o erro...
avatar
Vizage

Data de inscrição : 19/08/2014
Reputação : 0
Número de Mensagens : 18
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por DieBoy 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
DieBoy

Data de inscrição : 22/08/2014
Reputação : 49
Número de Mensagens : 91
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Vizage 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.
avatar
Vizage

Data de inscrição : 19/08/2014
Reputação : 0
Número de Mensagens : 18
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por WellingtonBecker 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
WellingtonBecker

Games Ranking : Nota D

Notas recebidas : D
Data de inscrição : 09/05/2013
Reputação : 105
Número de Mensagens : 824
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Rodrigo Santiago 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
Rodrigo Santiago

Games Ranking : Nota B

Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 3 Prata x 1 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Vizage 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í...
avatar
Vizage

Data de inscrição : 19/08/2014
Reputação : 0
Número de Mensagens : 18
Prêmios : move analogico Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

move analogico Empty Re: move analogico

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos