Página 1 de 1

[Muita] Dúvida com path

Enviado: Seg Dez 07, 2020 9:14 pm
por Nat_2005
Eu tentei tirar uma duvida em outro forum, porem ninguem respondeu ate hj, e essa resposta `e tudo que eu preciso para ter 90% do meu jogo completo.
Bem a pergunta `e a seguinte;

"
Eu vi uns tutoriais e li mensagens desse e vários fóruns, mas não consigo mexer com paths.
Minha situação é a seguinte:
Eu quero fazer uns inimigos, e em certo nível, esse inimigos devem aparecer na tela e formarem 1 colunascom 4 linhas para atacar o player. Seria tipo o jogo o Galaga (mas na horizontal).

Eu tenho apenas esse código(que ñ funciona):

Código: Selecionar todos

obj_alien1 > Creat
CÓDIGO:
if global.score >= 500{
 path_start(pt_alien, 5, path_action_stop, true);
}
E tbm tenho um path com 4 pontos (não fechado)
"
Se alguem puder ajudar eu agradeco

OBS: Desculpa nao usar acentuacao grafica, meu teclado esta totalmente desconfigurado e eu nao sei arrumar (se puderem ajudar com isso tbm, ficarei feliz...)

Re: [Muita] Dúvida com path

Enviado: Seg Dez 07, 2020 10:23 pm
por Chuaschinai
O problema, é que o path_start deve funcionar executando-o somente uma vez, da forma que você fez ai, ele ira ficar sendo executando infinitamente quando o score estiver acima ou igual a 500, andando para a direção do primeiro ponto definido.
Se você colocar ele no Create do objeto vai funcionar com certeza, mas se realmente precisar colocar ele no Step, faça utilizando o path_index que identifica se o objeto esta executando algum path assim:

Código: Selecionar todos

if(path_index == -1 and global.score >= 500) {
    path_start(pt_alien, 5, path_action_stop, true);
}
O path_index sempre será -1 se não houver um path executando no objeto.

Dica:
E também pode ocorrer problema usando o path de forma absoluta, ele irá começar o path de acordo com a room, e não em relação ao objeto, ele só é útil se você fez o path diretamente na room do Gamemaker, talvez se for seu caso seja melhor assim:
path_start(pt_alien, 5, path_action_stop, false )

Agora em relação a seu teclado, veja se este Vídeo resolve:

Re: [Muita] Dúvida com path

Enviado: Ter Dez 08, 2020 1:37 pm
por Nat_2005
grononmc escreveu:

Código: Selecionar todos

if(path_index == -1 and global.score >= 500) {
    path_start(pt_alien, 5, path_action_stop, true);
}
Vlw mesmo cara, esse código funcionou e o obj_alien1 já está seguindo meu path pt_alien.
Eu queria saber algo; esse path_action_stop seria para o objeto parar quando chega ao final de sua trajetória no path, certo? Pois o obj_alien1 não está parando quando chega ao final, ele faz a trajetória inversa para chegar ao ponto inicial e repete tudo.
Mas para resolver isso, não quero usar o path_action_stop, queria saber se há um jeito dele identificar um certo ponto path e parar no mesmo, pois como quero fazer uma fileira de aliens, quero que cada um para num ponto diferente do mesmo path.
Ps: Eu coloquei o absolute como false

(Sobre o teclado, já está tudo resolvido, acho que foi algo temporário mesmo. Vlw)

Re: [Muita] Dúvida com path

Enviado: Ter Dez 08, 2020 1:59 pm
por Chuaschinai
Existe o path_position que é usado para modificar ou pegar a posição que o objeto esta no path, ele vai de 0.0(incio do path) a 1.0(final do path), então digamos que você quer que o objeto fique exatamente no meio do path, basta colocar path_position = 0.5, você também pode fazer uma condição com isso:

Código: Selecionar todos

if(path_position >= 0.5) {
	path_position = 0.5;
}
Assim ele ficará parado exatamente na metade do path.

A questão dele estar fazendo o caminho inverso, é porque quando o path chega ao ponto final, o path_index fica igual a -1, para resolver isso você pode adicionar o path_position também para checar se o path não esta no final:

Código: Selecionar todos

if(path_index == -1 and path_position != 1.0) {
	path_start(pt_alien, 5, path_action_stop, false);
}
Dessa forma ele vai usar qualquer path_action_* que você quiser. Mas se você colocar o path_start direto no Create do objeto ou seja executando ele só uma vez nem precisa de condição alguma.

Re: [Muita] Dúvida com path

Enviado: Qua Dez 09, 2020 7:09 pm
por Nat_2005
Eu coloquei esse exato código no Step para fazer o teste e funcionou,
grononmc escreveu:

Código: Selecionar todos

if(path_position >= 0.5) {
 path_position = 0.5;
}
porém como eu queria que ele parasse no final do path, eu troquei 0.5 por 1.0 e não funcionou, sendo que troquei apenas a ação feita. Ficou assim:

Código: Selecionar todos

if(path_index == -1 and global.score >= 500) {
    path_start(pt_alien, 5, path_action_stop, false);
}
//O código de cima era da resposta anterior, o de baixo é o que vc mandou agora
if(path_position >= 1.0){
   path_position = 1.0;
}
Pelo o que eu interpretei do código acima, ele está checando se o objeto está na posição 1.0 do path(final do path), e se ele estiver, o path deve ficar naquela mesma posição até que algo mude esta condição. Não entendo o pq de não funcionar.


Este código tbm não funcionou, ele continua a fazer o caminho inverso
grononmc escreveu:

