Página 1 de 1

Combate Topdown

Enviado: Qua Out 17, 2018 11:25 pm
por Tafa
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!

Re: Combate Topdown

Enviado: Qui Out 18, 2018 12:23 am
por None
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.

Re: Combate Topdown

Enviado: Qui Out 18, 2018 9:39 am
por Tafa
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:

Re: Combate Topdown

Enviado: Qui Out 18, 2018 10:35 am
por None
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.

Re: Combate Topdown

Enviado: Qui Out 18, 2018 10:56 pm
por Tafa
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

Re: Combate Topdown

Enviado: Qui Out 18, 2018 10:58 pm
por Tafa
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
}

Re: Combate Topdown

Enviado: Sex Out 19, 2018 12:55 am
por None
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.

Re: Combate Topdown

Enviado: Sex Out 19, 2018 7:28 am
por Tafa
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.

Re: Combate Topdown  Tópico resolvido

Enviado: Sex Out 19, 2018 9:21 am
por ValdeciVieira
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)

Re: Combate Topdown

Enviado: Sex Out 19, 2018 10:29 pm
por Tafa
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?