Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Movimento estilo Space Invaders [editado]

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Epipoca
Novato
Novato
Reações: 0
Mensagens: 11

Movimento estilo Space Invaders [editado]

Mensagem por Epipoca » Sáb Abr 08, 2017 10:30 pm

Olá amigos, tudo bem? Estou a algumas horas ( T.T ) tentando resolver meu problema de movimentação de inimigos no estilo space invaders e estou com um certo problema na hora de todos os inimigos, quando chegarem no limite da tela, mudarem a direção. Eu criei um array de inimigos para alinhar todos na tela e acrescentei x += 1 neles para se movimentarem para direita. Até ai tudo bem, eles se movem todos juntos em sincronia, mas quando peço para voltarem x-= 1; eles vao um de cada vez, até que cada um chegue na borda e mude a direção. Depois disso tentei alterar a veocidade (x) de todos ao mesmo tempo, então criei um with (nao sei se ele serve muito para essa ocasião) mas utilizando apenas a posição (x) ele não funciona, apenas um volta e não todos. Depois tentei alterar o hspeed, o que funcionou muito bem, mas acho que por ser velocidade uniformemente variada, os inimigos meio que tem um pequeno impulso antes de voltar, o que deixa o movimento bem falso. Depois tentei colocar obj_inimigo.x dentro do with pra mudarem de movimento, isso até que funcionou, mas metade dos inimigos sumiram da tela e outra metade fez o que eu esperava. 

O que eu gostaria de saber é, como eu poderia fazer esse movimento sincronizado dos inimigos da tela no estilo Space Invaders, e o que talvez eu esteja fazendo de errado =[. Não preciso do código pronto, mas se alguém puder me exemplificar a maneira ficaria muito agradecido. 

Código: Selecionar todos

// Maneira de como estou instanciando os inimigos na tela
// esse é um create no obj controle
for (i = 0 ; i < 2 ; i++){
    for (j = 0 ; j < 2 ; j++){        
        instance_create( i * 50 + ( room_width / 2) , j * 50 + (room_height / 2 ),obj_inimigo);            
    }
}
O código a baixo é a maneira que fiz do inimigo bater e voltar no canto direito para depois mudar de direção. Mas nao funciona da maneira que eu quero, ele muda a direção de apenas a primeira coluna de inimigos, e não de todos de uma vez. Como eu poderia mudar de todos de uma vez?

Código: Selecionar todos

///movimento inimigo ida e volta na tela
with (obj_inimigo){
if (x < 350 && flag == true){
x+= 5;
}


if (x >= 350 && flag == true){
flag = false;

}


if (flag == false){
x-=5;
}

if (x <= 32){
flag = true;
}
}
Atenciosamente,

Epipoca.
[Rachel:]
"Do you like our owl?"

[Deckard:]
"Is it artificial?"

[Rachel:]
"Of course it is"

Avatar do usuário
Epipoca
Novato
Novato
Reações: 0
Mensagens: 11

Re: Movimento estilo Space Invaders [editado]

Mensagem por Epipoca » Sáb Abr 08, 2017 11:19 pm

Olá amigos! Tudo bem? Bom..eu consegui encontrar uma solução para o movimento em conjunto e fiz o seguinte código!

Eu não sei se o código está prático nem nada, mas foi a maneira que consegui encontrar (muito legal quando a gente consegue resolver um problema depois de horas hahaha). Mas mesmo assim eu gostaria da opinião de vocês sobre esse tipo de movimento em conjunto estilo space incaders! O que vocês acham do meu código? Como fariam e o que mudariam?

Create do controle

Código: Selecionar todos

for (i = 0 ; i < 2 ; i++){
    for (j = 0 ; j < 2 ; j++){        
        p[i,j] = instance_create( i * 50 + ( room_width / 2) , j * 50 + (room_height / 2 ),obj_inimigo);            
    }
}
Step do controle

Código: Selecionar todos

///movimento inimigo ida e volta
for (i = 0 ; i < 2 ; i++){
    for (j = 0 ; j < 2 ; j++){
if (p[i,j].x < 350 && flag == true){
p[i,j].x+= 5;
}
}
}

for (i = 0 ; i < 2 ; i++){
    for (j = 0 ; j < 2 ; j++){
if (p[i,j].x >= 350 && flag == true){
flag = false;

}
}
}

for (i = 0 ; i < 2 ; i++){
    for (j = 0 ; j < 2 ; j++){
if (flag == false){
p[i,j].x-=5;
}
}
}

for (i = 0 ; i < 2 ; i++){
    for (j = 0 ; j < 2 ; j++){
if (p[i,j].x <= 32){
flag = true;
}
}
}

[Rachel:]
"Do you like our owl?"

[Deckard:]
"Is it artificial?"

[Rachel:]
"Of course it is"

Avatar do usuário
Sergiodesjg
Novato
Novato
Reações: 0
Mensagens: 19

Re: Movimento estilo Space Invaders [editado]

Mensagem por Sergiodesjg » Ter Abr 11, 2017 1:07 pm

Oi, beleza?
Eu confesso que sou iniciante (pouco mais de um ano de estudo do GM), mas ainda assim senti vontade de comentar me arriscando a soar meio ridículo, mas como minha intenção é ajudar acho válido correr o risco.

Na minha opinião seria mais simples se você criasse uma variável global que comandasse o movimento de todos. Quando um dos personagens chegasse na extrema esquerda ou direita o valor da variável mudaria, fazendo os personagens acompanharem a mudança.

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 0 visitante