Código: Selecionar todos

if(path_index == -1 and path_position != 1.0) {
 path_start(pt_alien, 5, path_action_stop, false);
}

Você tbm me deu esta ideia:
grononmc escreveu: Mas se você colocar o path_start direto no Create do objeto ou seja executando ele só uma vez nem precisa de condição alguma.
Então pensei que eu poderia criar um path para cada alien que aparecer na tela e cada um irá para no 1.0 do path se eu adicionar o path_start no Creat. Acho que seria mais trabalhoso porém teria menos códigos complicados.
Tentarei está ideia também, porém ainda vou tentar com os outros códigos.

Re: [Muita] Dúvida com path

Enviado: Qui Dez 10, 2020 12:18 am
por Chuaschinai

Código: Selecionar todos

if(path_position >= 1.0){
   path_position = 1.0;
}
Este código não é funcional pois o limite é 1.0, então ele não consegue ser superior a 1.0, e não consegue ficar em 1.0, porque ele reseta o path_index para -1 quando chega ao final(1.0). O exemplo que dei foi meio problemático pois ele funciona se for menor que 1.0 pois ai ele não irá conseguir resetar o path_index pois nunca terminará o path.

Estranho fiz um teste aqui e funcionou perfeitamente.

Código: Selecionar todos

if(path_index == -1 and path_position != 1.0) {
   path_start(pt_alien, 5, path_action_stop, false);
}
Esqueça isso, você também pode usar uma variável para te auxiliar exemplo:
Tente isso: Clique para ver o conteúdo
Sempre que você deixar a variável p_started como false irá executar o path novamente, e ele sempre ira parar no final do path pois será executado uma única vez.
Se fizer o código a cima funcionará sem problemas, o código de mouse é só um exemplo para você testar.

Colocar o path_start no create normalmente resolve os problemas pois deixa a interação dos objetos simples, pois só executa quando o objeto é criado, mas como você precisa do global.score, fazer no step realmente é o ideal.

Teste ai, qualquer coisa se precisar te mando um exemplo, como nos joguinhos de nave.

Re: [Muita] Dúvida com path

Enviado: Qui Dez 10, 2020 6:47 pm
por Nat_2005
Funcionou direitinho, cara. Vlw mesmo. Eu fiz isso:

Código: Selecionar todos

if global.score >=500{
 if(path_index == -1 and path_position != 1.0) {
    path_start(pt_alien, 5, path_action_stop, true);
 }
}
Bem, como eu quero 4 aliens seguindo esse mesmo path, eu tenho que usar esse mesmo código em outros aliens(objetos separados) porém pedindo para que ele pare em pontos diferentes de mesmo path certo? Tipo isso:

Código: Selecionar todos

if global.score >=500{
 if(path_index == -1 and path_position != 0.5) //Aqui ele para no meio do path
 {
    path_start(pt_alien, 5, path_action_stop, true);
 }
}
Tbm queria adicionar algo. Percebi que, agora depois de adicionar esse código, o meu alien simplesmente surge na tela quando chego aos 500 de score. Se eu quero que ele apareça fora da tela e fosse indo até o começo do pt_alien eu teria que criar um path novo onde ele vai de fora da tela e se ligasse até o meu pt_alien, certo? Ou teria outra forma de fazer isso?

Re: [Muita] Dúvida com path

Enviado: Qui Dez 10, 2020 9:54 pm
por Chuaschinai
Nat_2005 escreveu: Bem, como eu quero 4 aliens seguindo esse mesmo path, eu tenho que usar esse mesmo código em outros aliens(objetos separados) porém pedindo para que ele pare em pontos diferentes de mesmo path certo?
Certo, você pode fazer isso criando uma variável especifica para os aliens, tipo alien_position onde você definirá a onde o alien irá para no path assim:
Create:

Código: Selecionar todos

p_started = false;
alien_position = 0.25;
Ai se você fizer da forma que te falei ali em cima, com uma variável para iniciar o path, você pode usar o path_end() para finalizar o path no ponto especifico:
Step:

Código: Selecionar todos

if(not p_started) {
    path_start(path, 5, path_action_stop, false);
    p_started = true;
}

if(path_position >= alien_position) {
    path_end();
}
Nat_2005 escreveu: Tbm queria adicionar algo. Percebi que, agora depois de adicionar esse código, o meu alien simplesmente surge na tela quando chego aos 500 de score. Se eu quero que ele apareça fora da tela e fosse indo até o começo do pt_alien eu teria que criar um path novo onde ele vai de fora da tela e se ligasse até o meu pt_alien, certo? Ou teria outra forma de fazer isso?
O path iniciara de forma relativa ao objeto, ou seja se você criar o objeto o path inicia a onde ele esta, se for absoluto ele começa em relação a room o que pode ser bom ou não, então basta cria-lo para fora da tela ou room.
Exemplo: ele criará fora da room no lado esquerdo:

Código: Selecionar todos

instance_create_depth(0-sprite_width(sprite_index), y, 0, obj_alien);
O path tem funções que podem te auxiliar a mudar o lado para que ele vai, fazendo um espelhamento exemplo o path_mirror(path) que vira o path para o lado ao contrário, você pode fazer um path totalmente automatizado ao seu gosto adicionando os pontos diretamente no código path_add_point() que adiciona um nova vertex ao final do path.

Re: [Muita] Dúvida com path

Enviado: Seg Jan 04, 2021 11:39 pm
por Nat_2005
Deu tudo certinho, camarada. Vlw pela ajuda