@dataclass class Circle: x: float y: float radius: float vx: float vy: float @dataclass class Rectangle: left: float top: float widt: float height: float
Я попробовал использовать хитбоксы, но проблема появляется, когда круг сталкивается об угол прямоугольника, и тогда он ведет себя непредсказуемо (fps 60, код обработки тика):
unit = Circle(.....) rect = Rectangle(...) g = 0.3 while 1: for (x, y) in [(unit.x - unit.radius, unit.y - unit.radius), (unit.x + unit.radius, unit.y + unit.radius), (unit.x + unit.radius, unit.y - unit.radius), (unit.x - unit.radius, unit.y + unit.radius)]: if rect.left <= x <= rect.left + rect.width and rect.top <= y <= rect.top + rect.height: if y < rect.top or y > rect.top + rect.height: unit.vy = -unit.vy * 0.7 # коэффициент восстановления if x < rect.left or x > rect.left + rect.widtht: # мог тоже использовать двойное неравенство, забыл unit.vx = -unit.vx * 0.7 unit.x += unit.vx unit.y += unit.vy time.sleep(1 / 60) unit.vy += g # писал код прямо тут, так что могут быть проблемы с синтаксисом