Entrar
Últimos assuntos
» Servidor de Discord do fórum?por Super Games Ontem à(s) 01:27
» Problemas com a caixa de diálogo, ela é pequena e as letras não cabem dentro
por Rukasu777 Qui 16 maio 2024, 18:10
» Problemas com particulas
por RastaMaan Dom 12 maio 2024, 17:03
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08
» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43
» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
[Resolvido]Problema Colisão
4 participantes
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Game Maker :: GMS:Windows
Página 1 de 1
[Resolvido]Problema Colisão
Eu usei esse código pra colisão:
if place_meeting(x+hsp,y,nome objeto)
{
while(!place_meeting(x+sign(hsp),y,nome objeto))
{
x = x + sign(hsp);
}
hsp=0;
}
x = x + hsp;
if place_meeting(x,y+vsp,nome objeto)
{
while(!place_meeting(x+sign(hsp),y+sign(vsp),nome objeto))
{
y = y + sign(vsp);
}
vsp=0;
}
y = y + vsp;
mas quando o personagem encosta do objeto ele começa a atravesar o chão lentamente
e eu ja reescrevi o código umas 5 vezes.
if place_meeting(x+hsp,y,nome objeto)
{
while(!place_meeting(x+sign(hsp),y,nome objeto))
{
x = x + sign(hsp);
}
hsp=0;
}
x = x + hsp;
if place_meeting(x,y+vsp,nome objeto)
{
while(!place_meeting(x+sign(hsp),y+sign(vsp),nome objeto))
{
y = y + sign(vsp);
}
vsp=0;
}
y = y + vsp;
mas quando o personagem encosta do objeto ele começa a atravesar o chão lentamente
e eu ja reescrevi o código umas 5 vezes.
Última edição por Matheus_Riot em Qui 07 Jan 2021, 11:34, editado 1 vez(es)
Matheus_Riot- Games Ranking :
Data de inscrição : 04/01/2021
Reputação : 0
Número de Mensagens : 6
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Problema Colisão
Primeiramente, bem vindo ao fórum!
Segundo, pode mostrar o código que tu está utilizando para atualizar a força da gravidade (atualizar o valor do vsp)?
Segundo, pode mostrar o código que tu está utilizando para atualizar a força da gravidade (atualizar o valor do vsp)?
Re: [Resolvido]Problema Colisão
theguitarmester escreveu:Primeiramente, bem vindo ao fórum!
Segundo, pode mostrar o código que tu está utilizando para atualizar a força da gravidade (atualizar o valor do vsp)?
Obrigado
vsp = vsp + grv;
acho q é esse, é q eu comecei a mexer com programação a pouco tempo então eu não sei quase nada.
Matheus_Riot- Games Ranking :
Data de inscrição : 04/01/2021
Reputação : 0
Número de Mensagens : 6
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Problema Colisão
Isso deve estar acontecendo sempre:
E isso também:
Acaba que daí tu está sempre passando deslocando um pouco pra baixo.
Uma forma não perfeita mais rápida de não acontecer isso, é checar se está colidindo com alguma coisa na posição atual (com um leve deslocamento de 1px pra baixo), e caso não estiver colidindo (o uso do '!' é para negar), então aplicar a gravidade:
vsp = vsp + grv;
E isso também:
y = y + vsp;
Acaba que daí tu está sempre passando deslocando um pouco pra baixo.
Uma forma não perfeita mais rápida de não acontecer isso, é checar se está colidindo com alguma coisa na posição atual (com um leve deslocamento de 1px pra baixo), e caso não estiver colidindo (o uso do '!' é para negar), então aplicar a gravidade:
- Código:
if !place_meeting(x,y+1,nome objeto) {
vsp = vsp + grv;
}
Re: [Resolvido]Problema Colisão
theguitarmester escreveu:Isso deve estar acontecendo sempre:vsp = vsp + grv;
E isso também:y = y + vsp;
Acaba que daí tu está sempre passando deslocando um pouco pra baixo.
Uma forma não perfeita mais rápida de não acontecer isso, é checar se está colidindo com alguma coisa na posição atual (com um leve deslocamento de 1px pra baixo), e caso não estiver colidindo (o uso do '!' é para negar), então aplicar a gravidade:
- Código:
if !place_meeting(x,y+1,nome objeto) {
vsp = vsp + grv;
}
e eu troco qual código por esse?
Matheus_Riot- Games Ranking :
Data de inscrição : 04/01/2021
Reputação : 0
Número de Mensagens : 6
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Problema Colisão
Na segunda parte do seu código é bom remover também a parte destacada em negrito:
if place_meeting(x,y+vsp,nome objeto){
while(!place_meeting(x+sign(hsp),y+sign(vsp),nome objeto)){
y = y + sign(vsp);
}
vsp = 0;
}
y = y + vsp;
Essa parte destacada faz ele checar uma outra posição e pode afetar o resultado da movimentação vertical.
É bom termos noção de todo o código que você está usando nessa parte pois pode ser um problema na atribuição de alguma outra checagem.
Outra coisa, o nome do objeto que você está usando como chão está exatamente como "nome objeto"?
if place_meeting(x,y+vsp,nome objeto){
while(!place_meeting(x+sign(hsp),y+sign(vsp),nome objeto)){
y = y + sign(vsp);
}
vsp = 0;
}
y = y + vsp;
Essa parte destacada faz ele checar uma outra posição e pode afetar o resultado da movimentação vertical.
É bom termos noção de todo o código que você está usando nessa parte pois pode ser um problema na atribuição de alguma outra checagem.
Outra coisa, o nome do objeto que você está usando como chão está exatamente como "nome objeto"?
Re: [Resolvido]Problema Colisão
Diemorth escreveu:Na segunda parte do seu código é bom remover também a parte destacada em negrito:
if place_meeting(x,y+vsp,nome objeto){
while(!place_meeting(x+sign(hsp),y+sign(vsp),nome objeto)){
y = y + sign(vsp);
}
vsp = 0;
}
y = y + vsp;
Essa parte destacada faz ele checar uma outra posição e pode afetar o resultado da movimentação vertical.
É bom termos noção de todo o código que você está usando nessa parte pois pode ser um problema na atribuição de alguma outra checagem.
Outra coisa, o nome do objeto que você está usando como chão está exatamente como "nome objeto"?
eu tirei aquele + sign do x e continuou caindo, e eu ainda não entendi onde eu coloco isso:
if !place_meeting(x,y+1,nome objeto) {
vsp = vsp + grv;
}
eu troco o segundo código por esse ou eu só coloco ele debaixo?
Matheus_Riot- Games Ranking :
Data de inscrição : 04/01/2021
Reputação : 0
Número de Mensagens : 6
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Problema Colisão
Olá matheus_riot! Bem vindo ao fórum GMBR!
Pelo que ví nessa discussão, vc usa o mesmo sistema para colisão que eu uso (ao menos quando faço alguma coisa que funcione xD)
Primeiramente, você faz os cálculos das velocidades, depois aplica em uma colisão. Veja um exemplo de step Event:
Lembrando que isso é só um exemplo, depende mesmo de como você está fazendo o calculo de xsp e ysp!
Pelo que ví nessa discussão, vc usa o mesmo sistema para colisão que eu uso (ao menos quando faço alguma coisa que funcione xD)
Primeiramente, você faz os cálculos das velocidades, depois aplica em uma colisão. Veja um exemplo de step Event:
- Código:
//aqui supostamente calculada as velocidades
xsp=4*inh; //x
ysp+=grv-(jum*inv); //y com a gravidade e o pulo (apenas exemplo)
//aqui e calculada as colisoes
//horizontal
if place_meeting(x+xsp,y,obj_solidparent) //verifica se esta se econtrando com outro obj
{
while !place_meeting(x+sign(xsp),y,obj_solidparent) //depois verif. se ainda tem espaco mesmo com a colisao
{
x+=sign(xsp); //move de 1 em 1 px.
}
xsp=0; //ai sim zera a velocidade
}
x+=xsp; //depois move em x
//Na vertical so muda que e o Y e nao o X
Lembrando que isso é só um exemplo, depende mesmo de como você está fazendo o calculo de xsp e ysp!
NPH- Games Ranking :
Notas recebidas : B
Data de inscrição : 28/11/2010
Reputação : 58
Número de Mensagens : 504
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker Studio 1.4
- Game Maker Studio 2.0
Re: [Resolvido]Problema Colisão
NPH escreveu:Olá matheus_riot! Bem vindo ao fórum GMBR!
Pelo que ví nessa discussão, vc usa o mesmo sistema para colisão que eu uso (ao menos quando faço alguma coisa que funcione xD)
Primeiramente, você faz os cálculos das velocidades, depois aplica em uma colisão. Veja um exemplo de step Event:Dá uma verificada em seu código de movimentação, pode ser que algo não esteja claro e verifique se está fazendo primeiro os calculos das velocidades depois a de colisão.
- Código:
//aqui supostamente calculada as velocidades
xsp=4*inh; //x
ysp+=grv-(jum*inv); //y com a gravidade e o pulo (apenas exemplo)
//aqui e calculada as colisoes
//horizontal
if place_meeting(x+xsp,y,obj_solidparent) //verifica se esta se econtrando com outro obj
{
while !place_meeting(x+sign(xsp),y,obj_solidparent) //depois verif. se ainda tem espaco mesmo com a colisao
{
x+=sign(xsp); //move de 1 em 1 px.
}
xsp=0; //ai sim zera a velocidade
}
x+=xsp; //depois move em x
//Na vertical so muda que e o Y e nao o X
Lembrando que isso é só um exemplo, depende mesmo de como você está fazendo o calculo de xsp e ysp!
olha eu não entendi muito do vc falou, mas esse é todo o código q eu tenho:
Create:
hsp = 0;
vsp = 0;
grv = 0.3;
walksp = 4;
jumpsp = 9;
step:
//player inputs
key_left = keyboard_check(ord("A"));
key_right = keyboard_check(ord("D"));
key_jump = keyboard_check_pressed(vk_space);
//calcular movimentos
var _move = key_right - key_left;
hsp = _move * walksp; // comandos movimento
vsp = vsp + grv;
x = x + hsp;
y = y + vsp; // comando gravidade
if place_meeting(x+hsp,y,obj_invisivel)
{
while(!place_meeting(x+sign(hsp),y,obj_invisivel))
{
x = x + sign(hsp);
}
hsp=0;
}
x = x + hsp;
if place_meeting(x,y+vsp,obj_invisivel)
{
while(!place_meeting(x,y+sign(vsp),obj_invisivel))
{
y = y + sign(vsp);
}
vsp=0;
}
y = y + vsp;
if !place_meeting(x,y+1,obj_invisivel) {
vsp = vsp + grv;
}
PS: Ainda não programei o pulo!
Matheus_Riot- Games Ranking :
Data de inscrição : 04/01/2021
Reputação : 0
Número de Mensagens : 6
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Problema Colisão
Olá, já encontrei o seu erro!
- Código:
//apague isso aqui--------------------------
x = x + hsp;
y = y + vsp; // comando gravidade
//-------------------------------------------------------
//aqui e a colisao horizontal
if place_meeting(x+hsp,y,obj_invisivel) //aqui e quando colide
{
while(!place_meeting(x+sign(hsp),y,obj_invisivel)) //aqui verifica na colisao se ainda tem espaco
{
x = x + sign(hsp); //move de pixel em pixel
}
hsp=0; //zera velocidade
}
x = x + hsp; //move em x
//aqui a vertical
if place_meeting(x,y+vsp,obj_invisivel) //quando colide
{
while(!place_meeting(x,y+sign(vsp),obj_invisivel)) //quando ha espaco na colisao ainda
{
y = y + sign(vsp); //move de pixel em pixel
}
vsp=0; //zera velocidade
}
y = y + vsp; //move em y
//essa parte esta depois da colisao, tem que ser antes
//------------------------------------------------------------
if !place_meeting(x,y+1,obj_invisivel) {
vsp = vsp + grv;
}
//-----------------------------------------------------------
NPH- Games Ranking :
Notas recebidas : B
Data de inscrição : 28/11/2010
Reputação : 58
Número de Mensagens : 504
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker Studio 1.4
- Game Maker Studio 2.0
Re: [Resolvido]Problema Colisão
NPH escreveu:Olá, já encontrei o seu erro!Pegue a parte da gravidade, coloque-a antes da colisão, apague a primeira parte que lhe indiquei e testa, creio que são essas duas partes do código que tá dando errado
- Código:
//apague isso aqui--------------------------
x = x + hsp;
y = y + vsp; // comando gravidade
//-------------------------------------------------------
//aqui e a colisao horizontal
if place_meeting(x+hsp,y,obj_invisivel) //aqui e quando colide
{
while(!place_meeting(x+sign(hsp),y,obj_invisivel)) //aqui verifica na colisao se ainda tem espaco
{
x = x + sign(hsp); //move de pixel em pixel
}
hsp=0; //zera velocidade
}
x = x + hsp; //move em x
//aqui a vertical
if place_meeting(x,y+vsp,obj_invisivel) //quando colide
{
while(!place_meeting(x,y+sign(vsp),obj_invisivel)) //quando ha espaco na colisao ainda
{
y = y + sign(vsp); //move de pixel em pixel
}
vsp=0; //zera velocidade
}
y = y + vsp; //move em y
//essa parte esta depois da colisao, tem que ser antes
//------------------------------------------------------------
if !place_meeting(x,y+1,obj_invisivel) {
vsp = vsp + grv;
}
//-----------------------------------------------------------
vlw cara eu to a dois dias tentando arrumar isso
ultima pergunta, como eu marco como resolvido?
Matheus_Riot- Games Ranking :
Data de inscrição : 04/01/2021
Reputação : 0
Número de Mensagens : 6
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
NPH gosta desta mensagem
Re: [Resolvido]Problema Colisão
Você pode ir na mensagem inicial, clicar em editar, depois desce até opções e clica no botão "resolvido".
NPH e theguitarmester gostam desta mensagem
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Game Maker :: GMS:Windows
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|