Discord
Login
Community
DARK THEME

Thank you so much to everyone who helped me with collisions // Muito obrigado a todos que me ajudaram com as colisões

Thank you so much to everyone who helped me! After a lot of effort, I finally managed to learn how to make collisions. One day, I watched a video about a very simple 2D engine. When I saw it and tested it, I loved it. It had everything I needed in an extremely simple way, until one day I encountered a problem: collisions. During an English class, a way to handle collisions using X and Y popped into my head. Eventually, that wasn't enough. It was too complicated and time-consuming (and I program in Python, so I always have to adapt the code of the people who helped me). Then, I finally found a way to make collisions by importing libraries, and I thought that was really cool. I’ve tried switching engines, but I couldn’t get used to any of them. I’m really grateful to everyone who helped me get this far!

tradução ----------------------------------------------------------

Muito obrigado a todos que me ajudaram! Depois de muito esforço, finalmente consegui aprender a fazer as colisões. Um dia, vi um vídeo falando sobre uma engine 2D muito simples. Quando vi e fui testar, adorei. Ela tinha tudo o que eu precisava de forma extremamente simples, até que um dia encontrei um problema: as colisões. Durante uma aula de inglês, surgiu na minha cabeça uma forma de fazer as colisões usando X e Y. Até que um dia isso não foi mais suficiente. Era muito complicado de fazer e demorava (e eu programo em Python, então eu sempre preciso adaptar os códigos das pessoas que me ajudavam). Até que finalmente encontrei uma forma de fazer colisões, importando bibliotecas, e achei isso muito legal. Já tentei trocar de engine, mas não me adaptei a nenhuma delas. Agradeço muito a todos que me ajudaram até aqui!

oi, sou br igual vc, quer me ajudar em projetos? Uso microscript mas sei python e meu projeto atual é em JS.

dúvida, vc usou distancia euclidiana ou AABB ou até OBB? Queria saber, pq em alguns projetos espécificos pode nn ser útil algumas coisas; Você tinha dificuldade com tilemaps? Pois também tenho. A distancia euclidiana é um metódo eficaz e rápido

//Python, but is only solve small things/Python, mas apenas resolver pequenas coisas em outras linguagens, já que a lógica é a mesma 
update = function()
  dx = player.x - enemy.x // Não é obrigatorio assim, mas economiza bastante tempo
  dy = player.y - enemy.y

  distance = Math.sqrt((dx**2)+(dy**2)) //Crucial ter o sqrt
  if distance < 10:
    print("collide!")


Exemplos para o que você usaria distancia euclidiana:

  • Mapas retos(sem colisão com mapa)
  • Normalização de velocidade do inimigo

Esse é um exemplo para distancia euclidiana que envolve teorema de pitagoras. Parece complexo, mas eu te garanto, é fácil.

Pra você ter noção, foi criado pelos babilônios, que foi confirmado por pitágoras, criando teorema de pitagoras. Não vou entrar em detalhes, mas ele vê o valor de C(caso C não seja nenhum cateto, já que a hipotenusa pode ser A, B, C, D, contudo, precisa ser a soma dos catetos ao quadrado. Usei C de exemplo, pois é um dos mais comuns para a hipotenusa), fazendo raiz quadrada de cateto^2 + cateto^2 = hipotenusa. Mas pra criar jogo bom, não precisa entender o teorema de pitagoras, mas entender pra quê ele é útil.

Existe uma forma melhor de fazer distancia euclidiana(economizando), e aqui te mostro:

def distance(x1, y1, x2, y2)
  local dx = x2 - x1
  local dy = y2 - y1
  local distance = Math.sqrt((dx**2) + (dy**2))
  return distance
end

Agora, AABB é o classico, acho que não preciso explicar né.

def check_collision(a, b) 
   return (a.x < b.x + b.w and 
           a.x + a.w > b.x and 
           a.y < b.y + b.h and
           a.y + a.h > b.y)

bom, acho que é o método comum colocar numa função com return, isso vai economizar MUITO tempo, assim você precisa fazer apenas

if check_collision(obj1, obj2):
   print("Collide")

se eu soubesse OBB eu até te ensinava, mas é um bagulho complexo, e pelo menos 90% dos projetos não precisam de OBB

Vlw flw e obrigado pela atenção

Post a reply

Progress

Status

Preview
Cancel
Post
Validate your e-mail address to participate in the community