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.

Combate Topdown Tópico resolvido

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

Combate Topdown

Mensagem por Tafa » Qua Out 17, 2018 11:25 pm

Boa noite galera! Sou novo na comunidade e também novo na área. Venho tendo algumas dificuldades nos códigos de um jogo que estou fazendo. Esse jogo é de um projeto da minha faculdade e ele é no estilo TopDown (Tipo Zelda, Pokemon, etc..). O combate dele seria estilo zelda mesmo, porém estou com problemas pra fazer esse combate. O inimigo engancha muito quando bate no player, também da muito dano sem esperar atacar novamente... Enfim, estou com diversos problemas e queria uma ajuda. Seja com algum canal, livro, qualquer coisa q eu possa aprender mais sobre como fazer um combate fluído. Se quiserem posso postar o projeto e disponibilizar pra vocês darem uma olhada..
Desde já agradeço a atenção de todos!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Combate Topdown

Mensagem por None » Qui Out 18, 2018 12:23 am

O que você quer (especificamente para o combate) é hurt e hit box, dê uma pesquisada sobre o assunto.

Se você quiser todo o processo de criação deste projeto basta dar uma olhada no curso do Heartbeast sobre como criar um jogo estilo Zelda mesmo.
O curso dele é feito no GMS2 e necessita de uma versão completa dele, você pode conseguir uma licença de 60 dias gratuita do GMS2 criando uma conta no Amazon fire se não estou enganado.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
Tafa
Novato
Novato
Reações: 0
Mensagens: 7

Re: Combate Topdown

Mensagem por Tafa » Qui Out 18, 2018 9:39 am

None escreveu:O que você quer (especificamente para o combate) é hurt e hit box, dê uma pesquisada sobre o assunto.

Se você quiser todo o processo de criação deste projeto basta dar uma olhada no curso do Heartbeast sobre como criar um jogo estilo Zelda mesmo.
O curso dele é feito no GMS2 e necessita de uma versão completa dele, você pode conseguir uma licença de 60 dias gratuita do GMS2 criando uma conta no Amazon fire se não estou enganado.
Sim sim, eu estou usando hit box e também acompanho o tutorial do Hearthbeast, só que o sistema de knockback não ta funcionando igual no tutorial e eu não sei porque... No caso eu to usando a versão 1.4, pois como eu disse é um projeto da faculdade e precisa ser feito nessa versão =/.
Se quiser dar uma olhada no projeto, aqui o link para baixar no drive:

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Combate Topdown

Mensagem por None » Qui Out 18, 2018 10:35 am

Dá para ver que o knockback do inimigos está funcionando, então o sistema está ok, o problema está no seu código do knockback para o player, eu sei que o código do Heartbeast é bem organizado, então fica fácil de achar a parte de knockback do player e procurar pelo erro.
Qualquer coisa coloca o código aqui para a gente dar uma olhada.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
Tafa
Novato
Novato
Reações: 0
Mensagens: 7

Re: Combate Topdown

Mensagem por Tafa » Qui Out 18, 2018 10:56 pm

None escreveu:Dá para ver que o knockback do inimigos está funcionando, então o sistema está ok, o problema está no seu código do knockback para o player, eu sei que o código do Heartbeast é bem organizado, então fica fácil de achar a parte de knockback do player e procurar pelo erro.
Qualquer coisa coloca o código aqui para a gente dar uma olhada.
Boa noite ! Então mano, o knockback do player basicamente só vai pra um lado (no caso a direita) e eu não sei como ajeitar isso.. Vou postar o link com o projeto:


OBS1: o nome do player é Montu, então o obj_montu é referente ao player.
OBS2: desculpa a demora pra responder, tive um dia muito atarefado

Avatar do usuário
Tafa
Novato
Novato
Reações: 0
Mensagens: 7

Re: Combate Topdown

Mensagem por Tafa » Qui Out 18, 2018 10:58 pm

O código pro knockback do player está num evento de colisão com a hitbox do inimigo
- Código:
/// Damage the player
global.hp -= 1;


var dir = point_direction(obj_montu.x, obj_montu.y, x, y);
var xforce = lengthdir_x(obj_hitbox_enemy.knockback, dir);
var yforce = lengthdir_y(obj_hitbox_enemy.knockback, dir);

if ((x > 0) && (y > 0)){
x = x + xforce
y = y + yforce
}
else if ((x > 0) && (y < 0)){
x = x + xforce
y = y - yforce
}
else if ((x < 0) && (y > 0)) {
x = x - xforce
y = y + yforce
}
else if ((x < 0) && (y < 0)) {
x = x - xforce
y = y - yforce
}

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Combate Topdown

Mensagem por None » Sex Out 19, 2018 12:55 am

Eu não consegui baixar o seu projeto, mas pelo código que você postou, algumas coisas parecem meio estranhas.

Este código está na colisão do player ou do inimigo?

Se ele está na colisão, não importa de quem for, ao invés de usar obj_alguma coisa, use other.x e other.y

Não vejo qual a necessidade dos If else If etc, o resto do lengthdir pode ser tanto negativo quando positivo, então ele se ajusta automaticamente ao que você quer, basta ignorar todos os If e else e colocar apenas x+= xforce

O máximo que você pode precisar fazer é alterar a ordem no point direction, já que eu não sei quem está rodando o código, então se você quer ir na direção em que o outro está indo (para ser jogado) você coloca o other.x antes.

E olhando bem os If e else (chega a ser engraçado até) só a primeira condição pode acontecer, porque o x < 0 é fora da room e o y < 0 também é fora da room.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
Tafa
Novato
Novato
Reações: 0
Mensagens: 7

Re: Combate Topdown

Mensagem por Tafa » Sex Out 19, 2018 7:28 am

None escreveu:Eu não consegui baixar o seu projeto, mas pelo código que você postou, algumas coisas parecem meio estranhas.

Este código está na colisão do player ou do inimigo?

Se ele está na colisão, não importa de quem for, ao invés de usar obj_alguma coisa, use other.x e other.y

Não vejo qual a necessidade dos If else If etc, o resto do lengthdir pode ser tanto negativo quando positivo, então ele se ajusta automaticamente ao que você quer, basta ignorar todos os If e else e colocar apenas x+= xforce

O máximo que você pode precisar fazer é alterar a ordem no point direction, já que eu não sei quem está rodando o código, então se você quer ir na direção em que o outro está indo (para ser jogado) você coloca o other.x antes.

E olhando bem os If e else (chega a ser engraçado até) só a primeira condição pode acontecer, porque o x < 0 é fora da room e o y < 0 também é fora da room.
Estranho não ter dado pra baixar, pq especificamente não deu ?
Fiz outro link :
Esse código ta na colisão do hitbox com o meu player, e foi eu que fiz então ta ruim mesmo (desculpa pela falta de lógica x.x)huahau.
Coloquei o x += xforce e y += yforce e o player continua indo pra mesma direção =/
Tenta baixar de novo o projeto, só abrir o link e vai ter a pasta do projeto no google drive pra baixar.

Avatar do usuário
ValdeciVieira
Moderador
Moderador
Reações: 4
Mensagens: 103
Localização: Rio de Janeiro, Brasil

Re: Combate Topdown  Tópico resolvido

Mensagem por ValdeciVieira » Sex Out 19, 2018 9:21 am

Olá Tafa
Apenas mude isso
Tafa escreveu: /// Damage the player
global.hp -= 1;


var dir = point_direction(obj_montu.x, obj_montu.y, x, y);
var xforce = lengthdir_x(obj_hitbox_enemy.knockback, dir);
var yforce = lengthdir_y(obj_hitbox_enemy.knockback, dir);

if ((x > 0) && (y > 0)){
   x = x + xforce
   y = y + yforce
}
else if ((x > 0) && (y < 0)){
   x = x + xforce
   y = y - yforce
}
else if ((x < 0) && (y > 0)) {
   x = x - xforce
   y = y + yforce
}
else if ((x < 0) && (y < 0)) {
   x = x - xforce
   y = y - yforce
}
Pra isso

Código: Selecionar todos

/// Damage the player
global.hp -= 1;

var dir = point_direction(other.x, other.y, x, y);
var xforce = lengthdir_x(obj_hitbox_enemy.knockback, dir); 
var yforce = lengthdir_y(obj_hitbox_enemy.knockback, dir);

x += xforce;
y += yforce;
O único problema desse código é que o player alguma hora vai parar dentro da parede (já que ele é teletransportado) mas pra da uma arrumadinha nisso é só colocar um place_free  :o.-:
Eu tive que baixar o projeto para entender direito,mas uma analisada rápida e já percebi que na colisão com o hit_box inimigo que vc colocou no player voce pega a direção do próprio player 2 vezes.
Tafa escreveu:var dir = point_direction(obj_montu.x, obj_montu.y, x, y)

Avatar do usuário
Tafa
Novato
Novato
Reações: 0
Mensagens: 7

Re: Combate Topdown

Mensagem por Tafa » Sex Out 19, 2018 10:29 pm

Mega escreveu:Olá Tafa
Apenas mude isso
Tafa escreveu: /// Damage the player
global.hp -= 1;


var dir = point_direction(obj_montu.x, obj_montu.y, x, y);
var xforce = lengthdir_x(obj_hitbox_enemy.knockback, dir);
var yforce = lengthdir_y(obj_hitbox_enemy.knockback, dir);

if ((x > 0) && (y > 0)){
   x = x + xforce
   y = y + yforce
}
else if ((x > 0) && (y < 0)){
   x = x + xforce
   y = y - yforce
}
else if ((x < 0) && (y > 0)) {
   x = x - xforce
   y = y + yforce
}
else if ((x < 0) && (y < 0)) {
   x = x - xforce
   y = y - yforce
}
Pra isso

Código: Selecionar todos

/// Damage the player
global.hp -= 1;

var dir = point_direction(other.x, other.y, x, y);
var xforce = lengthdir_x(obj_hitbox_enemy.knockback, dir); 
var yforce = lengthdir_y(obj_hitbox_enemy.knockback, dir);

x += xforce;
y += yforce;
O único problema desse código é que o player alguma hora vai parar dentro da parede (já que ele é teletransportado) mas pra da uma arrumadinha nisso é só colocar um place_free  :o.-:
Eu tive que baixar o projeto para entender direito,mas uma analisada rápida e já percebi que na colisão com o hit_box inimigo que vc colocou no player voce pega a direção do próprio player 2 vezes.
Tafa escreveu:var dir = point_direction(obj_montu.x, obj_montu.y, x, y)
OMGGG deu certo!!! Nossa, muito muito muito obrigado ! Obrigado também ao None que me ajudou!
Incrível como era só uma besteirinha dessas ahuahuau, e minha próxima dúvida era isso mesmo... Como fazer pra não bugar na parede hauhauha
Aproveitando o mesmo tópico... Como eu faria esse place_free? Só com um If mesmo?

Responder

Quem está online

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