Onde as mentes criativas se encontram!


 
hendrickxr
Novato
Novato
Autor
Mensagens: 6
Registrado em: Sáb Abr 29, 2017 9:46 pm
Karma: 13

Ia de boss ou chefe

Ter Jun 06, 2017 4:12 pm

Estou fazendo um game de plataforma, e estou com dificuldade para o boss vira na direção do player quando o persegue ,procurei um topico sobre isso mais não achei ,se alguem me indicar algum ou me dizer uma forma ou função que me ajude eu agradeço. eu uso game maker 8.1
 
Avatar do usuário
Willy
Novato
Novato
Mensagens: 19
Registrado em: Dom Ago 16, 2015 12:35 pm
Karma: 44

Re: Ia de boss ou chefe

Ter Jun 06, 2017 7:17 pm

O código que você precisa, depende muito do código que você já usa em seu jogo.
O método que eu farei abaixo pode ser facilmente adaptado, desde que você realmente entenda o que foi feito.

A primeira coisa que você precisa saber, é de que lado o jogador está sob o ponto de vista do boss. Usaremos este código no step do boss:


ladoDoJogador = sign(obj_jogador.x - x); 



Não se esqueça de declarar a variável "ladoDoJogador" no create (seu valor inicial pode ser -1 ou 1. Você entenderá porque).
Explicação do código: "sign" é uma função que pega o valor que ela carrega como argumento (no caso, obj_jogador.x - x) e retorna -1 se o valor for negativo, 0 se o valor for zero ou 1 se o valor for positivo. Dessa forma, sabemos que se "ladoDoJogador" valer 1, o jogador está a direita do boss, se valer -1, está à esquerda, e, se estiver 0, ele está no mesmo lugar que o boss.

Essa variável é vital para o resto do código, portanto tenha certeza que entendeu sua função.

Feito isso, podemos tratar o sprite para que ele olhe pro lado do jogador. Depende muito da forma que você troca de sprite, mas, no caso, apenas inverterei a imagem dependendo do lado que o personagem está. Ainda no step do boss, coloque:

if (ladoDoJogador!=0){
image_xscale = ladoDoJogador;
}


Checamos se ladoDoJogador não vale zero porque este valor faria o sprite sumir!
Se o valor permitir, image_xscale irá espelhar a imagem adequadamente.

A parte de movimentação é com você! Mas você pode fazer desta maneira:


//Step ou no local que você faz a movimentação
if (ladoDoJogador == 1){
//Move-se para a direita
}else if (ladoDoJogador ==-1){
//Move-se para a esquerda
}


Este é um método simples, mas talvez não tão fácil de entender.
Dúvidas é só falar! Boa sorte e bons estudos!
1
 
hendrickxr
Novato
Novato
Autor
Mensagens: 6
Registrado em: Sáb Abr 29, 2017 9:46 pm
Karma: 13

Re: Ia de boss ou chefe

Sáb Jun 10, 2017 9:34 pm

Willy escreveu:
O código que você precisa, depende muito do código que você já usa em seu jogo.
O método que eu farei abaixo pode ser facilmente adaptado, desde que você realmente entenda o que foi feito.

A primeira coisa que você precisa saber, é de que lado o jogador está sob o ponto de vista do boss. Usaremos este código no step do boss:


ladoDoJogador = sign(obj_jogador.x - x); 



Não se esqueça de declarar a variável "ladoDoJogador" no create (seu valor inicial pode ser -1 ou 1. Você entenderá porque).
Explicação do código: "sign" é uma função que pega o valor que ela carrega como argumento (no caso, obj_jogador.x - x) e retorna -1 se o valor for negativo, 0 se o valor for zero ou 1 se o valor for positivo. Dessa forma, sabemos que se "ladoDoJogador" valer 1, o jogador está a direita do boss, se valer -1, está à esquerda, e, se estiver 0, ele está no mesmo lugar que o boss.

Essa variável é vital para o resto do código, portanto tenha certeza que entendeu sua função.

Feito isso, podemos tratar o sprite para que ele olhe pro lado do jogador. Depende muito da forma que você troca de sprite, mas, no caso, apenas inverterei a imagem dependendo do lado que o personagem está. Ainda no step do boss, coloque:

if (ladoDoJogador!=0){
image_xscale = ladoDoJogador;
}


Checamos se ladoDoJogador não vale zero porque este valor faria o sprite sumir!
Se o valor permitir, image_xscale irá espelhar a imagem adequadamente.

A parte de movimentação é com você! Mas você pode fazer desta maneira:


//Step ou no local que você faz a movimentação
if (ladoDoJogador == 1){
//Move-se para a direita
}else if (ladoDoJogador ==-1){
//Move-se para a esquerda
}


Este é um método simples, mas talvez não tão fácil de entender.
Dúvidas é só falar! Boa sorte e bons estudos!

Oi obrigado por responder mais meu problema já foi resolvido na verdade eu já utilizava um método parecido com o seu utilizando sprites a maioria dos inimigos do game faz isso. porem eu queria que o chefe me perseguise ao ficar uma certa distancia usando o distance_to_object e com essa função fica difícil de definir a direção porem ao vasculhar o forum achei auguem que eu li falando sobre método de direção que é parecido com esse:
if obj_player.x > x{x += var_velo ; var_direcao = "right"}
if obj_player.x < x{x -= var_velo ; var_direcao = "left"}
esse código faz nada menos do que verificar se o jogador está na cordenada -x ou +x  do boss ou inimigo que persegue o player, var_velo é a variável que eu criei para definir velocidade e var_direcao  está mais do que claro.
esse maneira foi feita por min baseado na resposta dele eu só não falo o nome dele porque eu não lembro quem é mais de qualquer forma obrigado.

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes