Conectar-se
Quem está conectado
25 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 24 Visitantes

jailson_dante

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 04/01/2014
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 6

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Physics, bala na direção do player?

em Sab 01 Jul 2017, 23:22
Eae pessoal, beleza?
É o seguinte, estou com um projeto em desenvolvimento usando comandos da física nativa do gamemaker, minha versão é GameMaker: Studio standard.

o jogo é um clássico de naves e como todos jogos de nave, tem sempre aquela nave clichê que sempre da um tiro na direção da nave do jogador para destruí-la.
Então, crio a nave inimiga e crio o tiro da nave mas o máximo que consigo fazer é a bala
ir em uma unica direção x ou y com os comandos 'phy_speed_x' e' phy_speed_y'.
No caso a que fica melhor já que a minha nave esta na vertical é:
Step da bala da nave inimiga:
Código:
phy_speed_y = +8

Qual é a maneira que existe, usando physics, para que a bala assim que criada no jogo (assim que a nave inimiga atirar) vá em direção do player? não quero que a bala siga-o (o player vai pra cima e a bala segue, o player vai para baixo e a mesma bala continua o seguindo)
simplesmente quero que a nave atire na direção do jogador.

Caso alguma duvida sobre o jogo, basta deixar no comentario que atualizarei a pergunta.
Obrigado a todos, agradeço desde já!
avatar
Ranking : Sem avaliações
Data de inscrição : 29/06/2017
Número de Mensagens : 8
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7
Ver perfil do usuáriohttps://discord.gg/9VuJYjr

Re: Physics, bala na direção do player?

em Seg 03 Jul 2017, 15:47
Trigonometria!

GameMaker possui duas funções que vão facilitar sua vida:
lengthdir_x e lengthdir_y; Você coloca a direção e o distancia nas duas funções e ele vai retornar o valor correto para cada eixo.

Outra opção pode ser usar a função physics_apply_local_impulse.

Recomendo que de uma olhada no manual dessas 3 funções, e da physics_apply_impulse também para um melhor entendimento.

Lembre-se também, que na engine de física, o eixo Y funciona como o plano cartesiano que você aprendeu na escola, e não em em pixels (como normalmente é no GameMaker). Isso significa que você vai ter que multiplicar o valor do eixo y por -1.

GL
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 04/01/2014
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 6

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Physics, bala na direção do player?

em Ter 04 Jul 2017, 12:11
cara me da mais uma ajudinha..
eu li a respeito dos comandos que você falou no manual da GM, mas ainda não sei como aplica-las no jogo.

No Step do meu inimigo para criar a bala eu usei o seguinte código:
Código:
if atirou = false
{
    alarm[0] = choose(20,30)
    atirou = true
}
E no Alarm[0]:
Código:
instance_create(x,y+15,obj_tiro2)
atirou = false
isso faz um loop basico pra ele continuar atirarndo.

já na bala (obj_tiro2)
no seu Step, ainda sem usar os codigos que você falou:
Código:
phy_speed_y =+8

Pode me dizer aonde eu mudo para que a bala o siga?
avatar
Ranking : Sem avaliações
Data de inscrição : 29/06/2017
Número de Mensagens : 8
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 7
Ver perfil do usuáriohttps://discord.gg/9VuJYjr

Re: Physics, bala na direção do player?

em Qui 06 Jul 2017, 00:07
Ao invés de aumentar a velocidade da bala a cada step, é muito mais simples você aplicar um impulso na bala AO CRIAR ELA.... Mais ou menos, vou explicar isso durante o código

Exemplo:
Código:
atirou = false; //resetamos o alarme
var bullet; //Criamos uma variavel temporaria
bullet=instance_create(x,y+15,obj_tiro2); //Instance create retorna o ID unico do objeto, assim você pode aplicar código especifico para este objeto a partir de outros.


with(bullet) //usar o "with" aqui, é como se eu estivesse escrevendo no create da bala, mas a partir do inimigo.
{
//Se este fosse um objeto normal do GameMaker, bastava nós definir a velocidade e a direção do objeto, simples. Mas como estamos usando a LiquidFun, precisaremos usar um pouco de criatividade. O "problema" de usar WITH no create, é que o código vai ser executado ANTES do create do objeto. Ou seja. se aplicarmos uma força na bala antes de definir a fixture e etc... iremos ter um erro porque a bala ainda não foi criada. Então o que faremos é: Definir duas variaveis proprias para nossa bala, direcao e forca, e depois NA BALA aplicaremos isso.
bullet_direction=point_direction(x,y,obj_player.x,obj_player.y) //Direcao da bala até o player, claro que isso deve ser melhorado depois para evitar bugs.
bullet_speed=15 //A velocidade da bala
}

Hora da gambiarra criatividade:
No create da bala, criaremos uma variavel setada em true;
Código:
apply_speed=true; //Isso vai determinar se a velocidade deve ser aplicada

E agora no step, caso apply_speed seja verdadeiro, aplicaremos a força, e colocamos apply_speed em falso, para que isso não aconteça de novo.
Código:

if (apply_speed)
{
apply_speed=false; //Não precisamos mais aplicar força
var xspeed,yspeed; //Criamos duas variaveis temporarias para a velocidade do eixo X e Y;

    xspeed=lengthdir_x(bullet_speed,bullet_direction); //Definimos a velocidade para caida eixo
    yspeed=lengthdir_y(bullet_speed,bullet_direction);
    
physics_apply_impulse(x,y,x+xspeed,y+lengthdir_y(bullet_speed,bullet_direction)); //E finalmente, aplicamos a força.
}

Acho que é isso. Se você tiver algum problema, pode me chamar no Discord (Jaqueta#7987) que lá eu consigo te ajudar na hora.
avatar
Ranking : Nota D
Notas recebidas : D
Data de inscrição : 04/01/2014
Número de Mensagens : 81
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 6

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuário

Re: Physics, bala na direção do player?

em Qui 06 Jul 2017, 09:13
não.. ainda não deu, a bala está indo na direção de uns 190 graus, totalmente pro lado direito da tela ao invés de ir na direção do player, ela está bem rápida mas a velocidade dela não é problema, de qualquer modo, te chamei no discord pra poder conversar, se souber o que acontesse e querer colocar aqui no forum mesmo não tem problema.

Uma imagem do que está acontecendo:
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum